ReSharper 2025.1 ヘルプ

構造検索と置換

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

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 オプションのコードインスペクション | カスタムパターンページに移動するか、パターンで検索ダイアログでパターンカタログ ThemedIcon.PatternsCatalogue.Screen.(Gray).png をクリックします。

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

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

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

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

  • すべてのパターンは ReSharper のコードインスペクションエンジンで使用されるため、一致したコードブロックが自動的に検出されます。

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

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

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

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

Pattern catalog in ReSharper options

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

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

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

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

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

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

最初の 2 つの方法のいずれかで置換を実行すると、ソリューション内のすべての置換候補がパターンで置き換えるダイアログに表示されます。このダイアログでは、候補者を調査してグループ化できます。コンテキストで候補者を表示する場合は、ツールバーのプレビューの表示 ThemedIcon.PreviewToggle.Screen.(Gray).png をクリックします。候補のいずれかをダブルクリックして、含まれているファイルをエディターで開くこともできます。

表示された候補が置き換えたいものである場合は、ダイアログの下部にある置換をクリックします。

パターンを共有する

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

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

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

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

ここで説明する手順と例では、C# の機能の使用について説明します。他の言語の詳細については、言語およびフレームワークセクションの対応するトピックを参照してください。

関連ページ:

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

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

コードインスペクション

ReSharper は、サポートされているすべての言語で 2500 を超えるコードインスペクションを提供します。これらのインスペクションは、開いているすべてのファイルの設計時にコードの問題を検出してハイライトするために適用されます。また、特定の範囲内のすべてのコードの問題を検出するために適用されます。インスペクション ReSharper が提供するコードの種類を調べるには、異なる言語の ReSharper コードインスペクションの全リストをご覧ください。コードインスペクションは、以下のグループに分...

設計時にコードの問題を分析する

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

スコープを修正

クイックフィックスのほとんどは、キャレットの現在の問題を修正できますが、一部 (たとえば、未使用のディレクティブを削除する、フィールドを読み取り専用にする、冗長なキャストの除去など) は、現在のファイル、プロジェクト、フォルダー、ソリューション全体など、より広い範囲で問題を自動的に検出して修正することもできます。範囲内の修正を適用する:このような修正は、アクションリストの横に小さな矢印が表示されることで認識できます。範囲内の修正を適用する ReSharper のインスペクションでハイライトされて...

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

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

フォーマットルールを適用する

編集および貼り付けられたコードの自動フォーマット:エディターでコードを入力すると、セミコロンを入力するとすぐに ReSharper によって式が再フォーマットされ、閉じ括弧を入力するとすぐにコードブロックが再フォーマットされます必要に応じて、ReSharper オプション Alt+R, O のページでこれらの種類の自動フォーマットを無効にすることができます。ReSharper では、コードを貼り付けるときにフォーマットルールを自動的に適用することもできます。デフォルトでは、貼り付けられたコードは完...