Intellij Javascript 多行结构搜索和替换

Intellij Javascript multiline structural search and replace

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

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

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

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

现在,当我遇到它们时,我一直在替换现有代码中的一些,但我已经厌倦了手动执行此操作。所以我试图通过使用结构搜索和替换在 IntelliJ 中解决这个问题。到目前为止,这是我的搜索模板:

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

出现次数:

替换模板定义如下:

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

这不适用于我在开头定义的示例,但是它仅匹配并正确替换函数体中的单行语句,因此以下示例被正确替换:

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

我错过了什么吗?当我查看 Jetbrains website 上的简单 if-else 示例时,我觉得这应该可行。

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

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

不匹配,可能是因为在执行实际正则表达式匹配之前分号被 IntelliJ 结构搜索过滤掉了。

(.*)=(.*)

匹配,但替换为与没有正则表达式时相同的行为。

由于 a bug.

,目前无法将多个语句与 JavaScript 中的变量匹配