Formateador de código Java autónomo / embellecedor / bonita impresora?

Estoy interesado en conocer las opciones disponibles de formateadores de código fuente de alta calidad para Java.

El formateador debe ser independiente, es decir, debe admitir un modo “por lotes” que esté desacoplado de cualquier entorno de desarrollo particular . Idealmente, también debería ser independiente de cualquier sistema operativo en particular . Por lo tanto, un formateador incorporado para el IDE du jour es de poco interés aquí (a menos que ese IDE admita la invocación del formateador de modo por lotes, quizás desde la línea de comandos). Un formateador escrito en código cerrado C / C ++ que solo se ejecuta en, digamos, Windows no es ideal, pero es algo interesante.

Para ser claros, un “formateador” (o “embellecedor”) no es lo mismo que un “corrector de estilo“. Un formateador acepta el código fuente como entrada, aplica reglas de estilo y produce un código fuente con estilo que es semánticamente equivalente al código fuente original. Las modificaciones sintácticas se limitan a cosas como la modificación del diseño del código, como cambiar el espacio en blanco o la organización de instrucciones de import . Se realiza muy poca, si alguna, otra refactorización. Un verificador de estilo también aplica reglas de estilo, pero simplemente informa violaciones a las reglas sin producir código fuente modificado como resultado. Entonces la imagen se ve así:

Formateador (produce un código fuente modificado que cumple con las reglas de diseño)

Leer código fuente → Aplicar reglas de estilo → Escribir código fuente con estilo

Style Checker (no produce código fuente modificado)

Leer código fuente → Aplicar reglas de estilo → Escribir violaciones de reglas

Aclaraciones adicionales

Las soluciones deben ser altamente configurables. Quiero poder especificar mi propio estilo, no simplemente seleccionar de una lista preestablecida.

Además, no estoy buscando una impresora bonita de uso general escrita en Java que pueda imprimir muchas cosas. Quiero diseñar un código Java.

Tampoco estoy necesariamente interesado en un formateador grand-unificado para muchos idiomas. Supongo que podría ser bueno que una solución tenga soporte para lenguajes distintos de Java, pero eso no es un requisito.

Además, las herramientas que solo llevan a cabo resaltado de código son correctas .

Tampoco estoy interesado en un servicio web. Quiero una herramienta que pueda ejecutar localmente.

Finalmente, las soluciones no necesitan estar restringidas a código abierto, dominio público, shareware, software libre, comercial o cualquier otra cosa. Todas las formas de licencia son aceptables .

JIndent (Comercial) hace lo que quiere:

http://www.jindent.com/

También he usado Jalopy en el pasado para hacer esto, es de código abierto:

http://jalopy.sourceforge.net/

EDITAR: Notaré que Jalopy es bastante viejo y no parece haber actualizaciones recientes. No estoy seguro de si funcionará con Java 5/6. Es posible que desee ver a Jacobe en su lugar:

http://www.tiobe.com/index.php/content/products/jacobe/Jacobe.html

También hay una lista más completa de formateadores aquí en el sitio de Roedy Green:

http://mindprod.com/jgloss/beautifier.html

También puede ejecutar el formateo de Eclipse desde la línea de comandos. Mira esta entrada de blog

Jalopy puede ser de interés. Se conectará a Ant y, por lo tanto, es independiente de su IDE.

Astyle también puede ser útil. Es de código abierto (como Jalopy) pero escrito en C ++. Está orientado al formateo de Java / C / C ++ y puede ser controlado por lotes (a través de scripts de shell o similares)

ACTUALIZACIÓN: según mi nuevo entendimiento basado en un informe de error incorrecto que archivé: https://bugs.eclipse.org/bugs/show_bug.cgi?id=325289 El archivo OpenMRSFormatter.xml en realidad tiene que ser un archivo de preferencias y no un XML archivo.

Puede encontrar dicho archivo aquí: https://bugs.eclipse.org/bugs/attachment.cgi?id=178874

o convierta cualquier archivo formateador exportado XML con: cat formatter.xml | configuración de grep | sed ‘s / @@’> formatter.asprefs

Gracias Misha


