ReSharper 2020.2 ヘルプ

ソーステンプレート

伝統的に、テンプレートやスニペットはあなたのソースコードの外で保存され管理されています。通常テンプレートを使用すると、普遍的な定型コードをすばやく作成できるため、これは理にかなっています。これらの目的のために、ReSharper は多くの定義済みライブテンプレートサラウンドテンプレートファイルテンプレートを提供しています。これらの種類の独自のテンプレートを作成することもできます。

ただし、現在のプロジェクトまたはソリューションにのみ関連する繰り返し可能なコードを生成したい場合があります。ReSharper では、ソーステンプレートを使用してそのようなタスクを合理化することができます。

使い方

従来のテンプレートとは対照的に、ソーステンプレートはプロジェクトのコードのどこにでも拡張メソッド(英語)として作成できます。プロジェクトの特定のタイプまたは標準タイプに対して定義できます。 object の拡張メソッドとして作成することで、ソーステンプレートをすべてのタイプで使用できるようにすることもできます。

テンプレートが定義されるとすぐに、対応する型のオブジェクトとその継承のためにコード補完リストで利用可能になります。リストからテンプレートを選択すると、ReSharper はテンプレートメソッドの本体から自分のコードにコードを挿入します。

以下に、ソーステンプレートの最も単純なアプリケーションを示す例を示します。テンプレート forEach は、すべてのジェネリックコレクションで使用できます。これは、パラメーター this IEnumerable<T> x で定義されます。メソッド本体で指定されているように、コレクションを反復するコードを挿入します。プロジェクトの任意の静的クラスでテンプレートを定義できます。ReSharper は、[SourceTemplate] 属性によってテンプレートとして識別します。

public static class Foo { [SourceTemplate] public static void forEach<T>(this IEnumerable<T> x) { foreach (var i in x) { //$ $END$ } } }

このテンプレートをデプロイするために、任意のコレクションオブジェクトの自動補完を使用できるようになりました。

Source template in the completion list

テンプレート項目を選択すると、オブジェクトはテンプレートテキストに置き換えられます。

public void Test(IEnumerable<string> enumerable) { foreach (var i in enumerable) { } }

テンプレート定義の //$ $END$ コメントは、テンプレートが適用された後のキャレット位置を定義する定義済みのテンプレートパラメーターにすぎないことに注意してください。テンプレートの他のパラメーター使用して、テンプレートをより柔軟にすることができます。

ソーステンプレートを使用する理由

上記のように、ソーステンプレートは、現在のプロジェクトまたはソリューションで再利用するコードブロックに最も役立ちます。従来のテンプレートに比べて、ソーステンプレートの利点を示すいくつかの点があります。

  • ソーステンプレートを操作するために、どこかに切り替える必要はありません。すべてがエディターにあります。

  • テンプレートは厳密に型指定されているため、関連するオブジェクトに対してのみ呼び出すことができます。

  • テンプレート定義がコンパイルされている限り、テンプレートコードにエラーがないことを確認できます。

  • ソーステンプレートの作成および編集中は、インスペクション コードナビゲーション機能コード補完など、好きな ReSharper 機能を自由に使用できます。

ソーステンプレートを作成する

ソーステンプレートの定義については、新しいクラスを作成するか、拡張メソッドを保持する既存の静的クラスを使用できます。

テンプレートメソッドとその本体

ソーステンプレートはパブリック拡張メソッドであり、[SourceTemplate] 属性を持っている必要があります。この属性は、[NotNull] , [CanBeNull] およびその他のコード注釈属性と共に、JetBrains.Annotations 名前空間で定義されます。ソーステンプレートメソッドを定義するには、プロジェクトで ReSharper コード注釈サポートを有効にする必要があります。

テンプレート本体では、好きなことをするコードを書くことができます。通常は、呼び出し元オブジェクトで何かを行いますが、必ずしもそうする必要はありません。

また、テンプレートメソッドでコンパイルされないコードを使用する必要があります。ex:ローカル変数の名前を生成するために呼び出し側オブジェクト名を使用することができます。この場合、このコードを '$' 記号で始まる行またはブロックコメントの中に配置します。

[SourceTemplate] public static void Bar(this Entity entity) { /*$ var $entity$Id = entity.GetId();; DoSomething($entity$Id); */ }

パラメーターとマクロ

ソーステンプレートでは、パラメーター amd マクロを使用でき ます。パラメーターに使用するマクロに応じて、パラメーターを指定および使用する方法をいくつか選択できます。

