Как устранить "фигурные скобки на новой строке" с помощью поиска и замены 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 (меню: Код -> Переформатировать код)
- появится диалоговое окно "Переформатировать код", нажмите "ОК"
Весь код должен быть переформатирован в соответствии с правилами.