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 в настоящее время нарушено из-за ошибки.

Другие вопросы по тегам