  • テンプレートメソッドに新しいパラメーターを追加して、テンプレートパラメーターを作成できます。デフォルトでは、編集可能なパラメーターとして動作します。つまり、テンプレートを適用すると、ホットスポットセッションの間にフォーカスを受け取ります。このパラメーターにマクロを定義する場合は、以下の例に示すように、[Macro] 属性を追加する必要があります。

    • 属性の「式」プロパティは、どのマクロを使用するかを定義します。使用可能なテンプレートマクロの 1 つを指定できます。

    • 'Editable' プロパティは、テンプレートが適用されたときにユーザーがパラメーターを編集できるかどうかをオプションで指定します。デフォルトでは、すべてのユーザー定義パラメーターは編集可能です。値 -1 は、パラメーターを編集不可にします。
      テンプレートで同じパラメーターが複数回使用されている場合、テンプレートが適用されると 1 つの出現箇所のみが編集可能になります。他の出現箇所は同期して変更されます。必要に応じて、「編集可能」プロパティでゼロベースのインデックスを指定することにより、編集可能な出現箇所を定義できます。

    [SourceTemplate] public static void newGuid(this object obj, [Macro(Expression = "guid()", Editable = -1)] string newguid) { Console.WriteLine(newguid); }
  • テンプレートメソッドのローカル変数をテンプレートパラメーターに変換できます。これを行うには、[Macro] 属性をテンプレートメソッド定義に追加し、Target プロパティで変数名を指定する必要があります。例:

