it-roy-ru.com

Как отключить средство форматирования кода Eclipse для определенных разделов кода Java?

У меня есть некоторый Java код с инструкциями SQL, записанными в виде строк Java (пожалуйста, не используйте пламя войны OR/M, встроенный SQL - это не мое решение).

Я семантически разбил операторы SQL на несколько объединенных строк в несколько строк кода для простоты обслуживания. Так что вместо чего-то вроде:

String query = "SELECT FOO, BAR, BAZ FROM ABC WHERE BAR > 4";

У меня есть что-то вроде:

String query =
    "SELECT FOO, BAR, BAZ" +
    "  FROM ABC          " +
    " WHERE BAR > 4      ";

Этот стиль значительно упрощает чтение и поддержку SQL (IMHO), особенно для больших запросов. Например, я могу перевести мой редактор в режим "перезаписи" и довольно легко изменить текст на месте.

Обратите внимание, что эта проблема обобщается за пределы конкретного примера SQL. Любой код, написанный с использованием любого вертикального форматирования, особенно табличных конструкций, может быть уничтожен красивым принтером.

Теперь некоторые участники проекта используют редактор Eclipse, и семантическое форматирование часто нарушается при форматировании всего исходного файла.

Есть ли способ указать Eclipse игнорировать определенные строки исходного текста в отношении форматирования?

Я ищу что-то вроде специального комментария, который переключает форматировщик Eclipse. В идеале такой комментарий может быть настроен так, чтобы он был любым, что мы выбираем, и другие средства форматирования также могут быть запрограммированы так, чтобы он соблюдался:

// STOP-Eclipse-FORMATTING
String query =
    "SELECT FOO, BAR, BAZ" +
    "  FROM ABC          " +
    " WHERE BAR > 4      ";
// START-Eclipse-FORMATTING

Очевидно, что одно "решение" состоит в том, чтобы члены нашей команды стандартизировали какой-либо внешний форматер, такой как Jalopy или JIndent , но это не то, о чем этот вопрос (также не мое решение) в этом проекте): я специально ищу способ избежать форматирования Eclipse на разовой основе.

В идеале решение позволит мне вставить инструкции для форматера Eclipse , не требуя от членов команды, использующих Eclipse, каких-либо IDE реконфигурирования ( кроме возможного выбора комментария команды независимой от форматера: STOP-Eclipse-FORMATTINGSTOP-FORMATTING).

463
Greg Mattes

Eclipse 3.6 позволяет отключить форматирование, поместив специальный комментарий, например

// @formatter:off
...
// @formatter:on

Функции включения/выключения должны быть включены в настройках Eclipse: Java>Code Style>Formatter, Нажмите на EditOff/On Tags, включить Enable Off/On tags,.

Также можно изменить магические строки в настройках - ознакомьтесь с документацией по Eclipse 3.6 здесь .

Дополнительная информация

Java>Code Style>Formatter>Edit>Off/On Tags

Это предпочтение позволяет вам определить один тег для отключения и один тег для включения средства форматирования (см. Вкладку "Выкл./Вкл. Теги" в вашем профиле форматера):

enter image description here

Вам также нужно включить флаги из Java Formatting

830
xpmatteo

AFAIK из Eclipse 3.5 M4 в формататоре имеет опцию "Никогда не объединять строки", которая сохраняет разрывы пользовательских строк. Может быть, это то, что вы хотите.

Еще есть этот уродливый хак

String query = //
    "SELECT FOO, BAR, BAZ" + //
    "  FROM ABC"           + //
    " WHERE BAR > 4";
59
jitter

Смотрите этот ответ на SO .

Есть еще одно решение, которое вы можете использовать для подавления форматирования комментариев конкретного блока. Используйте /*- (обратите внимание на дефис) в начале комментария к блоку, и форматирование не повлияет на форматирование остальной части файла.

/*-
 * Here is a block comment with some very special
 * formatting that I want indent(1) to ignore.
 *
 *    one
 *        two
 *            three
 */

Источник: Документация в Oracle .

24
Renaud

Вместо того, чтобы отключить форматирование, вы можете настроить его так, чтобы он не объединял уже перенесенные строки. Аналогично ответу Джиттера, вот для Eclipse STS:

Свойства → Java Стиль кода → Форматер → Включить специфичные для проекта настройки OR Настроить параметры рабочего пространства → Правка → Перенос строки (вкладка) → проверить "Никогда не объединять уже перенесенные строки"

Сохранить, применить.

enter image description here

23
ilinca

Вы должны включить возможность добавлять теги форматера. В меню выберите:

WindowsPreferencesJavaCode StyleFormatter

Нажмите Edit кнопка. Выберите последнюю вкладку. Обратите внимание на поле "Вкл/Выкл" и включите их с помощью флажка.

16
ZilWerks

Если поставить знак плюс в начале строки, он форматируется иначе:

String query = 
    "SELECT FOO, BAR, BAZ" 
    +    "  FROM ABC"           
    +    " WHERE BAR > 4";
14
CPerkins

Завершите каждую строку двойной косой чертой "//". Это помешает Eclipse переместить их всех на одну линию.

5
Evvo

Я использую строковые части фиксированной ширины (дополненные пробелами), чтобы форматер не испортил мой отступ строки SQL. Это дает смешанные результаты и не будет работать, когда пробелы не игнорируются, как в SQL, но могут быть полезны.

    final String sql = "SELECT v.value FROM properties p               "
            + "JOIN property_values v ON p.property_id = v.property_id "
            + "WHERE p.product_id = ?                                  "
            + "AND v.value        IS NOT NULL                          ";
5
Guus

Альтернативный метод: в Eclipse 3.6 в разделе "Перенос строк", а затем "Общие настройки" есть опция "Никогда не объединять уже перенесенные строки". Это означает, что средство форматирования будет переносить длинные строки, но не отменять любое, которое у вас есть.

4
kmccoy

У @xpmatteo есть ответ на отключение частей кода, но в дополнение к этому, настройки Eclipse по умолчанию должны быть установлены для форматирования только отредактированных строк кода вместо всего файла.

Preferences->Java->Editor->Save Actions->Format Source Code->Format Edited Lines

Это предотвратило бы это в первую очередь, поскольку ваши коллеги переформатировали код, который они на самом деле не изменили. Это хорошая практика для предотвращения ошибок, которые делают diff на вашем контроле исходного кода бесполезным (когда весь файл переформатируется из-за незначительных различий в настройках формата).

Это также предотвратит переформатирование, если опция включения/выключения тегов была отключена.

4
Robin

Фантомные комментарии, добавляющие //, где вы хотите новые строки, великолепны!

  1. @Formatter: off добавляет ссылку из кода в редактор. Код, на мой взгляд, никогда не должен иметь таких ссылок.

  2. Фантомные комментарии (//) будут работать независимо от используемого инструмента форматирования. Независимо от Eclipse, InteliJ или любого другого редактора, который вы используете. Это работает даже с очень хорошим форматом Google Java

  3. Фантомные комментарии (//) будут работать во всем приложении. Если у вас также есть Javascript и, возможно, используется что-то вроде JSBeautifier . Вы можете иметь подобный стиль кода также в Javascript.

  4. На самом деле, вы, вероятно, хотите форматирования правильно? Вы хотите удалить смешанные табуляцию/пробел и конечные пробелы. Вы хотите сделать отступ в соответствии со стандартом кода. То, что вы НЕ хотите, это длинная строка. Это, и только это, то, что дает вам призрачный комментарий!

1
Tomas Bjerre