毎日、新しいコードが世界中で作成されています。 たくさんのコード。 このコードの一部は役に立つかもしれません。 開発コストを削減するか、時間を節約できます。 しかし、コードを使用するには、コードを理解する必要があるため、怠け者の開発者は自分が書いた以上のことを読みます。 コードがどのように機能するかを素早く理解することは、長年にわたって習得されてきた貴重なスキルです。 この記事では、
CodeRush for Roslyn (以下
CRR )が、このスキルを完全に習得していない人でも、コードをより速く読む方法を説明します。 この記事は、ハッカーや怠け者の開発者にとって興味深いものになります。
機械はどのようにコードを学ぶのに役立ちますか?メモ帳でプログラムのソースを開くと、次のようになります。

コードを読みやすくするために、キーワードを強調表示できます。 最も単純な実装では、これは、たとえばキーワードによるテキスト検索によって実行できます。 または、Far Managerで行われているように、正規表現のコードカラーリングを実装します。

コードをコンパイルするとき、字句的および構文的に解析されます。 パーサーの結果は通常、ツリーです。 構文ツリーの情報を使用して、Visual Studioは構造ブロックの境界を決定し、リテラルの色付けを行うことができます。
SayHello()メソッドの構文ツリー
しかし、最後から2番目の画像には、構文ツリーでは不十分な色があります。 これは、「using System」という行です。 この行を灰色にするには、型の使用に関する情報(セマンティックモデル)を分析する必要があります。 セマンティックモデルから、タイプ間の関係に関する情報を取得できます。 たとえば、基本クラスとその子孫、インターフェイスの実装、メソッドのオーバーロード、リンクの検索。 クラスを使用する場所を検索する
そして最後に、コードを理解するために、デバッガーの下で起動され、どのように機能するかを確認します。
したがって、ソースコード自体に加えて、Visual Studioの拡張機能の開発者には、少なくとも3つのデータソースがあります。
- ロズリン構文木
- ロズリンセマンティックモデル
- デバッグ情報
CRRはこの情報をどのように使用してコード調査を支援しますか?CRRは、メソッドの開始時に標準的なスタジオビジュアライゼーションに構造照明とアイコンを追加します。 構造ハイライトは構文ツリー上に構築されています。

アイコンには、言語構成の範囲とタイプに関する情報が含まれており、人がより速く認識します。 構造ハイライトはXAMLでも機能します。

ILSpyのようなナビゲーションが好きな人の多くは、メソッドが呼び出されるすべての場所を見つけることができる場合、プロパティが使用または設定されます。 CRRには、このための参照ウィンドウがあり、セマンティックモデルの情報を視覚化します。 標準的なスタジオのリンク検索とは異なり、参照ウィンドウにはグループ化、フィルタリング、統合コード表示が実装されています。 フィルタリングは、エンティティの名前だけでなく、その使用のタイプによっても実装されます。

リンクは、メソッドやプロパティだけでなく、何でも検索できます。 たとえば、列挙要素へのリンクを検索した結果は次のようになります。

Referencesに組み込まれたコードビューは、画像の下部に表示されます。 彼のおかげで、リンクを表示するときに、コードのある現在のタブは変更されません。 ただし、必要に応じて、スタジオコードエディターのリンクをダブルクリックして開きます。
Referencesで機能するエンジンは、ポップアップUIとしても利用できます。 CRRでは、この機能は
JumpToと呼ばれ
ます 。 セマンティックモデルに加えて、
JumpToはプロジェクトの構造に関するデータを使用します。
JumpToは
XAMLでも機能します。
MVVMパターンを使用する場合、CRRはViewModelを見つけて、XAMLからモデルコードに正しく移動できます。

表示されているオプションに加えて、
JumpToは相続人と基本型、オーバーロードされたメソッド、プロジェクトファイルをナビゲートできます。
JumpToを呼び出すには、
Ctr + Alt + Nを押す必要があります
。 Referencesとは異なり、
JumpToはコードの学習よりも遷移に重点を置いているため、発行リストでアイテムを選択すると、プレビューせずにそのアイテムに移動します。
Referencesおよび
JumpToによって提供されるナビゲーションに加えて、CRRには手動ナビゲーションメカニズムもあります。 これらはブックマークです。 正確な行に移動できる標準ブックマーク。 CRRのブックマークは「2次元」です。

ブックマークに加えて、最後の図はマーカーを示しています。 赤いマーカーは自分で配置でき、青いマーカーはいくつかの機能を配置できます。 たとえば、
DropMarkerBeforeJump 。 マーカーは、ブックマークに戻ったときに消えるという点でブックマークとは異なります。
デバッグ時に、CRRはローカル変数の値を表示し、遷移を予測できます。 この画像では、
デバッグビジュアライザーが条件が機能しなかったコードフラグメントの明るさを低下させていることがわかります。
CRRは、構造の強調表示、
参照ウィンドウ、
JumpToの高度なナビゲーション、改善されたデバッグの視覚化により、コードをすばやく理解するのに役立ちます。
Visual Studio Galleryで試用版をダウンロードできます。
これは、CRRに関する一連の記事の記事です。
前の記事:
RoslynのCodeRush:パート2-より良いコードの機能レビューCodeRush for Roslyn:パート1-テストによる開発に役立つ機能