Aquí hay algo que hice usando Eclipse 3.6 jarras. Es solo para Java, línea de comandos y debe ser compatible con plataformas cruzadas:

http://www.sendspace.com/file/nm4ptt

Hay un script de shell que usa un archivo OpenMRSCodeFormatter.xml incluido. El resultado de la muestra:

 misha@misha-d630:~/openmrs-code-formatter$ cat ../Test.java public class Test { public a() { System.out.println("! I did not format this right!"); } }misha@misha-d630:~/openmrs-code-formatter$ ./format.sh ../Test.java Configuration Name: OpenMRSFormatter.xml Starting format job ... Done. cat ../misha@misha-d630:~/openmrs-code-formatter$ cat ../Test.java public class Test { public a() { System.out.println("! I did not format this right!"); } }misha@misha-d630:~/openmrs-code-formatter$ 

Esto se basa en el post aquí: http://www.peterfriese.de/formatting-your-code-using-the-eclipse-code-formatter/

Como no sé por cuánto tiempo permanecerá el enlace, describiré el contenido a continuación.

Esto se basa en la distribución Eclipse 3.6 Helios. Usé el de Linux x86, pero debería funcionar para cualquier versión, ya que no usé ninguno (que yo sepa) archivos JAR específicos de la plataforma.

Los contenidos del archivo tar son:

 misha@misha-d630:~$ tar tvjf openmrs-code-formatter.tar.bz2 | sort tar: Record size = 8 blocks drwxr-xr-x misha/misha 0 2010-09-11 19:32 openmrs-code-formatter/plugins/ drwxr-xr-x misha/misha 0 2010-09-11 19:33 openmrs-code-formatter/configuration/org.eclipse.equinox.simpleconfigurator/ drwxr-xr-x misha/misha 0 2010-09-11 19:38 openmrs-code-formatter/configuration/ -rw-r--r-- misha/misha 101957 2010-09-11 19:03 openmrs-code-formatter/plugins/org.eclipse.equinox.common_3.6.0.v20100503.jar -rw-r--r-- misha/misha 107210 2010-09-11 19:32 openmrs-code-formatter/plugins/org.eclipse.core.commands_3.6.0.I20100512-1500.jar -rw-r--r-- misha/misha 111098 2010-09-11 19:06 openmrs-code-formatter/plugins/org.eclipse.equinox.preferences_3.3.0.v20100503.jar -rw-r--r-- misha/misha 1147220 2010-09-11 18:45 openmrs-code-formatter/plugins/org.eclipse.osgi_3.6.0.v20100517.jar -rw-r--r-- misha/misha 1812 2010-09-11 19:33 openmrs-code-formatter/configuration/org.eclipse.equinox.simpleconfigurator/bundles.info -rw-r--r-- misha/misha 182596 2010-09-11 19:05 openmrs-code-formatter/plugins/org.eclipse.equinox.registry_3.5.0.v20100503.jar -rw-r--r-- misha/misha 248071 2010-09-11 19:29 openmrs-code-formatter/plugins/org.eclipse.text_3.5.0.v20100601-1300.jar -rw-r--r-- misha/misha 265 2010-09-11 19:21 openmrs-code-formatter/configuration/config.ini -rw-r--r-- misha/misha 28554 2010-09-11 19:34 openmrs-code-formatter/OpenMRSFormatter.xml -rw-r--r-- misha/misha 39331 2010-09-11 19:17 openmrs-code-formatter/plugins/org.eclipse.equinox.simpleconfigurator_1.0.200.v20100503.jar -rw-r--r-- misha/misha 4504121 2010-09-11 19:27 openmrs-code-formatter/plugins/org.eclipse.jdt.core_3.6.0.v_A58.jar -rw-r--r-- misha/misha 47023 2010-09-11 18:42 openmrs-code-formatter/plugins/org.eclipse.equinox.launcher_1.1.0.v20100507.jar -rw-r--r-- misha/misha 52710 2010-09-11 19:29 openmrs-code-formatter/plugins/org.eclipse.core.filesystem_1.3.0.v20100526-0737.jar -rw-r--r-- misha/misha 6451211 2010-09-11 19:32 openmrs-code-formatter/plugins/com.ibm.icu_4.2.1.v20100412.jar -rw-r--r-- misha/misha 70928 2010-09-11 19:01 openmrs-code-formatter/plugins/org.eclipse.core.runtime_3.6.0.v20100505.jar -rw-r--r-- misha/misha 769898 2010-09-11 19:29 openmrs-code-formatter/plugins/org.eclipse.core.resources_3.6.0.v20100526-0737.jar -rw-r--r-- misha/misha 83817 2010-09-11 19:07 openmrs-code-formatter/plugins/org.eclipse.equinox.app_1.3.0.v20100512.jar -rw-r--r-- misha/misha 86986 2010-09-11 19:31 openmrs-code-formatter/plugins/org.eclipse.core.expressions_3.4.200.v20100505.jar -rw-r--r-- misha/misha 90837 2010-09-11 19:05 openmrs-code-formatter/plugins/org.eclipse.core.jobs_3.5.0.v20100515.jar -rw-r--r-- misha/misha 91928 2010-09-11 19:06 openmrs-code-formatter/plugins/org.eclipse.core.contenttype_3.4.100.v20100505-1235.jar -rwxr-xr-x misha/misha 111 2010-09-11 19:39 openmrs-code-formatter/format.sh 

