在我们的项目中,许多角度单元测试包含以下语法:
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 结构搜索过滤掉了。
(.*)=(.*)
匹配,但它替换为与没有正则表达式相同的行为。