ReSharper 2019.2ヘルプ

ソース・テンプレート

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

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

使い方

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

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

ここでは、ソーステンプレートの最も単純なアプリケーションを示す例を示します。私たちのテンプレート forEachは、すべてのジェネリックコレクションで利用できるようになり、コレクションを反復するコードが挿入されます。プロジェクトの静的クラスでテンプレートを定義できます。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 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] 属性を追加する必要があります。

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

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

    [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 availableFeature is not availableFeature is not availableFeature is not availableFeature is not availableFeature is not availableFeature is not availableFeature is not availableFeature is not availableFeature is not availableFeature is not availableFeature is not availableFeature is not availableFeature is not availableFeature is not available
最終更新日: 2019年8月20日

関連ページ:

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

ライブテンプレートはVisual StudioのコードスニペットのReSharperのはるかにインテリジェントなバージョンです。コードスニペットとは異なり、ReSharperのテンプレートはコンテキストからどの変数、フィールド、タイプが使用できるかを予測できます。ほとんどの場合、自分で何か入力する必...

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

コードを中括弧または括弧のみで囲む場合は、コードブロックまたは式を選択してから、openingcまたは終了中括弧を入力して選択を中括弧内に配置するか、開始または終了括弧を入力します選択範囲を括弧で囲みます。サラウンドテンプレートを使用して、式、単一のステートメント、または任意のコードブロックを,また...

テンプレートからのファイルの作成

ReSharperを使用すると、ファイルテンプレートに基づいてクラス、インターフェース、構造体、およびその他のファイルを作成できます。作成されると、新しいファイルがプロジェクトに追加され、エディターで開きます。このファイルには、テンプレートで指定されたソースコードが含まれています。ファイルテンプレー...

自動補完

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

テンプレート・パラメーター

コードテンプレートの本体には、次のものが含まれます。ソースコードの構造とコメントを表すプレーンテキスト。テンプレートを適用するとそのまま挿入されます。テンプレートを適用すると動的に置き換えられるテンプレートパラメータ。テンプレートパラメータの形式は次のとおりです。-は任意の識別子です。フォーマットが...

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

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