PhpStorm 2024.3 ヘルプ

検索テンプレート、修飾子、スクリプトの制約

構造検索用のテンプレートを作成するときは、基本的にスクリプトを作成します。スクリプト作成プロセスを簡素化するために、PhpStorm は、検索テンプレートのプロトタイプとして使用できる事前定義された検索テンプレートのリストを提供します。

Existing search templates for PHP

既存の検索と置換テンプレートのリストにアクセスする方法については、構造的な検索と置換のセクションを参照してください。

有効な検索または置換テンプレートは、サポートされている次の言語構造の 1 つを表します。

  • 式、たとえば "John" . " " . "Doe"

  • ステートメント、または一連のステートメント、たとえば $people[] = new Person('Trillian');

  • クラス指定子、たとえば class Engine implements IEngine

  • コメントを行またはブロックします(例: /** Created in PhpStorm */)。

検索テンプレートでは、以下の簡略化を使用できます。

  • メソッド本文は省略できます。

  • テンプレートと制約フィールドでは、完全修飾名の代わりに短いクラス名が使用されます。

  • class $Class$ をテンプレートとして使用すると、匿名クラスも検索されます。

  • コメントおよびドキュメントコメントのテンプレートには、正しいコメントと PHPDoc/JSDoc 構文を持つ変数と構成要素を含める必要があります。

各検索または置換テンプレートは、条件 (修飾子) を追加して検索結果を絞り込むことができる変数 $variable_name$ で構成されます。修飾子は、検索テンプレートの変数に依存します。

A search template preview

カウント修飾子

カウント修飾子は、出現回数を指定します。

例: class $a$ {public function $b$()} 検索テンプレートで、$b$ 変数の場合、カウント修飾子フィールドに最小数と最大数を指定します。無制限の最大数を設定するには、修飾子フィールドに空の値を指定します。

Count modifier

PhpStorm は変数に [0, ∞ ] を追加し、指定された範囲の数値を検索します。

参照修飾子

リファレンス修飾子を使用すると、変数内の他の検索テンプレートを参照できます。

参照には常に事前設定または保存されたテンプレートの名前が含まれ、自動補完を使用してこのフィールドに入力できます。

例: クラスの静的メソッドを検索するための検索テンプレートを定義し、それを別のテンプレートで参照して、そのような静的メソッドへの誤ったインスタンス呼び出しを検出することができます。

Reference modifier

型修飾子

タイプ修飾子は、指定された変数に期待される値または式の型を追加します。

次の修飾子の値を使用して、対応する型の変数を見つけます。

  • string

  • int または integer

  • double または float

  • boolean

  • array

  • null

特定のクラスのインスタンスを見つけるには、先頭の \ を含む FQN をタイプ修飾子値として指定します。

例: $b$ 変数の場合、タイプ修飾子フィールドに \ExampleClass と入力します。

PhpStorm は ExampleClass インスタンス化を検索します。

Find tool window the results for class instantiations

テキストフィルター

テキスト修飾子は、正規表現またはプレーンテキストに対して変数をチェックします。

例: 明示的なマジックメソッド(英語)呼び出しを検出するには、$a$->$b$() テンプレートを使用し、$b$ 変数のテキスト修飾子を ^__.+$ 正規表現に設定します。

Text modifier

スクリプト制約

スクリプト修飾子は、Groovy スクリプト制約を検索テンプレートに追加します。スクリプト制約は、特定の言語構造を検索するときに使用されます。

例: 指定された数のパラメーターを持つコンストラクター、または指定された可視性修飾子を持つメンバー

テンプレートで使用されるすべての変数には、スクリプトの制約からアクセスできます。スクリプト制約を変数に追加すると、PhpStorm はそれを PSI ツリーと照合します。この変数は、実際には PSI ツリーのノードです(英語)

たとえば、メソッドにマッチする変数、toString() メソッドがあるとします。この変数は実際には PsiMethod ノードです。variable.parent を取得すると、PsiClass ノードなどが生成されます。variable.text はメソッドのテキスト全体を表示します。メソッドの名前だけが必要な場合は、variable.name を使用できます。

別のケースでは、構造検索と置換変数は、変数、PsiReferenceExpression への参照など、一部の式に一致することがあります。式には名前はありませんが、式のテキスト全体を検索すると、その変数が参照している変数の名前が表示されます。

次の既存のテンプレートで使用されているスクリプト制約の構文を確認できます。

  • 定数パラメーターを使用したサンプルメソッドの呼び出し

  • クラス

  • パラメーターのないコンストラクターを持つクラス

  • final ではない static フィールド

  • 未実装または未拡張のインターフェース

  • フィールド / 変数の読み込み

  • 名テンプレートが更新されたフィールド / 変数

関連ページ:

構造検索と置換

従来の検索プロセスでは、ソースコードの構文とセマンティクスが考慮されていません。正規表現を使用している場合でも、PhpStorm はコードを正規表現として扱います。構造検索および置換(SSR)アクションを使用すると、コード構造を考慮して、コード内の特定のコードパターンまたは文法構造を検索できます。PhpStorm は、作成した検索テンプレートと適用した条件に基づいて、ソースコードのフラグメントを見つけて置き換えます。ターゲットを構造的に検索するに移動して、構造検索ダイアログを開きます。構造検索ダ...

構造検索と置換の例

ご存知のように、通常の検索と構造検索の主な違いは、構造検索ではプログラミング言語の構造テンプレートを探していることです。構造検索の利点は、既存のテンプレートに基づいてパターンを作成し、コードの検索と置換にかかる時間を節約できることです。既存のテンプレートの広範なリストは、単純なパターンからより複雑なパターンまで、多くのユースケースをカバーしています。パターン内の各アイテムは、両側の $ 記号によって制限される変数で構成されます。メソッド呼び出し:メソッド呼び出しを検索するための最も簡単なテンプ...