搜索模板
当您为结构搜索构建模板时,您基本上是在编写脚本。为了简化您的脚本编写过程,PhpStorm 为您提供了一个预定义搜索模板列表,您可以将其用作搜索模板的原型。
有关如何访问现有搜索和替换模板的列表,请参阅结构搜索和替换部分。
有效的搜索或替换模板代表以下支持的语言结构之一:
表达式,例如
"John" . " " . "Doe"
语句或语句序列,例如
$people[] = new Person('Trillian');
类指示符,例如
class Engine implements IEngine
行或块注释,例如
/** Created in PhpStorm */
.
在搜索模板中,可以使用以下简化:
方法体可以省略。
在模板和约束字段中使用短类名(而不是完全限定名)。
用作
class $Class$
模板也会导致查找匿名类。注释和文档注释的模板应包含具有正确注释和 PHPDoc/JSDoc 语法的变量和结构。
每个搜索或替换模板都包含变量$variable_name$
,您可以向这些变量添加条件(过滤器)以缩小搜索结果的范围。过滤器取决于搜索模板中的变量。
计数过滤器
计数过滤器指定出现次数。
例如,在class $a$ {public function $b$()}
搜索模板中,对于变量,请在“计数”过滤器字段$b$
中指定最小和最大数字。要设置无限制的最大计数,请在过滤器字段中提供一个空值。
PhpStorm 添加[0,∞]
到变量并搜索指定的数字范围。
参考过滤器
Reference过滤器允许您在变量中引用其他一些搜索模板。
参考将始终包含预配置或保存的模板的名称,您可以使用自动完成来填写此字段。
例如,您可以定义一个用于定位类的静态方法的搜索模板,然后在另一个模板中引用它以检测对此类静态方法的错误实例调用。
类型过滤器
类型过滤器添加指定变量所需的值或表达式的类型。
使用以下过滤器值来定位相应类型的变量:
string
int
要么integer
double
要么float
boolean
array
null
要定位特定类的实例,请提供其 FQN,包括前导\
作为类型过滤器值。
例如,对于$b$
变量,\ExampleClass
在类型过滤器字段中键入。
PhpStorm 搜索ExampleClass
实例化。
文本过滤器
文本过滤器根据正则表达式或纯文本检查变量。
例如,要检测显式魔术方法调用,请使用$a$->$b$()
模板并将变量的文本过滤器设置为正则表达式。$b$
^__.+$
脚本约束
脚本过滤器将Groovy 脚本约束添加到搜索模板。搜索某些语言结构时会使用脚本约束。
例如,具有指定数量参数的构造函数,或具有指定可见性修饰符的成员。
模板中使用的所有变量都可以从脚本约束中访问。当您向变量添加脚本约束时,PhpStorm 会将其与 PSI 树进行匹配,该变量实际上是PSI 树中的一个节点。
比方说,你有一个变量匹配一个方法,一个toString()
方法。那么这个变量实际上就是一个PsiMethod
节点。检索variable.parent
将产生一个PsiClass
节点,依此类推。variable.text
然后会给你方法的整个文本。如果只需要方法名,可以使用variable.name
.
在另一种情况下,结构搜索和替换变量可能会匹配某个表达式,例如,对变量的引用 a PsiReferenceExpression
。表达式当然没有名称,但是检索表达式的整个文本,将为您提供它所引用的变量的名称。
您可以检查以下现有模板中使用的脚本约束的语法:
带有常量参数的示例方法调用
班级
具有无参数构造函数的类
非最终的静态字段
未实现或未扩展的接口
字段/变量读取
具有给定名称模板的字段/变量已更新