Как запретить программе форматирования Eclipse помещать все перечисления в одну строку


106

У меня есть перечисления вроде:

public static enum Command
{
login,
register,
logout,
newMessage
}

При форматировании файла вывод становится:

public static enum Command 
{
login, register, logout, newMessage
}

1
Есть ли какая-либо переменная во внешнем средстве форматирования (org.eclipse.jdt.core.formatter ......), чтобы обеспечить выполнение каждой переменной перечисления в отдельной строке?
— Парамеш Корракути

Ответы:


198

Ответ @wjans отлично работал для обычных перечислений, но не для перечислений с аргументами. Чтобы немного расширить его ответ, вот настройки, которые предоставили мне наиболее разумное форматирование в Eclipse Juno:

  1. Window> Preferences> Java> Code Style>Formatter
  2. Нажмите Edit
  3. Выберите Line Wrappingвкладку
  4. Выберите режим enumобъявления
  5. Установите Line wrapping policyна Wrap all elements, every element on a new line (...)так теперь говорит 3 из 3 в скобках.
  6. Снимите флажок, Force split, even if line shorter than maximum line width (...)чтобы теперь в скобках было 3 из 3.
  7. Выберите Constantstreenode
  8. Проверьте Force split, even if line shorter than maximum line width

Это устанавливает для трех подузлов для enum treenode одну и ту же политику упаковки и одну и ту же политику принудительного разделения, за исключением Constants treenode, поэтому ваши перечисления с аргументами будут отформатированы каждый в отдельной строке. Аргументы будут переноситься только в том случае, если они превышают максимальную ширину строки.

Примеры:

@wjans

enum Example {
    CANCELLED,
    RUNNING,
    WAITING,
    FINISHED
}

enum Example {
    GREEN(
        0,
        255,
        0),
    RED(
        255,
        0,
        0)
}

Решение, описанное выше:

enum Example {
    CANCELLED,
    RUNNING,
    WAITING,
    FINISHED
}

enum Example {
    GREEN(0, 255, 0),
    RED(255, 0, 0)
}

1
Для меня все еще выглядит неправильно в средстве предварительного просмотра eclipse, но когда я попробовал его на реальном источнике, он работал как шарм. Спасибо.
— Бен Терли

50

Вы можете указать это в настройках средства форматирования:

  • Предпочтения: Java - Стиль кода - Форматирование
  • Нажмите Edit
  • Выберите вкладку "Перенос строк".
  • Выберите объявление enum -> Константы в поле слева
  • Установите для политики переноса строки значение «Переносить все элементы, каждый элемент на новую строку»
  • Установите флажок Force split ...

У меня была эта проблема несколько месяцев. То, что я не пробовал, было «силовым разделением». Не уверен, зачем это нужно, так как вы могли подумать, что «обернуть все элементы» на самом деле обернет все элементы! Спасибо за решение.
— LegendLength

11

Это тоже немного некрасиво, но если политика вашей компании не позволяет вам изменить средство форматирования, вы можете просто поместить комментарии в конце строк, которые вы не хотите переносить.

public static enum Command 
{
    login,//
    register,//
    logout,//
    newMessage//
};

5

Это неприятно, но вы можете отключить форматировщик Eclipse для некоторых участков кода ...

// @formatter:off
public static enum Command {
    login,
    register,
    logout,
    newMessage
};
// @formatter:on

эта опция находится в Windows-> Preferences-> Java-> Code Style-> Formatter-> Edit-> Off / On Tags панель


1
Это работает ... вроде как. Теперь компилятор считает, что это ошибка. Помещение их в комментарии преодолевает эту проблему, например // @formatter: off
— Боб Кухар

4

Вам необходимо установить политику переноса строк в объявлении enum для «Константы».

Установите для политики упаковки значение

  • Перенести все элементы, каждый элемент на новую строку

И

  • Установите флажок "Force Split, даже если строка короче ,,,,,

0

Просто добавляю последнюю версию Eclipse 2018.9

  1. Window > Preferences > Java > Code Style > Formatter - Edit
  2. Разверните Line Wrappingузел дерева.
  3. Развернуть Wrapping settings
  4. Развернуть 'enum' declaration
  5. Редактировать Constantsи Constant arguments.

Константы должны быть Wrap all elements, every element on a new line. Постоянные аргументы нужны Wrap where necessary.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.