结构搜索和替换
传统的搜索过程不考虑源代码的语法和语义。即使您使用正则表达式,PhpStorm 仍然会将您的代码视为常规文本。结构搜索和替换( SSR ) 操作让您可以根据代码结构在代码中搜索特定的代码模式或语法结构。
PhpStorm 根据您创建的搜索模板和应用的条件查找和替换源代码片段。
从结构上搜索目标
从主菜单中,选择结构搜索”对话框。
以打开“在“结构搜索”对话框中,执行以下操作之一:
从头开始创建您自己的模板。
在编辑器区域中,输入代码模板(
$variable$
代表您的代码),单击,然后选择保存模板以保存以供将来使用。PhpStorm 将创建的模板添加到现有模板对话框中的现有模板列表(用户定义节点)中。
使用现有模板之一作为原型。
单击,选择现有模板以打开预定义模板列表,然后选择适当的模板。
考虑以下示例类:
类 ExampleClass { public function WRONG() { } public function right() { } }让我们在类中找到某个方法。
在现有模板列表中,选择类模板的所有公共方法 。
单击“确定”返回“结构搜索”对话框以使用所选模板。
PhpStorm 会立即在编辑器中突出显示找到的代码。
“结构搜索”对话框显示所选模板和模板中使用的过滤器的值。您可以编辑现有过滤器或添加新条件。将插入符号放在代码变量上,并使用过滤器区域来管理过滤器。
在过滤器区域中,单击以添加新条件。例如,如果您需要添加正则表达式,请选择Text。您还可以根据您的变量添加其他条件。
在打开的字段中,输入您的条件。
例如,让我们键入以下正则表达式:
\b[az]\w+\b在这种情况下,当您在“结构搜索”对话框中选择“匹配大小写”复选框时,PhpStorm 将仅搜索带有大写字符的字段。
另请注意,默认情况下,Recursive复选框处于选中状态。这意味着 PhpStorm 执行递归搜索,所有嵌套项都将包含在结果中。例如,当您搜索方法调用时,启用Recursive选项时,PhpStorm 将在
foo(foo(foo()))
. 禁用Recursive选项后,只会找到外部方法调用。指定以下选项以进一步缩小搜索范围:
文件类型- 使用列表选择哪些文件类型应该是搜索的一部分。在我们的例子中,它是PHP。
范围- 指定搜索位置:在项目、模块、目录或自定义范围内。
搜索目标- 您可以选择完全匹配来匹配确切的模板或其他可用的代码元素(在我们的例子中是
b
)。
单击查找。
PhpStorm 在查找工具窗口中显示结果。
您可以将新创建的搜索模板作为自定义模板添加到结构搜索检查中,并在以后使用它来检查您的代码。
在结构上替换目标
从主菜单中,选择
。如果您需要为替换模板中的变量添加过滤器,请在感兴趣的变量处放置一个插入符号,并使用过滤器区域来管理过滤器。
在过滤器区域中,根据您选择的过滤器,指定条件。
要缩小替换结果的范围,请选择以下选项:
缩短完全限定名称- 用短名称和导入替换完全限定的类名称。
重新格式化- 自动格式化替换的代码。
使用静态导入- 尽可能使用静态导入替换。
指定必要的选项后,单击查找。PhpStorm 在查找工具窗口中显示结果。
在“查找”工具窗口中,您可以进一步处理结果,一个一个替换找到的项目,或者一次替换所有项目,或者预览您的潜在更改。
考虑以下将标签中class
属性的大写值转换为小写的示例。p
在搜索模板字段中,我们创建了一个模板,用于搜索属性中具有大写值(和大小写匹配)的所有p
标签。我们将搜索范围缩小到这些值(Search target = b)。在替换模板字段中,我们创建一个新变量并为其分配一个 Groovy 脚本 ( )。搜索完毕后,我们选择Replace All进行替换。[A-Z].*
class
class
$d$
b.getText().toLowerCase()
共享搜索模板
您可以通过导出或导入搜索模板与您的同行共享。
在结构搜索对话框( )中,创建一个新的搜索模板或使用现有的。
要导出模板,请单击并选择将模板导出到剪贴板。PhpStorm 将模板的 XML 表示添加到剪贴板(按下Ctrl+Shift+V可查看剪贴板的内容)。您可以在聊天、电子邮件或论坛中与其他开发人员共享此表示。
Ctrl+C要导入模板,请从任何地方(电子邮件、聊天或论坛)复制 ( ) 共享 XML 代码,然后在“结构搜索”对话框中,单击并选择从剪贴板导入模板。PhpStorm 采用 XML 代码表示并将其转换为包含变量和范围(如果存在)的模板。