ReSharper 2020.1ヘルプ

ソース・テンプレート

伝統的に、テンプレートやスニペットはあなたのソースコードの外で保存され管理されています。通常テンプレートを使用すると、普遍的な定型コードをすばやく作成できるため、これは理にかなっています。これらの目的のために、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$ } } }

To deploy this template, we now can use automatic completion for any collection object:

Source template in the completion list

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

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

Note that the //$ $END$ comment in the template definition is nothing else but the predefined template parameter defining the caret position after the template is applied. You can use other parameters in your template to make the template more flexible.

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

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

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

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

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

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

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

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

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

A source template must be a public extension method and have the [SourceTemplate] attribute. The attribute is defined in the JetBrains.Annotations namespace, together with [NotNull] , [CanBeNull] and other code annotation attributes. Therefore, to define source template methods, you should enable ReSharper code annotation support in your project.

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

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

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

パラメータとマクロ

In source templates, you can use parameters amd macros. Depending on the macro that you are going to use for the parameter, you can choose between several ways of specifying and using parameters.

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

    • The 'Expression' property of the attribute defines which macro should be used. You can specify one of the available template macros.

    • The 'Editable' property optionally specifies whether the user will be able to edit the parameter when the template is applied. By default, all user-defined parameters are editable; the value -1 makes the parameter non-editable.
      If the same parameter is used several times in the template, only one occurrence becomes editable when the template is applied; other occurrences are changed synchronously. If necessary, you can define which occurrence becomes editable by specifying its zero-based index in the 'Editable' property.

    [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$ } }
  • You can use predefined parameters as well as all user-defined parameters the same way as in other ReSharper templates, wrapping the parameter identifier with two '$' signs $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
最終更新日: 2020年5月29日

関連ページ:

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

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

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

コードを波括弧または丸括弧で囲むだけの場合は、コードブロックまたは式を選択し、開始または終了を入力して波括弧で囲むか、開始または終了を入力して選択範囲を丸括弧で囲みます。サラウンドテンプレートを使用して、式、単一のステートメント、または任意のコードブロックを,または他のコード構造ですばやく囲みます。...

テンプレートからファイルを作成する

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

自動補完

ReSharper's automatic completion suggests names of classes, methods, variables, keywords, and any other symbols that are available within the current

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

コードテンプレートの本体には、次のものが含まれます。ソースコードの構造とコメントを表すプレーンテキスト。テンプレートを適用するとそのまま挿入されます。Template parameters that are replaced dynamically when you apply the templa...

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

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