構造検索と置換
従来の検索プロセスでは、ソースコードの構文とセマンティクスが考慮されていません。正規表現を使用している場合でも、PhpStorm はコードを正規表現として扱います。構造検索および置換(SSR)アクションを使用すると、コード構造を考慮して、コード内の特定のコードパターンまたは文法構造を検索できます。
PhpStorm は、作成した検索テンプレートと適用した条件に基づいて、ソースコードのフラグメントを見つけて置き換えます。
ターゲットを構造的に検索する
構造検索ダイアログを開きます。
に移動して、構造検索ダイアログで、次のいずれかの操作を行います。
最初から自分のテンプレートを作成します。
テンプレートのリストから下書きテンプレートを選択します。
エディター領域で、コードテンプレート(コードを表す
$variable$
)を入力し、ダイアログのツールバーで をクリックして、後で使用できるように保存します。テンプレートをインスペクションとして保存することもできます。PhpStorm は、作成されたテンプレートを既存のテンプレートリスト(最近ノード)に追加します。
プロトタイプとして機能するために既存のテンプレートの 1 つを使う。
使用可能な既存のテンプレートのリストで、必要なテンプレートを選択します。
次のクラス例を参照してください。
class ExampleClass { public function WRONG() { } public function right() { } }クラス内で特定のメソッドを見つけましょう。
既存のテンプレートの一覧で、クラスのすべての public メソッドテンプレートを選択します。
の検索をクリックします。
PhpStorm はエディターで見つかったコードの出現箇所を即座にハイライトします。
構造検索ダイアログには、選択したテンプレートと、テンプレートで使用されているフィルターの値が表示されます。既存のフィルターを編集したり、新しい条件を追加したりできます。キャレットをコード変数に配置し、フィルター領域を使用してフィルターを管理します。
例として、
$b$
変数の条件を追加しましょう。フィルター領域で、 をクリックして新しい条件を追加します。たとえば、正規表現を追加する必要がある場合は、テキストを選択します。変数に応じて、他の条件を追加することもできます。
開いているフィールドに条件を入力します。
例: 次の正規表現を入力してみましょう:
\b[a-z]\w+\bこの場合、構造検索ダイアログで大 / 小文字を区別するチェックボックスを選択すると、PhpStorm は大文字のフィールドのみを検索します。
また、選択した言語に応じて、さまざまな追加オプションを利用できることにも注意してください。
例: 次のオプションを確認してください。
言語 : リストを使用して、検索の一部にするファイルタイプを選択します。私たちの場合、PHP です。
ターゲット : オプションのリストで、検索する項目を選択します。この場合は
b
です。再帰 : このチェックボックスが選択されている場合、PhpStorm は再帰検索を実行し、ネストされたすべてのアイテムが結果に含まれます。例: 再帰オプションを有効にしてメソッド呼び出しを検索すると、PhpStorm は
foo(foo(foo()))
でネストされたメソッド呼び出しを検索します。再帰オプションを無効にすると、外部メソッド呼び出しのみが検出されます。挿入されたコード : このチェックボックスを選択すると、HTML コードに挿入された JavaScript や Java に挿入された SQL などの挿入されたコードが検索プロセスの一部になります。
大 / 小文字を区別する : このチェックボックスを選択すると、検索結果は検索対象の場合と一致します。
検索する場所を指定します: プロジェクト、モジュール、ディレクトリ、カスタムスコープ内。
検索をクリックします。
PhpStorm は結果を検索ツールウィンドウに表示します。
検索ツールウィンドウでテンプレートからインスペクションを作成をクリックし、後でそれを使用してコードをインスペクションすることにより、新しく作成した検索テンプレートをカスタムテンプレートとして構造検索インスペクションに追加できます。
ターゲットを構造的に置き換える
メインメニューで、
に移動します。構造置換ダイアログで、新規または既存のテンプレートを検索に追加し、テンプレート領域を置き換えます。置換テンプレートは、検索テンプレートと同じ方法で保存できます。
置換テンプレート内の変数にフィルターを追加する必要がある場合は、対象の変数にキャレットを置き、フィルター領域を使用してフィルターを管理します。
フィルター領域では、あなたのように選択した内容に応じて、フィルター条件を指定してください。
置換結果を絞り込むには、次のオプションを選択します。
完全修飾名を短縮する - 完全修飾クラス名を短縮名およびインポートに置き換えます。
再フォーマット - 置き換えられたコードを自動的にフォーマットします。
静的インポートを使用する - 可能であれば、静的インポートを代わりに使用します。
必要なオプションを指定したら、検索をクリックします。PhpStorm は検索ツールウィンドウに結果を表示します。
検索ツールウィンドウでは、結果をさらに操作して、見つかったアイテムを 1 つずつ、または一度にすべて置き換えたり、潜在的な変更をプレビューしたりできます。
p
タグの class
属性の大文字の値を小文字に変換する次の例を検討してください。検索テンプレートフィールドでは、class
属性に大文字の値([A-Z].*
および大 / 小文字を区別する)を持つすべての p
タグを検索するテンプレートを作成します。これらの検索のみを class
値(検索対象 = b)に絞り込みます。置換テンプレートフィールドで、新しい変数 $d$
を作成し、それに Groovy スクリプトを割り当てます(b.getText().toLowerCase()
)。検索後、すべて置換を選択して置換を実行します。
検索テンプレートを共有する
エクスポートまたはインポートすることで、検索テンプレートを同僚と共有できます。
構造検索ダイアログ( )で、新しい検索テンプレートを作成するか、既存のテンプレートを使用します。
テンプレートをエクスポートするには、 をクリックします。PhpStorm は、テンプレートの XML 表現をクリップボードに追加します(クリップボードの内容を表示するには、Ctrl+Shift+V を押します)。この表現は、チャット、メール、フォーラムで他の開発者と共有できます。
テンプレートをインポートするには、共有 XML コードを任意の場所(メール、チャット、フォーラム)からコピー(Ctrl+C)し、構造検索ダイアログで をクリックします。PhpStorm は、XML コード表現を取得し、変数とスコープが存在する場合はそれを含むテンプレートに変換します。
関連ページ:
検索テンプレート、修飾子、スクリプトの制約
構造検索用のテンプレートを作成するときは、基本的にスクリプトを作成します。スクリプト作成プロセスを簡素化するために、PhpStorm は、検索テンプレートのプロトタイプとして使用できる事前定義された検索テンプレートのリストを提供します。既存の検索と置換テンプレートのリストにアクセスする方法については、構造的な検索と置換のセクションを参照してください。有効な検索または置換テンプレートは、サポートされている次の言語構造の 1 つを表します。式、たとえば、ステートメント、または一連のステートメント、た...
カスタムインスペクションを作成する
カスタムインスペクションを作成するには、検索を構成してテンプレートを置き換える必要があります。IDE はテンプレートに一致するコードを検索し、それをエディターでハイライトします。設定ダイアログで、に移動します。を押してインスペクションの構成を選択することもできます。新しいインスペクションを作成するプロファイルを選択します。ツールバーでカスタムインスペクションの追加ボタン () をクリックし、インスペクションでコードのみをハイライトする場合は構造検索インスペクションの追加…を選択します。または、イ...
チュートリアル: 実装およびオーバーライドされた PHP メソッドの使用箇所を見つける
PHP の文脈では、PhpStorm は、実装されオーバーライドされたメソッドに使用箇所の検索機能を適用します。次の例を考えてみましょう: 次のように編成された、インターフェース、それを実装する抽象クラス、抽象クラスを拡張する 2 つのクラスを作成します。メソッドとのインターフェース、を実装している抽象クラス、を拡張し、インターフェースに必要なを実装し、親クラスのメソッドをオーバーライドするクラス、を拡張し、デリゲートを使用してを実装するクラス、とからそれぞれを呼び出すと変数:、<?php...