ReSharper 2021.1 ヘルプ

構造検索と置換

ReSharper | 検索 | パターンで検索...
ReSharper_StructuralSearchSearch

場合によっては、正規表現に一致する特定のシンボルやテキストの出現を検索するなどの標準的な検索方法では、目的の結果が得られない場合があります。例: プロジェクトに固有のコードの匂いを見つけたり、リファクタリングする必要があるコードを見つける必要があるかもしれません。

ReSharper を使用すると、特定のパターンに一致するコードブロックを検索し、必要に応じて置き換えることができます。これらのブロックはまったく異なる場合があります。異なるタイプ、式、ステートメントなどを含むことができますが、論理的には似ています。例: すべての foreach ループに一致する一般的なパターンを作成できます。反復されるものとループ内にあるものに関係なく、特定のタイプを反復するループのみを見つけるためにこのパターンをより詳細にすることができます。パターンは必要に応じて複雑にすることができ、必要な詳細レベルを設定できます。

作成したすべてのパターンはパターンカタログに格納され、カスタム重大度レベルを持つカスタムコードインスペクションとして機能します。つまり、特定のパターンに一致するすべてのコードブロックは、ヒント、提案、警告、またはエラーとしてエディター内でハイライトできます。クイックフィックスもパターン用に用意されています - パターンの「置換」部分で定義されているように、一致したコードブロックを変換できます。

検索パターンのプレースホルダ

パターンは、通常

  • ターゲット言語で許可された識別子のみを含むテキスト部分。テキスト部分では、正確に一致させるべきものを定義します。空白、集計文字、改行は無視されることに注意してください。

  • プレースホルダー。ターゲットコードブロックの可変部分を一致させることができます。プレースホルダーの形式は次のとおりです。$placeholder_name$- placeholder_name は任意の識別子です。

各プレースホルダは一度定義しなければならず、パターン内で数回使用できます。プレースホルダを定義するときは、その種類とオプションの制約を定義する必要があります。プレースホルダには 5 種類あります。

  • 引数プレースホルダ — メソッド呼び出しの 1 つ以上の引数。必要に応じて、一致させる必要のある引数の最小数または最大数を指定できます。

  • 式プレースホルダ — 演算子とオペランドのシーケンス。オプションで、この式によって返されるタイプを指定できます。

  • 識別子プレースホルダ — 任意のシンボル識別子。さらに、シンボル名の照合に使用される正規表現を指定できます。

  • ステートメントプレースホルダ — セミコロンまたはステートメントのブロックで終わる 1 行のステートメント。必要に応じて、一致するステートメントの最小数または最大数を指定できます。

  • タイププレースホルダ — 値型または参照型。デフォルトでは、この種類のプレースホルダーはどのタイプにも一致しますが、特定のタイプを明示的に指定できます。

パターンの特定の部分に対して正しい種類のプレースホルダを選択することが非常に重要であることに注意してください。パターンが一致するコードブロックと一致しない場合は、間違って選択されたプレースホルダーの種類が問題になることがよくあります。

Placeholders in structural search and replace patterns

検索パターンを作成する

コードブロックを検索または置換するか、カスタムコードインスペクションを作成するには、検索パターンを作成する必要があります。既存のコードブロックをパターンのベースとして使用することも、新しいものを最初から作成することもできます。

  1. エディターで、パターンと一致するコードブロックを選択します。このステップはオプションですが、パターンをすばやく作成できます。

  2. メインメニューで、ReSharper | 検索 | パターンで検索... を選択するか、選択項目があればそれを右クリックし、コンテキストメニューでパターンで検索を選択します。パターンで検索ダイアログが開きます。

  3. 最初のステップで何らかのコードブロックが選択された場合、ReSharper はブロック内のすべてのシンボル名を検出してプレースホルダーに置き換えます。必要に応じて、コードを編集し、プレースホルダを追加および削除して目的のパターンにすることができます。

    • ReSharper は、パターンで使用されているすべてのプレースホルダが適切な定義をダイアログの右側に持つかどうかをチェックします。定義のないプレースホルダがある場合は、赤でハイライトされます。

    • 新しいプレースホルダーを追加するには、$<placeholder_name>$ と入力するだけで、その定義が自動的に追加されます。
      自動的に追加されるプレースホルダー定義の種類を常に確認してください。明確に種類を定義できない場合があるため、手動で修正したい場合があります。

    • プレースホルダの種類を変更したり、制約を指定するには、右のプレースホルダ定義を選択し、編集をクリックして、プレースホルダ定義を編集します。

    • パターン本体でプレースホルダの使用を削除すると、その定義は自動的に削除されます。

    • また、プレースホルダ定義を手動で追加および削除することもできます。これを行うには、プレースホルダ定義のリストの上にある対応するボタンをクリックします。

  4. 同様のコードブロックを一致させるかどうかに応じて、類似の構造に一致するチェックボックスをオンまたはオフにします。ReSharper は、以下の構成体を同様と見なします。
    • 波括弧で囲まれた単一行ステートメントと single-line ステートメント。

    • バイナリ式は、パターンと逆の順序で指定されます。

    • 式で指定された式と、オペランドの順序が異なる式。

    • オペランドが括弧で囲まれた式、およびオペランドが囲まれていない式。

    • 接尾辞と接頭辞のインクリメント演算子。

    • 異なるアクセス修飾子を持つメソッド

  5. ReSharper は、パターン本体で基本的なコード分析を実行します。エラーが見つからない場合は、一致するコードブロックを検索するか、一致するブロックを置き換える方法を定義するか、または保存をクリックしてパターンをパターンカタログに保存します。

