ソース・テンプレート
伝統的に、テンプレートやスニペットはあなたのソースコードの外で保存され管理されています。通常テンプレートを使用すると、普遍的な定型コードをすばやく作成できるため、これは理にかなっています。これらの目的のために、ReSharperは多くの定義済みライブテンプレート、サラウンドテンプレート、ファイルテンプレートを提供しています。これらの種類の独自のテンプレートを作成することもできます。
ただし、現在のプロジェクトまたはソリューションにのみ関連する繰り返し可能なコードを生成したい場合があります。ReSharperでは、ソース・テンプレートを使用してそのようなタスクを合理化することができます。
使い方
従来のテンプレートとは対照的に、ソーステンプレートはプロジェクトのコードのどこにでも拡張メソッド(英語)として作成できます。プロジェクトの特定のタイプまたは標準タイプに定義できます。 object
の拡張メソッドとして作成することにより、ソーステンプレートをすべてのタイプで使用可能にすることもできます。
テンプレートが定義されるとすぐに、対応する型のオブジェクトとその継承のためにコード補完リストで利用可能になります。リストからテンプレートを選択すると、ReSharperはテンプレートメソッドの本体から自分のコードにコードを挿入します。
以下に、ソーステンプレートの最も単純なアプリケーションを示す例を示します。テンプレート forEach
は、すべてのジェネリックコレクションで使用できます。これは、パラメータ this IEnumerable<T> x
で定義されます。メソッド本体で指定されているように、コレクションを反復するコードを挿入します。プロジェクトの任意の静的クラスでテンプレートを定義できます。ReSharperは、[SourceTemplate]
属性によってテンプレートとして識別します。
このテンプレートをデプロイするには、すべてのコレクションオブジェクトに対して自動補完を使用できるようになりました。

テンプレート項目を選択すると、オブジェクトはテンプレートテキストに置き換えられます。
テンプレート定義の //$ $END$
コメントは、テンプレートが適用された後のキャレット位置を定義する事前定義されたテンプレートパラメーターに他ならないことに注意してください。テンプレート内の他のパラメーターを使用して、テンプレートの柔軟性を高めることができます。
ソーステンプレートを使用する理由
上記のように、ソーステンプレートは、現在のプロジェクトまたはソリューションで再利用するコードブロックに最も役立ちます。従来のテンプレートに比べて、ソーステンプレートの利点を示すいくつかの点があります。
ソーステンプレートを作成する
ソーステンプレートの定義については、新しいクラスを作成するか、拡張メソッドを保持する既存の静的クラスを使用できます。
テンプレートメソッドとその本体
ソーステンプレートはパブリック拡張メソッドであり、[SourceTemplate]
属性を持っている必要があります。属性は、[NotNull]
, [CanBeNull]
およびその他のコード注釈属性とともに、JetBrains.Annotations
名前空間で定義されます。ソーステンプレートメソッドを定義するには、プロジェクトでReSharperコード注釈サポートを有効にする必要があります。
テンプレート本体では、好きなことをするコードを書くことができます。通常は、呼び出し元オブジェクトで何かを行いますが、必ずしもそうする必要はありません。
また、テンプレートメソッドでコンパイルされないコードを使用する必要があります。ex:ローカル変数の名前を生成するために呼び出し側オブジェクト名を使用することができます。この場合、このコードを '$'記号で始まる行またはブロックコメントの中に配置します。
パラメータとマクロ
ソーステンプレートでは、パラメータ amd マクロを使用でき ます。パラメータに使用するマクロに応じて、パラメータを指定および使用するいくつかの方法を選択できます。
テンプレートメソッドに新しいパラメーターを追加して、テンプレートパラメーターを作成できます。デフォルトでは、編集可能なパラメーターとして動作します。つまり、テンプレートを適用すると、ホットスポットセッションの間にフォーカスを受け取ります。このパラメーターにマクロを定義する場合は、以下の例に示すように、
[Macro]
属性を追加する必要があります。属性の 'Expression'プロパティーは、使用するマクロを定義します。使用可能なテンプレートマクロの 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$"); }メソッドパラメータとローカル変数として作成された呼び出し元オブジェクトとテンプレートパラメータは、特別なテンプレートのコメントの中に '$'記号がある場合とない場合の両方で使用できます。
ソーステンプレートを適用する
ソーステンプレートを適用するには、まずテンプレートが有効範囲内にあることを確認します。つまり、同じ名前空間に入っているか、テンプレートの名前空間が明示的にインポートされています。あなたのコードに追加します。
ソーステンプレートからコードフラグメントを作成するには
テンプレートを配置する場所のキャレットを設定します。
テンプレートをデプロイするオブジェクトを入力し、ドットを入力して、テンプレートの名前またはそのキャメルハンプ省略形の入力を開始します。
補完リストでテンプレートを選択してクリックするか、Enterを押します。
呼び出し元オブジェクト、ドット、および入力したテンプレート名の一部は、テンプレート本体に置き換えられます。
- テンプレートに編集可能なパラメーターがある (つまり、ユーザー入力が必要)場合、ReSharperはエディターにホットスポットセッションをデプロイし、入力位置を最初のパラメーターに設定します。その後、次のことができます。
ReSharperが現在のパラメータの値を提案している場合は、Up と Down の矢印キーを使用して推奨値のリストをナビゲートするか、目的の値を入力してください。
Tab または Enter を押して値を受け入れ、次のパラメータの入力位置に移動します。これが最後のパラメータである場合、ホットスポットセッションは完了し、キャレットはセッション用に定義された終了位置に移動します。
Shift+Tab を押すと、入力フォーカスが前のパラメータの入力位置に移動します。
Esc を押してホットスポットセッションを終了します。この場合、すべてのセッションパラメータはデフォルト値で初期化されます。
この機能は、次の言語とテクノロジでサポートされています。
関連ページ:

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

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

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

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

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

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