ReSharper 2020.2 ヘルプ

構造検索と置換

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

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

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

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

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

パターンは、通常

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

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

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

  • 引数プレースホルダ — メソッド呼び出しの 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 オプションのコードインスペクション | カスタムパターンページでパターンを作成する場合は、次へ保存をクリックし、パターンが準備できたら共有設定レイヤーを選択します。

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

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

Language: C#Language: VB.NETLanguage: C++Language: HTMLLanguage: ASP.NETLanguage: RazorLanguage: JavaScriptLanguage: TypeScriptLanguage: CSSLanguage: XMLLanguage: XAMLLanguage: ResxLanguage: Build ScriptsLanguage: ProtobufLanguage: JSON
Feature is available in C#Feature is available in Visual Basic .NETFeature is not available in C++Feature is available in HTMLFeature is available in ASP.NETFeature is not available in RazorFeature is available in JavaScriptFeature is not available in TypeScriptFeature is not available in CSSFeature is not available in XMLFeature is not available in XAMLFeature is not available in Resource filesFeature is not available in build script filesFeature is not available in ProtobufFeature is not available in JSON

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

最終更新日 :

関連ページ:

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

コードに課題または悪い習慣があるが、ReSharper がそれを検出しない場合は、カスタムコードインスペクションを作成することができます。さらに、課題のあるコードを置き換えるコード、つまりカスタムクイックフィックスを指定することができます。カスタムインスペクションが正しく作成されていれば、コードベー...

コードインスペクション

ReSharper はサポートされているすべての言語で 2500 以上のインスペクションを提供します。これらのインスペクションは、開いているすべてのファイルで設計時にコードの課題を検出して強調表示するため、および / または特定の範囲内ですべてのコードの課題を見つけるために使用されます。インスペクシ...

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

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

コードの課題のクイックフィックス

ReSharper を使用すると、設計時に検出されたほとんどのコード課題を即座に修復できます。強調表示されたコードの課題で を押して、課題を解決したり最適以下のコードを改善したりするための適切な方法を選択するのと同じくらい簡単です。クイックフィックスを適用する :クイックフィックスは、ハイライ...

強調表示パターンの追加/編集/検索ダイアログ

ReSharper | オプション | コード・インスペクション | カスタム・パターン | パターンの追加/編集ReSharper | 検索 | パターンで検索このダイアログは、特定のパターンに一致するコードを検出するカスタムパターンを作成または編集し、必要に応じてこのコードを置き換えるのに役立ち...

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

ReSharper | 編集 | コードの再フォーマットコードスタイルの重要な点は、コードの書式設定方法、つまり、空白と空白行を使用してコードブロックを配置および分離する方法、インデントにタブを使用するかどうか、および使用する方法。ReSharper コードのフォーマットルールの豊富なセットに...