置換パターンを指定する

検索パターンごとに置換パターンを追加すると、検索パターンに一致するコードブロックをすばやく置き換えることができます。

  1. 新しい検索パターンを作成するまたはパターンカタログからパターンを編集するために開きます。

  2. パターンで検索ダイアログで、右上隅の置換をクリックします。

  3. ダイアログの下部に表示されるパターンを置き換える領域で、パターンの置換部分を指定します。
    パターンで定義されたプレースホルダーを使用します。一致したコードブロックが置き換えられると、プレースホルダーによって一致した各コードは、置換パーツ内のこのプレースホルダーの位置に従ってコピーされます。

  4. 置換領域のチェックボックスを使用して、フォーマットルールを適用するか、置換されたコードブロックで完全修飾名を短い名前に置換するかを指定します。

  5. ReSharper は、パターンの置換部分で基本的なコード分析を実行します。エラーが見つからない場合は、一致するコードブロックを置き換えるか、パターンをパターンカタログに保存できます。

パターンカタログを管理する

作成したパターンを保存すると、ReSharper はそれをパターンカタログに配置します。カタログを見て既存のパターンを調べるには、ReSharper オプションのコードインスペクション | カスタムパターンページに移動するか、パターンで検索ダイアログでパターンカタログ Themed icon patterns catalogue screen gray をクリックします。

パターンカタログでは次のことができます。

  • パターンをプレビューするには、リストでパターンを選択します。ページの下部には、その本文とプレースホルダの定義が表示されます。

  • パターンを削除するには、リスト内でパターンを選択し、ページツールバーの除去をクリックします。

  • 新しいパターンを追加するには、ツールバーのパターンの追加をクリックします。ReSharper は、パターンで検索ダイアログを開き、パターンの詳細を指定できます

  • ReSharper のコードインスペクションエンジンではすべてのパターンが使用されるため、一致したコードブロックが自動的に検出されます。
    デフォルトでは、すべての新しいパターンの重大度レベルセレクターに「表示しない」があります。つまり、特定のスコープでインスペクションを実行している場合、一致したコードブロックはエディターでハイライトされず、検出もされません。コードインスペクションの検索パターンに一致するコードを検出する場合は、パターンに適切な重大度レベルを選択します。

  • 既存のパターンを編集するには、それをダブルクリックするか、選択して、ウィンドウツールバーの編集をクリックします。

    パターンが編集用に開いている場合、その検索の説明を指定してパーツを交換できます。検索の説明は、カタログ内のパターンを表示するため、およびエディターでハイライトされた一致したブロックの説明として使用されます。置換の説明は、クイックフィックスの名前として表示されます。これは、ハイライトされたブロックの候補です。詳細については、カスタムコードインスペクションとクイックフィックスを作成するを参照してください。

    パターンの「抑制キー」を指定できます。これは、コメントを使用して、パターンの使用を検出する ReSharper インスペクションを抑制するために使用できる識別子です。

Pattern catalog in ReSharper options

コードを見つけてパターンで置き換える

コードを検索してパターンに置き換えるには、次の 3 つの方法があります。

  • パターンで検索コマンドを呼び出して新しいパターンを作成した直後に、コードを検索または置換できます。この場合、パターンで検索ダイアログの右下隅にある検索 / 置換ボタンをクリックするだけです。

  • あなたのパターンカタログからパターンの 1 つを使うことができます。これを行うには、ReSharper オプションのコードインスペクション | カスタムパターンページのツールバーで検索をクリックします。

  • パターンに一致するコードブロックはエディターでハイライトできます。パターンに置換ロジックが指定されている場合は、コードブロックをクイックフィックスに置き換えることができます。必要なのはパターンのために ' 表示しない ' 以外のある重大度レベルを指定することです。ReSharper オプションのコードインスペクション | カスタムパターンページの各パターンの右側にある対応するセレクターを使用してください。詳しくは、カスタムコードインスペクションとクイックフィックスを作成するを参照してください。

