教程:Kotlin 中的结构搜索和替换
最后修改时间:2023年9月7日结构搜索和替换是一个强大的工具,可以搜索代码中的特定模式并以自动方式替换它。
在本教程中,我们将熟悉模板和过滤器,修改预定义模板,然后基于它创建代码检查。
本教程中介绍的功能界面是结构搜索和替换功能的戏剧列表。我们的目标是帮助您入门。之后,您可以探索各种模板、过滤器和选项,把它们组合起来创建您自己的特定搜索。
对于本教程,我们将使用以下代码:
class Point 构造函数(locationX: Int, locationY: Int) { var x: Int = locationX var y: Int = locationY } open class OpenClass { open var openProperty = 0 open fun display() { println("一些文本") print (“更多文本”) print(0) } }
打开“按结构搜索”对话框
转到编辑|查找|结构性搜索。
使用现有模板(属性声明)
在“结构搜索”对话框中选择,从门户列表中Kotlin 。
展开基于类的节点并单类的所有变量。
确保选择Kotlin作为Language。这使得搜索仅适用于 Kotlin 文件。
单击“查找”运行搜索。结果,在“查找”工具窗口中,IntelliJ IDEA 显示了 Kotlin 类中语句的所有属性。
重新运行
在“结构搜索”对话框中,展开“最近”节点以浏览最近搜索的历史记录并快速重新运行其中的任何搜索。
现在,让我们返回结构搜索对话框来稍微更改一下预定义的模板。
更改预定义模板
在“结构搜索”
open
对话框中,让我们更新模板,通过在变量之前添加仅搜索开放属性$Field$
。提示
如果我们更改范围,IntelliJ IDEA 将立即通知您是否可以在指定范围内找到该 Code Pattern。
单击“查找”并在“查找”工具窗口中检查结果。
您所看到的,这次搜索使用了过滤器,并且现在仅显示打开的属性。
通过结构搜索,我们可以运行一些有趣的搜索。让我们选择另一个现有模板(方法调用)作为示例。假设我们正在进行此搜索,以将所有print
语句替换为日志记录调用,并排除所有没有 aString
作为参数的调用。
替换函数调用
转到编辑 | 查找| 结构上替换。
Kotlin下| 表达式节点,选择方法调用。
如果我们现在运行搜索,我们最终会得到包含代码中所有函数调用的结果。因此,我们应该稍微改变我们的模板并使用过滤器来更具体地了解我们正在寻找的内容。
将插入符号放在
$MethodCall$
右侧窗格中,然后单击添加修饰符。添加值为 的文本print.*
过滤器。提示
如果不使用
print
通配符,则只能找到对名为 的函数的调用print
。正则表达式将确保结果包含print
对其名称中包含的所有函数的调用,例如println
.将插入符号放在
$Before$
右侧窗格中,并确保唯一的修饰符是Count=[0,1]
。将插入符号放在
$Parameter$
右侧窗格中,然后单击。添加值为 的类型String
过滤器。在替换模板区域,添加替换代码:
java.util.logging.Logger.getLogger(this.javaClass.getName()).fine($Parameter$)
检查“查找”工具窗口中的结果,然后使用替换选项选择要替换的结果。
如果需要,我们可以保存此模板以供以后使用。
保存模板
在“结构替换”对话框中,单击。
在打开的列表中,选择保存当前模板。
指定模板的名称并单击“确定”。
该模板保存在“已保存模板”节点下。
我们还可以使用我们的模板作为检查,因此当我们遇到相同的代码时,我们会看到警告并可以快速替换代码。
创建自定义检查
在查找工具窗口中,您可以在其中获取替换模式的结果,单击从模板创建检查。
在打开的对话框中,添加检查的名称。(可选)添加工具提示(将鼠标悬停在突出显示的代码上时提供问题的更详细描述)。单击“确定”。
新创建的检查出现在“设置”| “结构搜索”节点下。编辑| 检查。
提示
要快速运行检查,请选择代码|分析代码|按名称运行检查...。从主菜单或按)并输入检查名称。CtrlAltShift0I
感谢您的反馈意见!