ReSharper 2018.3ヘルプ

構造検索と置換

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

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

ReSharperでは、特定のパターンに一致するコードブロックを検索し、必要に応じて置き換えることができます。これらのブロックはかなり異なるかもしれません - 異なるタイプ、表現、文などを含むことができますが、論理的には似ています。例:すべての foreach ループに反復されるものと、ループ内のものとは無関係の一般的なパターンを作成するか、このパターンをより詳細にして、特定のタイプに対して反復するループのみを見つけることができます。パターンは、必要なだけ複雑になり、任意のレベルの詳細を持つことができます。

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

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

パターンは、通常、

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

  • Placeholders, which allow matching variable parts of the target code blocks. A placeholder has the following format: $placeholder_name$ - where placeholder_name is an arbitrary identifier.

各プレースホルダは一度定義しなければならず、パターン内で数回使用できます。プレースホルダを定義するときは、その種類とオプションの制約を定義する必要があります。プレースホルダには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オプションのコード・インスペクション | カスタム・パターンページのツールバーで検索をクリックします。

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

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

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

パターンの共有

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

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

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

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

Language: C#

Language: VB.NET

Language: C++

Language: HTML

Language: ASP.NET

Language: Razor

Language: JavaScript

Language: TypeScript

Language: CSS

Language: XML

Language: XAML

Language: Resx

Language: Build Scripts

Language: Protobuf

Language: JSON

Feature is available

Feature is available

Feature is not available

Feature is available

Feature is available

Feature is not available

Feature is available

Feature is not available

Feature is not available

Feature is not available

Feature is not available

Feature is not available

Feature is not available

Feature is not available

Feature is not available

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

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

関連事項

関連ページ:

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

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

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

ReSharperは、サポートされているすべての言語で2300を超えるコードインスペクションを提供します。これらのインスペクションは、開いているすべてのファイルで設計時にコードの問題を検出して強調表示したり、特定の範囲内ですべてのコードの問題を検出したりするために使用されます。エディターで強調表示さ...

設計時のコードの問題の検出

ReSharperは、コードファイルをエディターで開くとすぐに、それが閉じられるまで編集するまでずっと、コードファイルの分析を開始します。検出されたすべてのコードの問題は、重大度に従ってエディターで強調表示されます。問題のマップは、エディターウィンドウの右側のマーカーバーにも表示されます。ここでは、...

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

ReSharperを使用すると、設計時に検出されたほとんどのコード問題を即座に修復できます。強調表示されたコードの問題でAlt+Enterを押して、問題を解決したり最適以下のコードを改善したりするための適切な方法を選択するのと同じくらい簡単です。このトピックの内容:quick-fixesの適用Vis...

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

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

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

ReSharper_ReformatCodeコードスタイルの重要な側面は、コードをどのように整形するか、すなわち、空白と空白を使用してコードブロックを整理し分割する方法、インデント用のタブを使用するかどうか、使用方法、長い行を折り返すかどうかなどです。多数のReSharperコードフォーマットルール...