最初の 2 つの方法のいずれかを検索すると、ソリューション内のすべての一致するコードブロックが検索結果ウィンドウに一覧表示されます。結果に探しているものが含まれていない場合は、パターンをすばやく変更して検索プロセスを再度呼び出すことができます。これを行うには、ウィンドウツールバーの検索パターンの変更 Themed icon edit screen gray をクリックします。

最初の 2 つの方法のいずれかで置換を実行すると、ソリューションのすべての置換候補がパターンで置き換えるダイアログに表示されます。このダイアログでは、候補を調べてグループ化できます。コンテキストで候補を表示するには、ツールバーのプレビューの表示 Themed icon preview toggle screen gray をクリックします。候補のいずれかをダブルクリックして、含まれているファイルをエディターで開くこともできます。
表示された候補が置き換えたいものである場合は、ダイアログの下部にある置換をクリックします。

パターンを共有する

検索と置換のパターンは共有設定レイヤーに保存でき、すべてのチームが利用できるようになります。

ReSharper オプションのコードインスペクション | カスタムパターンページでパターンを作成する場合は、次へ保存をクリックし、パターンが準備できたら共有設定レイヤーを選択します。

まだ共有されていない既存のパターンを共有するには、編集用に開き、ハイライトパターンの編集ダイアログでコピーを保存をクリックします。次に、次へ保存をクリックし、共有設定レイヤーを選択します。

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

C# の機能の使用方法については、こちらの説明と例を参照してください。他言語の詳細については、言語による ReSharper の対応するトピックを参照してください。

関連ページ:

カスタムコードインスペクションとクイックフィックスを作成する | ReSharper

コードに問題または悪い習慣があるが、ReSharper がそれを検出しない場合は、カスタムコードインスペクションを作成することができます。さらに、問題のあるコードを置き換えるコード、つまりカスタムクイックフィックスを指定することができます。カスタムインスペクションが正しく作成されていれば、コードベースのすべての同様の問題を見つけ出し、問題のあるコードをエディターでハイライトすることができます。カスタムインスペクションを作成するには、構造検索と置換メカニズムを利用できます。カスタムインスペクション...

コードインスペクション | ReSharper

ReSharper は、サポートされているすべての言語で 2500 を超えるコードインスペクションを提供します。これらのインスペクションは、開いているすべてのファイルの設計時にコードの問題を検出してハイライトしたり、ソリューション全体と同じくらい大きい特定のスコープ内のすべてのコードの問題を見つけたりするために使用されます。インスペクション ReSharper が提供するコードの種類を調べるには、異なる言語の ReSharper コードインスペクションの全リストをご覧ください。コードインスペクショ...

設計時にコードの問題を検出する | ReSharper

ReSharper は、エディターでコードファイルを開くとすぐに分析を開始し、最後まで編集を続けます。検出されたすべてのコードの問題は、重大度に従ってエディターでハイライトされます。問題のマップは、エディターウィンドウの右側のマーカーバーにも表示されます。ここでは、ファイルのステータスを即座に確認し、マークをクリックして特定のコードの問題に移動できます。デザインタイムインスペクションの機能:ReSharper によって実行されるデザインタイムコードインスペクションを説明するために、エディターに...

ハイライトパターンによる追加 / 編集 / 検索ダイアログ | ReSharper

このダイアログは、特定のパターンに一致するコードを検出するカスタムパターンを作成または編集し、必要に応じてこのコードを置き換えるのに役立ちます。このトピックでは、ダイアログ内のコントロールについて説明します。コードを検索してカスタムパターンで置き換える方法については、構造検索と置換およびカスタムコードインスペクションとクイックフィックスを作成するを参照してください。このダイアログは 2 つのモードで開くことができます。エディターのコンテキストメニューに複製されているコマンドを使用すると、ダイアロ...

コードフォーマットルールの管理と適用 | ReSharper

コードスタイルの重要な点は、コードのフォーマット方法、つまり、空白と空白行を使用してコードブロックを配置および分離する方法、インデントにタブを使用するかどうか、および使用する方法。ReSharper コードフォーマットルールの広範なセットには、デフォルトの Visual Studio フォーマットオプションと多数のベストプラクティスを考慮したデフォルト構成があります。フォーマットルールのすべての詳細を構成し、コードにルールを適用できます。これらのルールは、ReSharper がコード補完およびコ...

特定の範囲でコードの問題を見つける | ReSharper

設計時コードインスペクションは、エディターでコーディングしたり、特定のファイルを見直したりするときに役立ちます。ただし、ReSharper を使用すると、ソリューション全体または狭い範囲でスタティックコード分析を実行し、結果をフレンドリーな視点で調べることもできます。必要に応じてインスペクション結果を共有することもできます。開始コードインスペクション:ソリューション、プロジェクト、またはカスタムスコープのコードをインスペクションするソリューションワイドのインスペクションの結果(たとえば、未使用...