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

StackOverflow https://stackoverflow.com/questions/1820908

Вопрос

У меня есть некоторый код 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 3.6 позволяет отключить форматирование, поместив специальный комментарий, например

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

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

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

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

Java > Стиль кода > Formatter > Изменить > Выкл. / вкл. теги

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

введите описание изображения здесь

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

Другие советы

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

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

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

См. этот ответ для SO .

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

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

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

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

Свойства & # 8594; Стиль кода Java & # 8594; Форматер & # 8594; Включить настройки проекта или настроить параметры рабочего пространства & # 8594; Изменить & # 8594; Перенос строки (вкладка) & # 8594; отметьте " Никогда не присоединяйтесь к уже обернутым строкам "

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

введите описание изображения здесь

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

Windows Настройки Java Стиль кода Форматер

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

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

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

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

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

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

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

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

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

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

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

<Ол>
  • @formatter: off добавляет ссылку из кода в редактор. Код, по моему мнению, никогда не должен иметь таких ссылок.

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

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

  • На самом деле, вы, вероятно, хотите форматировать , верно? Вы хотите удалить смешанные табуляцию / пробел и конечные пробелы. Вы хотите сделать отступ в соответствии со стандартом кода. Чего НЕ НУЖНО, так это длинной строки. Именно это и дает вам призрачный комментарий!

  • Этот хак работает:

    String x = "s" + //Formatter Hack
        "a" + //
        "c" + //
        "d";
    

    Я бы предложил не использовать форматтер. Плохой код должен выглядеть плохо, а не искусственно. Хороший код требует времени. Вы не можете обмануть качество. Форматирование является частью качества исходного кода.

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top