Intellij Javascript многострочный структурный поиск и замена
В нашем проекте множество угловых модульных тестов содержат следующий синтаксис:
inject(['dependency1', 'dependency2', function(_dependency1_, _dependency2_) {
dependency1 = _dependency1_;
dependency2 = _dependency2_;
}]);
В тестах массив, в котором перечислены зависимости со строковыми значениями, устарел, поскольку это полезно только при использовании минификации. Поэтому мы выпустили соглашение о кодировании, чтобы изменить этот синтаксис на:
inject(function(_dependency1_, _dependency2_) {
dependency1 = _dependency1_;
dependency2 = _dependency2_;
});
Теперь я заменил пару из них в существующем коде, когда натолкнулся на них, но я очень устал делать это вручную. Поэтому я пытаюсь решить эту проблему в IntelliJ с помощью структурного поиска и замены. Это мой шаблон поиска:
inject([$injection$, function($argument$) {
$statement$;
}]);
с вхождениями:
- $ инъекция $: 1 до бесконечности
- $ аргумент $: 1 до бесконечности
- $ заявление $: 1 до бесконечности
Шаблон замены определяется следующим образом:
inject(function($argument$) {
$statement$;
});
Это не работает для примера, который я определил в начале, однако, оно соответствует и корректно заменяет только однострочный оператор в теле функции, поэтому следующий пример заменяется правильно:
inject(['dependency1', 'dependency2', function(_dependency1_, _dependency2_) {
dependency1 = _dependency1_;
}]);
Я что-то пропустил? Когда я проверяю простой пример if-else на сайте Jetbrains, у меня возникает ощущение, что это должно сработать.
Я попытался удалить точку с запятой за переменной $ Statement $, она не совпадала с несколькими строками и привела к удалению точки с запятой после замены. Я также пытался применить выражения regex к переменной $ Statement $, но они тоже не помогли.
((.*)=(.*);\n)+
не совпадает, вероятно, потому что точка с запятой отфильтровывается структурным поиском IntelliJ перед выполнением фактического сопоставления регулярному выражению.
(.*)=(.*)
соответствует, но оно заменяется тем же поведением, что и без регулярного выражения.
1 ответ
Сопоставление нескольких операторов с переменной в JavaScript в настоящее время нарушено из-за ошибки.