Cómo evitar que el formateador de Eclipse coloque todas las enumeraciones en una línea


106

Tengo enumeraciones como:

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

Al formatear el archivo, la salida se convierte en:

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

1
¿Hay alguna variable en el formateador externo (org.eclipse.jdt.core.formatter ......) para hacer cumplir cada variable de enumeración en una línea separada?
Paramesh Korrakuti

Respuestas:


198

La respuesta de @wjans funcionó bien para enumeraciones normales, pero no para enumeraciones con argumentos. Para ampliar un poco su respuesta, aquí está la configuración que me proporcionó el formato más sensato en Eclipse Juno:

  1. Window> Preferences> Java> Code Style>Formatter
  2. Hacer clic Edit
  3. Seleccione la Line Wrappingpestaña
  4. Seleccione la enumdeclaración treenode
  5. Ajústelo Line wrapping policypara Wrap all elements, every element on a new line (...)que ahora diga 3 de 3 entre paréntesis.
  6. Desmarque Force split, even if line shorter than maximum line width (...)para que ahora diga 3 de 3 entre paréntesis.
  7. Seleccione el Constantstreenode
  8. Cheque Force split, even if line shorter than maximum line width

Esto establece los 3 subnodos para el treenode enum con la misma política de envoltura y la misma política de división Constantsforzada, excepto para el treenode, por lo que sus enumeraciones con argumentos se formatearán cada uno en su propia línea. Los argumentos solo se ajustarán si exceden el ancho máximo de línea.

Ejemplos:

@wjans

enum Example {
    CANCELLED,
    RUNNING,
    WAITING,
    FINISHED
}

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

Solución descrita anteriormente:

enum Example {
    CANCELLED,
    RUNNING,
    WAITING,
    FINISHED
}

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

1
Todavía se ve mal en la vista previa de eclipse para mí, pero cuando lo probé en la fuente real, funcionó como un encanto. Gracias.
Ben Thurley

50

Puede especificar esto en sus preferencias de formateador:

  • Preferencias: Java - Estilo de código - Formateador
  • Haga clic en Editar
  • Seleccione la pestaña 'Ajuste de línea'
  • Seleccione la declaración 'enum' -> Constantes en el cuadro de la izquierda
  • Establezca la política de ajuste de línea en 'Envolver todos los elementos, cada elemento en una nueva línea'
  • Marque 'Forzar división ...'

Tuve este problema durante meses. Lo que no intenté fue "forzar división". No estoy seguro de por qué debería ser necesario ya que pensaría que "envolver todos los elementos" en realidad envolvería todos los elementos. Gracias por la solucion
LegendLength

11

También es un poco feo, pero si la política de su empresa le impide cambiar el formateador, puede poner comentarios al final de las líneas que no desea que se envuelvan.

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

5

No es agradable, pero puede desactivar el formateador Eclipse para algunas secciones de código ...

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

la opción está en el panel Windows-> Preferences-> Java-> Code Style-> Formatter-> Edit-> Off / On Tags


1
Esto funciona ... algo así. El compilador ahora piensa que es un error. Ponerlos en comentarios supera este problema como // @formatter: off
Bob Kuhar

4

Debe establecer la política de ajuste de línea en la declaración de enumeración para "Constantes".

Establezca la política de envoltura en

  • Envuelva todos los elementos, cada elemento en una nueva línea

Y

  • Marque la casilla que dice "Forzar división, incluso si la línea es más corta que ,,,,,

0

Simplemente agregando el último Eclipse 2018.9

  1. Window > Preferences > Java > Code Style > Formatter - Edit
  2. Expanda el Line Wrappingnodo del árbol.
  3. Expandir Wrapping settings
  4. Expandir 'enum' declaration
  5. Edite Constantsy Constant arguments.

Las constantes deben serlo Wrap all elements, every element on a new line. Los argumentos constantes deben serlo Wrap where necessary.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.