groovy intelliJ "угловые скобки ()" изменить codestylesettings

в настоящее время у меня проблема с codestylesettings т. е. функцией "переформатировать код" в IntelliJ.

НЕОБХОДИМАЯ ИНФОРМАЦИЯ:

Я пишу groovy скрипты, которые используют некоторые функции Java (например, дженерики)

похоже, что моя версия groovy (которая не может быть изменена по разным причинам) сталкивается с проблемами компиляции при наличии переменной, определенной как это:

НЕ РАБОТАЕТ:

final List<Map<String, Object>> listOfMaps = a["b"] as List<Map<String, Object>>

проблема в том, что компилятор может интерпретировать только последние 2 правильно закрывать угловые скобки, если между ними есть пространство.

работает:

final List<Map<String, Object>> listOfMaps = a["b"] as List<Map<String, Object> >

это известная ошибка в версии groovy, которую я использую.

:

функция "переформатировать код" всегда удаляет пространство, которое я добавил Между закрывающими угловыми скобками, чтобы сделать скрипт компилируемым.

вопрос:

как я могу научить IntelliJ не удалять пространство?

попытки:

этот параметр существует для файлов java (настройки-> редактор -> стиль кода -> JAVA -> пробелы -> внутри -> угловые скобки).

экспортированные настройки XML:

<JavaCodeStyleSettings>
<option name="SPACES_WITHIN_ANGLE_BRACKETS" value="true" />

но не для groovy, поэтому я попытался добавить его для groovy так:

<codeStyleSettings language="Groovy">
<option name="SPACES_WITHIN_ANGLE_BRACKETS" value="true" />

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

вероятно, потому что groovy не знает об этих угловых скобках, поэтому здесь используется функциональность Java.

2 ответов


Я проверил декомпилированный исходный код, и он не кажется SPACES_WITHIN_ANGLE_BRACKETS поддерживает Groovy. Каждый форматер имеет отдельные правила форматирования и конфигурации. Ни одна из существующих конфигураций не поможет вам в вашем квесте

Only for Java

No Option in Groovy

как упоминал @ybedrov, вам нужно будет открыть запрос на улучшение с их

никакая существующая опция не поможет вы

As @daniel указал, существует один способ, который заключается в создании собственного пользовательского языка

http://www.jetbrains.org/intellij/sdk/docs/tutorials/custom_language_support_tutorial.html

но этот вариант существует в сказочном мире, если вы просто обеспокоены одним пространством. Я бы просто sed команда для устранения проблемы, запустив скрипт bash

$ find . -name "*.groovy" | xargs sed 's|>>|> >|g' -i

возможно, вы могли бы добавить комментарий в проблемных областях, чтобы предотвратить форматирование от взлома кода. Например:

final List<Map<String, Object>> listOfMaps = a["b"] as List<Map<String, Object>/**/>

предполагая, что это работает, это, по крайней мере, лучше, чем сломанный код, хотя и довольно уродливый.