Как отключить форматировщик кода Eclipse для определенных разделов кода Java? - PullRequest
463 голосов
/ 30 ноября 2009

У меня есть некоторый код 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-FORMATTING & rarr; STOP-FORMATTING).

Ответы [ 12 ]

830 голосов
/ 28 июля 2010

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

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

Функции включения / выключения необходимо включить в настройках Eclipse: Java > Стиль кода > Formatter . Нажмите Изменить , Выкл. / Вкл. Теги , включить Включить выкл. / Вкл. Теги .

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

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

Java > Код Стиль > Formatter > Редактировать > Выкл. / Вкл. Теги

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

enter image description here

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

59 голосов
/ 30 ноября 2009

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

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

String query = //
    "SELECT FOO, BAR, BAZ" + //
    "  FROM ABC"           + //
    " WHERE BAR > 4";
24 голосов
/ 11 апреля 2014

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

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

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

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

23 голосов
/ 31 июля 2014

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

Свойства → Стиль кода Java → Форматер → Включить конкретные настройки проекта ИЛИ Настроить параметры рабочего пространства → Редактировать → Перенос строк (вкладка) → поставить галочку «Никогда не объединять уже перенесенные строки»

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

enter image description here

16 голосов
/ 17 августа 2011

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

Windows & rarr; Предпочтения Java & rarr; Стиль кода & rarr; Форматер

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

14 голосов
/ 30 ноября 2009

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

String query = 
    "SELECT FOO, BAR, BAZ" 
    +    "  FROM ABC"           
    +    " WHERE BAR > 4";
5 голосов
/ 23 июля 2016

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

5 голосов
/ 16 июля 2010

Я использую строковые части фиксированной ширины (дополненные пробелами), чтобы форматер не испортил мой отступ строки 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                          ";
4 голосов
/ 15 августа 2012

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

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

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

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

4 голосов
/ 16 апреля 2011

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

...