Jak powstrzymać program formatujący Eclipse przed umieszczeniem wszystkich wyliczeń w jednym wierszu

106

Mam takie wyliczenia:

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

Podczas formatowania pliku wynik wygląda następująco:

public static enum Command 
{
login, register, logout, newMessage
}
MetaChrome
źródło
1
Czy w zewnętrznym programie formatującym (org.eclipse.jdt.core.formatter ......) jest jakaś zmienna, która wymusza każdą zmienną wyliczenia w oddzielnym wierszu?
Paramesh Korrakuti

Odpowiedzi:

198

Odpowiedź @wjans działała dobrze w przypadku normalnych wyliczeń, ale nie w przypadku wyliczeń z argumentami. Aby nieco rozwinąć jego odpowiedź, oto ustawienia, które zapewniły mi najbardziej sensowne formatowanie w Eclipse Juno:

  1. Window> Preferences> Java> Code Style>Formatter
  2. Kliknij Edit
  3. Wybierz Line Wrappingkartę
  4. Wybierz enumtreenode deklaracji
  5. Ustaw Line wrapping policysię Wrap all elements, every element on a new line (...)tak, że teraz mówi 3 z 3 w nawiasach.
  6. Usuń zaznaczenie, Force split, even if line shorter than maximum line width (...)aby teraz w nawiasach było napisane 3 z 3.
  7. Wybierz Constantstreenode
  8. Czek Force split, even if line shorter than maximum line width

Ustawia to 3 podwęzły dla enum treenode na te same zasady zawijania i te same zasady force split z wyjątkiem Constantstreenode, więc twoje wyliczenia z argumentami zostaną sformatowane w osobnym wierszu. Argumenty będą zawijane tylko wtedy, gdy przekroczą maksymalną szerokość linii.

Przykłady:

@wjans

enum Example {
    CANCELLED,
    RUNNING,
    WAITING,
    FINISHED
}

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

Rozwiązanie opisane powyżej:

enum Example {
    CANCELLED,
    RUNNING,
    WAITING,
    FINISHED
}

enum Example {
    GREEN(0, 255, 0),
    RED(255, 0, 0)
}
PolyTekPatrick
źródło
1
Nadal wygląda źle w podglądzie zaćmień, ale kiedy wypróbowałem go na rzeczywistym źródle, działało jak urok. Dzięki.
Ben Thurley,
50

Możesz to określić w swoich preferencjach formatera:

  • Preferencje: Java - Styl kodu - Program formatujący
  • Kliknij Edytuj
  • Wybierz kartę „Zawijanie linii”
  • Wybierz deklarację „wyliczenia” -> Stałe w polu po lewej stronie
  • Ustaw zasadę zawijania wierszy na „Zawijaj wszystkie elementy, każdy element w nowym wierszu”
  • Zaznacz opcję „Wymuś podział ...”
wjans
źródło
Miałem ten problem od miesięcy. Rzeczą, której nie próbowałem, był „podział siły”. Nie jestem pewien, dlaczego miałoby to być potrzebne, ponieważ można by pomyśleć, że „zawiń wszystkie elementy” w rzeczywistości zawinie wszystkie elementy! Dzięki za rozwiązanie.
LegendLength,
11

Jest to również trochę brzydkie, ale jeśli polityka Twojej firmy uniemożliwia zmianę programu formatującego, możesz po prostu umieścić komentarze na końcu wierszy, których nie chcesz zawijać.

public static enum Command 
{
    login,//
    register,//
    logout,//
    newMessage//
};
Raku
źródło
5

To nie jest miłe, ale możesz wyłączyć formatowanie Eclipse dla niektórych sekcji kodu ...

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

opcja znajduje się w Windows-> Preferencje-> Java-> Styl kodu-> Formatter-> Edycja-> Włącz / Wyłącz znaczniki

pillingworth
źródło
1
To działa ... w pewnym sensie. Kompilator uważa teraz, że to błąd. Umieszczenie ich w komentarzach rozwiązuje ten problem, jak // @formatter: off
Bob Kuhar
4

Musisz ustawić zasady zawijania wierszy w deklaracji wyliczenia dla „Stałych”.

Ustaw zasadę zawijania na

  • Owiń wszystkie elementy, każdy element w nowej linii

I

  • Zaznacz pole „Wymuś podział, nawet jeśli linia jest krótsza niż ,,,,,
Ray Toal
źródło
0

Dodam tylko najnowsze Eclipse 2018.9

  1. Window > Preferences > Java > Code Style > Formatter - Edit
  2. Rozwiń Line Wrappingwęzeł drzewa.
  3. Rozszerzać Wrapping settings
  4. Rozszerzać 'enum' declaration
  5. Edytuj Constantsi Constant arguments.

Stałe muszą być Wrap all elements, every element on a new line. Muszą być ciągłe argumenty Wrap where necessary.

Ondrej Burkert
źródło