    [SourceTemplate] [Macro(Target = "item", Expression = "suggestVariableName()")] public static void forEach<T>(this IEnumerable<T> collection) { foreach (var item in collection) { //$ $END$ } }
  • 他の ReSharper テンプレートと同じように、定義済みパラメーターとすべてのユーザー定義パラメーターを使用して、パラメーター ID を 2 つの '$' 記号 $param_name$ で囲むことができます。

    文字列リテラル内にユーザ定義のテンプレートパラメーターを使用することができます(例:

    Console.WriteLine("A random GUID: $newguid$");

    文字列リテラルの外側でテンプレートパラメーターを使うには、'$' 記号で始まる特別なテンプレートコメント //$ $param_name$ に入れる必要があります。または /*$ $param_name$ */ 例:

    [SourceTemplate] [Macro(Target = "newguid", Expression = "guid()", Editable = -1)] public static void newGuid(this object obj) { //$ var guid = "$newguid$"; Console.WriteLine("A random GUID: $newguid$"); }

    メソッドパラメーターとローカル変数として作成された呼び出し元オブジェクトとテンプレートパラメーターは、特別なテンプレートのコメントの中に '$' 記号がある場合とない場合の両方で使用できます。

ソーステンプレートを適用する

ソーステンプレートを適用するには、まずテンプレートがスコープ内にあることを確認してください。つまり、同じ名前空間にいるか、テンプレートの名前空間が明示的にインポートされています。

ソーステンプレートからコードフラグメントを作成する

  1. テンプレートを配置する場所のキャレットを設定します。

  2. テンプレートをデプロイするオブジェクトを入力し、ドットを入力して、テンプレートの名前またはそのキャメルハンプ省略形の入力を開始します。

  3. 補完リストでテンプレートを選択してクリックするか、Enter を押します。

  4. 呼び出し元オブジェクト、ドット、および入力したテンプレート名の一部は、テンプレート本体に置き換えられます。

  5. テンプレートに編集可能なパラメーターがある場合(つまり、ユーザー入力が必要な場合)、ReSharper はホットスポットセッションをエディターにデプロイし、最初のパラメーターに入力位置を設定します。次に、次の操作を実行できます。
    • ReSharper が現在のパラメーターの値を提案している場合は、UpDown の矢印キーを使用して推奨値のリストをナビゲートするか、目的の値を入力してください。

    • Tab または Enter を押して値を受け入れ、次のパラメーターの入力位置に移動します。これが最後のパラメーターである場合、ホットスポットセッションは完了し、キャレットはセッション用に定義された終了位置に移動します。

    • Shift+Tab を押すと、入力フォーカスが前のパラメーターの入力位置に移動します。

    • Esc を押してホットスポットセッションを終了します。この場合、すべてのセッションパラメーターはデフォルト値で初期化されます。

この機能は、次の言語とテクノロジーでサポートされています。

Language: C#Language: VB.NETLanguage: C++Language: HTMLLanguage: ASP.NETLanguage: RazorLanguage: JavaScriptLanguage: TypeScriptLanguage: CSSLanguage: XMLLanguage: XAMLLanguage: ResxLanguage: Build ScriptsLanguage: ProtobufLanguage: JSON
Feature is available in C#Feature is not available in Visual Basic .NETFeature is not available in C++Feature is not available in HTMLFeature is not available in ASP.NETFeature is not available in RazorFeature is not available in JavaScriptFeature is not available in TypeScriptFeature is not available in CSSFeature is not available in XMLFeature is not available in XAMLFeature is not available in Resource filesFeature is not available in build script filesFeature is not available in ProtobufFeature is not available in JSON
最終更新日 :

関連ページ:

ライブテンプレートを使用してソースコードを作成する

ReSharper | 編集 | ライブテンプレートの挿入…ライブテンプレートは Visual Studio のコードスニペットの ReSharper のはるかにインテリジェントなバージョンです。コードスニペットとは異なり、ReSharper のテンプレートはコンテキストからどの変数、フィール...

コードフラグメントをテンプレートで囲む

ReSharper | 編集 | テンプレートで囲む…中括弧または括弧でコードを囲むだけの場合は、コードブロックまたは式を選択し、開始 cまたは終了括弧を入力して選択を中括弧内に配置するか、開始または終了括弧を入力します。括弧内に選択を置きます。サラウンドテンプレートを使用して、式、単一のステ...

自動補完

ReSharper の自動補完は、クラス、メソッド、変数、キーワード、および以前にインポートされた拡張メソッドを含む現在の可視性スコープ内で使用可能なその他のシンボルの名前を提案します。補完リストでは、ライブテンプレート、コード生成の提案、ユニットテストのカテゴリなど、他の多くのコンテキスト固有の提...

設計時にコードの課題を検出する

ReSharper は、エディターでコードファイルを開くとすぐに分析を開始し、最後まで編集を続けます。検出されたすべてのコードの課題は、重大度に従ってエディターでハイライトされます。課題のマップは、エディターウィンドウの右側のマーカーバーにも表示されます。ここでは、ファイルのステータスを即座に確認し...

ソースコードの注釈

ReSharper のコード注釈の恩恵を受ける最も簡単な方法は、ソースコードのシンボルに注釈属性を追加し、ReSharper がソリューションをより正確かつ洞察力で分析できるようにすることです。デフォルトでは、すべての注釈属性クラスは属性でマークされているため、コンパイラはコード内の属性の使用を無視...

コード補完でのフィルターの使用

ReSharper を使用すると、シンボルの種類、アクセス修飾子などを使用して補完候補をフィルター処理できます。コード補完が呼び出されるたびに適用されたフィルターのセットを変更したり、フィルターの状態を保持することを選択したりできます。デフォルトでは、ReSharper は完了のポップアップの下部に...