Los archivos relevantes de jars en los plugins se toman directamente del directorio de plugins de Eclipse 3.6.

Los contenidos de config.ini son:

 misha@misha-d630:~$ more openmrs-code-formatter/configuration/config.ini osgi.bundles=reference\:file\:org.eclipse.equinox.simpleconfigurator_1.0.200.v20100503.jar@1\:start org.eclipse.equinox.simpleconfigurator.configUrl=file\:org.eclipse.equinox.simpleconfigurator/bundles.info eclipse.application=org.eclipse.jdt.core.JavaCodeFormatter 

format.sh es:

 misha@misha-d630:~$ more openmrs-code-formatter/format.sh #!/bin/bash java -jar plugins/org.eclipse.equinox.launcher_1.1.0.v20100507.jar -config OpenMRSFormatter.xml $* 

y OpenMRSFormatter.xml está disponible aquí: http://wiki.openmrs.org/download/attachments/3346087/OpenMRSFormatter.xml?version=1&modificationDate=1282168038000

Creo que debería ser suficiente para reproducir.

Un interesante proyecto basado en el mismo concepto se encuentra aquí: http://code.google.com/p/maven-java-formatter-plugin/

Gracias Misha

Prueba “Jacobe Code Beautifier”:

http://www.tiobe.com/index.php/content/products/jacobe/Jacobe.html

La edición personal es gratis.

Solía ​​usar el Dr. Java para codificar y con una pestaña rápida ctrl + A + lo formatea muy bien con resaltado de syntax. Lo he usado en Mac y Windows, no sé si soportan Linux. Y es de código abierto, independiente y gratuito.

También utilicé mucho PrettyPrinter incrustado en JRefactory ( http://jrefactory.sourceforge.net/ ). Lo descubrí a través de su complemento para JEdit. Lo valoré ya que tenía la mejor cobertura de javadoc que he visto.

Desafortunadamente parece muerto (no hay evolución desde 2004) y en realidad no es compatible con Java5.

Por cierto, confirmo que Triemax es una suite comercial basada en el jalopy de código abierto muerto.

Vea nuestro formateador de Java para una herramienta que maneja todos los dialectos de Java, incluida la versión 7.

Jalopy no maneja declaraciones como List stuff … y comentarios de pelusa que comienzan con @

Pude forzarlo a formatear cambiando todas las en LTLTLTMyClassGTGTGT y luego @ en // @ // // // (Simplemente repito LT, GT o // @ para asegurarme de que no ya existe. Luego pude Jalopy, y obviamente tengo que volver a poner todo en su lugar.

Además, antes de cambiar el , tiene que asegurarse de que no cambiará, se compara con < = o> = etc.

Por lo tanto, puede llamar a esto la solución de hombre pobre porque implica muchos pasos manuales. Si tuviera que hacer Jalopy con más frecuencia, probablemente escribiría un script usando sed que haría esos cambios automáticamente para mí.