Как устранить "фигурные скобки на новой строке" с помощью поиска и замены Intellij?

Я пытаюсь найти все операторы if, в которых фигурные скобки записаны в новой строке, используя следующий шаблон поиска и замены:

Шаблон поиска:

if ($Expr$)
{
    $ThenStatements$;
}
else
{
    $ElseStatements$;
}

Заменить шаблон:

if ($Expr$) {
    $ThenStatements$;
}
else {
    $ElseStatements$;
}

Проблема, с которой я сталкиваюсь, если этот шаблонизатор не различает оба шаблона. Он предлагает мне заменить шаблон поиска на правильный, но он также определяет "правильные" шаблоны как неисправные.

Есть ли способ обойти это, используя какое-то регулярное выражение?

Редактировать: Работа на Android Studio. Я пытаюсь сгенерировать набор правил lint для моих компаний, которые будут отображаться в виде предупреждений или ошибок.

2 ответа

Решение

Структурный поиск и замена предназначен для поиска кода независимо от того, как он отформатирован. Поэтому ваш вариант использования не очень поддерживается. Однако, немного взломав, можно получить из этого то, что вы хотите.

Начните с вашего шаблона поиска и добавьте следующие ограничения скрипта Groovy в $Expr$ переменная:

import com.intellij.psi.*
import com.intellij.openapi.editor.Document

PsiDocumentManager dm = PsiDocumentManager.getInstance(__context__.project)
Document d = dm.getDocument(__context__.containingFile)
PsiIfStatement is = __context__.parent
if (is.thenBranch != null && is.thenBranch.text.startsWith("{")) {
  if (d.getLineNumber(is.thenBranch.textOffset) > d.getLineNumber(is.RParenth.textOffset))
    return true
}
if (is.elseBranch != null && is.elseBranch.text.startsWith("{")) {
  if (d.getLineNumber(is.elseBranch.textOffset) > d.getLineNumber(is.elseElement.textOffset))
    return true;
}
return false 

Этот скрипт проверяет ветвь then { находится на линии больше, чем ) оператора if или ветви else { находится на линии больше, чем else ключевое слово или возвращает false иначе.

Я считаю, что правильным инструментом для работы является средство форматирования кода.

Я предполагаю, что это Java, о которой мы говорим.

Настройте параметры форматирования:

  • зайдите в Настройки -> Редактор -> Стиль кода -> Java -> (вкладка) Перенос и фигурные скобки
  • установить пункт Брекеты Размещение / Другое на: Конец строки
  • проверьте предварительный просмотр, если это настройка, которую вы хотите
  • нажмите ОК

Формат (весь) код:

  • выберите корневой пакет
  • нажмите Alt+L (меню: Код -> Переформатировать код)
  • появится диалоговое окно "Переформатировать код", нажмите "ОК"

Весь код должен быть переформатирован в соответствии с правилами.

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