ReSharper 2019.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 をクリックします。

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

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

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

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

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

  • 既存のパターンを編集するには、それをダブルクリックするか選択してウィンドウツールバーの編集をクリックします。
    パターンが編集用に開いているときは、検索の説明を指定したり、パーツを置き換えたりできます。検索の説明は、カタログにパターンを表示したり、エディターで強調表示された一致ブロックの説明として使用されます。置き換えの説明は、クイックフィックスの名前として表示されます。これは、強調表示されているブロックに適しています。詳しくは、カスタムコードインスペクションとクイックフィックスの作成を参照してください。パターンの「抑制キー」(コメント付きでパターンの使用を検出するReSharper インスペクションを抑制するために使用できる識別子)を指定できます。

Pattern catalog in ReSharper options

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

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

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

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

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

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

最初の2つの方法のうちの1つを置換すると、ソリューション内のすべての置換候補がパターンで置き換えるダイアログに表示されます。このダイアログでは、候補を検討してグループ化することができます。コンテキスト内で候補を表示する場合は、ツールバーのプレビューの表示 ThemedIcon PreviewToggle Screen Gray をクリックします。候補のいずれかをダブルクリックして、ファイルを開くエディターで開くこともできます。
表示された候補が置き換えたいものであれば、ダイアログの下部にある置換をクリックします。

パターンの共有

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

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

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

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

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 availableFeature is not availableFeature is availableFeature is availableFeature is not availableFeature 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 available

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

最終更新日: 2019年10月15日

関連ページ:

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

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

コード・インスペクション

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

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

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

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

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

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

このダイアログは、特定のパターンに一致するコードを検出するカスタムパターンを作成または編集し、必要に応じてこのコードを置き換えるのに役立ちます。このトピックでは、ダイアログ内のコントロールについて説明します。コードを検索してカスタムパターンで置き換える方法については、構造検索と置換およびカスタムコー...

コードの書式設定ルールの管理と適用

コードスタイルの重要な点は、コードの書式設定方法、つまり、空白と空白行を使用してコードブロックを配置および分離する方法、インデントにタブを使用するかどうか、および使用する方法。多数のReSharperコードフォーマットルールには、デフォルトのVisual Studioフォーマットオプションと多数のベ...