Як зупинити формат Eclipse від розміщення всіх перерахунків на одному рядку


106

У мене є переліки, як:

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

Форматуючи файл, вихід стає:

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

1
Чи є якась змінна у зовнішньому форматорі (org.eclipse.jdt.core.formatter ......), щоб застосувати кожну змінну enum в окремому рядку?
Параміш Корракуті

Відповіді:


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. Виберіть Constantsтренод
  8. Перевірити Force split, even if line shorter than maximum line width

Це встановлює 3 підвузли для тренода enum до тієї ж політики обгортання та тієї ж політики розділення сили, за винятком Constantstreenode, тому ваші перерахунки з аргументами будуть форматовані кожен у своєму власному рядку. Аргументи будуть завершені, лише якщо вони перевищують максимальну ширину рядка.

Приклади:

@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
Все ще виглядає неправильно в попередньому програмі для затемнення для мене, але коли я спробував це на фактичному джерелі, він працював як шарм. Дякую.
Бен Турлі

50

Ви можете вказати це у своїх налаштуваннях форматера:

  • Налаштування: Java - Стиль коду - Форматтер
  • Натисніть Редагувати
  • Виберіть вкладку "Обертання ліній"
  • Виберіть "enum" декларацію -> Константи у полі зліва
  • Встановіть політику упаковки для рядка на "Обернути всі елементи, кожен елемент у новому рядку"
  • Поставте прапорець "Розділити силу ..."

У мене ця проблема була місяцями. Те, що я не намагався, - це "розділення сили". Не впевнений, навіщо це потрібно, як ви могли б подумати, що "обгортати всі елементи" насправді оберне всі елементи! Дякую за рішення.
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-> Налаштування-> Java-> Стиль коду-> Форматтер-> Правка-> Вимкнено / Увімкнено Теги


1
Це працює ... вид. Тепер компілятор вважає свою помилку. Подання їх у коментарі долає таку проблему, як // @formatter: off
Боб Кухар

4

Потрібно встановити політику обтікання рядків під декларацією enum для "Константи".

Встановіть політику упаковки на

  • Оберніть усі елементи, кожен елемент у новому рядку

І

  • Поставте прапорець "Формувати розділення, навіть якщо рядок коротший ,,,,,

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.