Как запретить программе форматирования 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.