Come impedire al formattatore di Eclipse di posizionare tutte le enumerazioni su una riga


106

Ho enumerazioni come:

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

Durante la formattazione del file, l'output diventa:

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

1
C'è qualche variabile nel formattatore esterno (org.eclipse.jdt.core.formatter ......) per far rispettare ogni variabile enum in una riga separata?
Paramesh Korrakuti

Risposte:


198

La risposta di @wjans ha funzionato bene per le enumerazioni normali, ma non per le enumerazioni con argomenti. Per espandere un po 'la sua risposta, ecco le impostazioni che hanno fornito la formattazione più sensata per me in Eclipse Juno:

  1. Window> Preferences> Java> Code Style>Formatter
  2. Clic Edit
  3. Seleziona la Line Wrappingscheda
  4. Seleziona la enumdichiarazione treenode
  5. Impostato Line wrapping policysu Wrap all elements, every element on a new line (...)così ora dice 3 di 3 tra parentesi.
  6. Deseleziona Force split, even if line shorter than maximum line width (...)così ora dice 3 di 3 tra parentesi.
  7. Seleziona il Constantstreenode
  8. Dai un'occhiata Force split, even if line shorter than maximum line width

Questo imposta i 3 sottonodi per l'enum treenode sulla stessa politica di wrapping e la stessa politica di divisione forzata tranne per il Constantstreenode, quindi le enumerazioni con argomenti verranno formattate ciascuna sulla propria riga. Gli argomenti andranno a capo solo se superano la larghezza massima della riga.

Esempi:

@wjans

enum Example {
    CANCELLED,
    RUNNING,
    WAITING,
    FINISHED
}

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

Soluzione descritta sopra:

enum Example {
    CANCELLED,
    RUNNING,
    WAITING,
    FINISHED
}

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

1
Sembra ancora sbagliato nel visualizzatore di eclissi per me, ma quando l'ho provato sulla sorgente effettiva ha funzionato a meraviglia. Grazie.
Ben Thurley,

50

Puoi specificarlo nelle preferenze del formattatore:

  • Preferenze: Java - Stile codice - Formattatore
  • Fare clic su Modifica
  • Seleziona la scheda "A capo automatico"
  • Seleziona la dichiarazione 'enum' -> Costanti nella casella a sinistra
  • Imposta il criterio di ritorno a capo su "Racchiudi tutti gli elementi, ogni elemento su una nuova riga"
  • Seleziona "Forza divisione ..."

Ho avuto questo problema per mesi. La cosa che non ho provato è stata "force split". Non sono sicuro del motivo per cui dovrebbe essere necessario poiché penseresti che "avvolgere tutti gli elementi" avrebbe effettivamente avvolto tutti gli elementi! Grazie per la soluzione.
LegendLength

11

È anche un po 'brutto, ma se la politica della tua azienda ti impedisce di cambiare il formattatore, puoi semplicemente inserire i commenti alla fine delle righe che non vuoi che siano avvolte.

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

5

Non è carino ma puoi disattivare il formattatore Eclipse per alcune sezioni di codice ...

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

l'opzione è nel pannello Windows-> Preferenze-> Java-> Stile codice-> Formattatore-> Modifica-> Off / On tag


1
Funziona ... più o meno. Il compilatore ora pensa che sia un errore. Metterli nei commenti risolve questo problema come // @formatter: off
Bob Kuhar

4

È necessario impostare il criterio di ritorno a capo della riga nella dichiarazione enum per "Costanti".

Imposta il criterio di avvolgimento su

  • Avvolgi tutti gli elementi, ogni elemento su una nuova linea

E

  • Seleziona la casella "Forza divisione, anche se la riga è più corta di ,,,,,

0

Basta aggiungere l'ultimo Eclipse 2018.9

  1. Window > Preferences > Java > Code Style > Formatter - Edit
  2. Espandere il Line Wrappingnodo della struttura ad albero.
  3. Espandere Wrapping settings
  4. Espandere 'enum' declaration
  5. Modifica Constantse Constant arguments.

Le costanti devono essere Wrap all elements, every element on a new line. Gli argomenti costanti devono essere Wrap where necessary.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.