1

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

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 到无限
  • $statement$: 1 到无限

替换模板定义如下:

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

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

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

我错过了什么吗?当我在Jetbrains 网站上查看简单的 if-else 示例时,我觉得这应该可以工作。

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

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

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

(.*)=(.*)

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

4

1 回答 1

1

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

于 2016-04-09T11:48:16.990 回答