IntellijJavascript多行结构搜索和替换

Intellij Javascript multiline structural search and replace

本文关键字:替换 搜索 结构 IntellijJavascript      更新时间:2024-03-19

在我们的项目中,许多角度单元测试包含以下语法:

inject(['dependency1', 'dependency2', function(_dependency1_, _dependency2_) {
    dependency1 = _dependency1_;
    dependency2 = _dependency2_;
}]);

在测试中,用字符串值列出依赖项的数组是过时的,因为这只在使用缩小时有用。因此,我们发布了一个编码约定,将此语法更改为:

inject(function(_dependency1_, _dependency2_) {
    dependency1 = _dependency1_;
    dependency2 = _dependency2_;
});

现在,当我遇到它们时,我已经在现有代码中替换了其中的几个,但我真的厌倦了手动操作。所以我试图在IntelliJ中使用结构搜索和替换来解决这个问题。这是我迄今为止的搜索模板:

inject([$injection$, function($argument$) {
    $statement$;
}]);

发生次数:

  • $injection$:1到无穷大
  • $argument$:1到无穷大
  • $语句$:1到无穷大

替换模板定义如下:

inject(function($argument$) {
    $statement$;
});

这对我在开头定义的示例不起作用,但是,它只对函数体中的单行语句进行正确匹配和替换,因此以下示例被正确替换:

inject(['dependency1', 'dependency2', function(_dependency1_, _dependency2_) {
    dependency1 = _dependency1_;
}]);

我是不是错过了什么?当我在Jetbrains网站上查看这个简单的if-else示例时,我觉得这应该有效。

我尝试删除$statement$变量后面的分号,这与多行不匹配,导致分号在替换后被删除。我还尝试过将正则表达式应用于$statement$变量,但这些都没有帮助。

((.*)=(.*);'n)+

不匹配,可能是因为在执行实际regex匹配之前,IntelliJ结构搜索已过滤掉分号。

(.*)=(.*)

匹配,但它替换为与不使用regex相同的行为。

由于一个错误,JavaScript中的多个语句与一个变量的匹配目前已中断。