2009-06-15 15 views
73

Estoy interesado en conocer las opciones disponibles de formateadores de código fuente de alta calidad para Java.formateador de código Java autónomo/embellecedor/bonita impresora?

El formateador debe ser independiente, es decir, que debe soportar un modo "por lotes" que es decoupled from any particular development environment. Idealmente, debería ser independiente de cualquier sistema operativo en particular también. 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 código fuente como entrada, aplica reglas de estilo y produce 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 los espacios en blanco o la organización de las declaraciones import. Se realiza muy poca, si alguna, otra refactorización. Un verificador de estilo también aplica reglas de estilo, pero simplemente informa violaciones de reglas sin producir el código fuente modificado como salida. Por lo que la imagen se ve como esto:

formateador (produce código fuente modificado que se ajusta a las normas de estilo) Código

Leer Fuente → Aplicar reglas de estilo → Escribir labró el Código Fuente

Corrector de Estilo (no produce código fuente modificado)

Lea el código fuente → Solicite reglas de estilo → Escriban violaciones de reglas

más aclaraciones

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

Además, soy que no busca general purpose pretty-printer written in Java que puede bastante imprimir muchas cosas. Quiero diseñar un código Java.

También estoy no necesariamente interesado en un grand-unified formatter 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, tools that only perform code highlighting son rightout.

También estoy no 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.

+0

wiki de la comunidad? – skaffman

+1

Hice algo que es un Helios independiente (Eclipse 3.6) que solo formatea el código. Es <13 MB, solo Java. http://openmrs-mailing-list-archives.1560443.n2.nabble.com/cross-platform-cross-IDE-code-formatting-I-believe-it-is-doable-and-halfway-there-td5522493. html # a5522493 –

Respuesta

25

Jindent (Comercial) hace lo que quiere:

http://www.jindent.com/

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

http://jalopy.sourceforge.net/

EDIT: 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 mirar a Jacobé 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 verde:

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

+0

¿Cuál es la relación entre el código abierto Jalopy y este: http://www.triemax.com/products/jalopy/ –

+0

Parece que el proyecto de código abierto está muerto y han decidido ir con un comercial versión - producida por Triemax. Ha pasado mucho tiempo desde que usé Jalopy, creo que fue con Ant. Eche un vistazo a Jacobe en su lugar. – Jon

+0

Jacobe no se está actualizando para Java 7, y TIOBE dice que nunca lo será. –

6

Jalopy pueden 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)

+1

up vote for Astyle –

+0

Downvoted why? –

1

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

+0

Al presionar la pestaña cuando se selecciona cualquier parte del código, se formateará la selección. DrJava también es una buena pestaña interactiva (como el intérprete). – dansalmo

0

También utilicé mucho el PrettyPrinter incrustado dentro de 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 la tecnología de código abierto jalopy.

14

También puede ejecutar el reformateador de Eclipse desde la línea de comandos. Salida this blog entry

4

ACTUALIZACIÓN: Por mi nueva comprensión sobre la base de un informe de error incorrecto Archivé: https://bugs.eclipse.org/bugs/show_bug.cgi?id=325289 El archivo OpenMRSFormatter.xml realidad tiene que haber un archivo de preferencias y no un archivo XML.

Puede encontrar un archivo de este tipo aquí: https://bugs.eclipse.org/bugs/attachment.cgi?id=178874

o convertir cualquier archivo XML exportado con formateador: formatter.xml gato | configuración de grep | sed 's/@@'> formateador.asprefs

Gracias Misha


Aquí hay algo que hice usando Eclipse 3.6 frascos. Es sólo Java-, línea de comandos, y debe ser compatible multiplataforma:

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

No es un script de shell que utiliza un archivo OpenMRSCodeFormatter.xml incluido. El resultado de ejemplo:

[email protected]:~/openmrs-code-formatter$ cat ../Test.java 
public class Test { 



public a() { 
System.out.println("! I did not format this right!"); 
} 



}[email protected]:~/openmrs-code-formatter$ ./format.sh ../Test.java 
Configuration Name: OpenMRSFormatter.xml 
Starting format job ... 
Done. 
cat ../[email protected]:~/openmrs-code-formatter$ cat ../Test.java 
public class Test { 

     public a() { 
       System.out.println("! I did not format this right!"); 
     } 

}[email protected]:~/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é cuánto tiempo permanecerá el enlace, voy a 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.

El contenido del archivo tar son:

[email protected]:~$ 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 

frascos relevantes en el directorio de plugins se toman directamente de Eclipse 3.6 directorio de plugins.

El contenido de config.ini son:

[email protected]:~$ more openmrs-code-formatter/configuration/config.ini 
osgi.bundles=reference\:file\:[email protected]\:start 
org.eclipse.equinox.simpleconfigurator.configUrl=file\:org.eclipse.equinox.simpleconfigurator/bundles.info 
eclipse.application=org.eclipse.jdt.core.JavaCodeFormatter 

format.sh es:

[email protected]:~$ 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 haber suficiente para reproducirse

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

Gracias Misha

0

Ver nuestra Java Formatter de una herramienta que se encarga de todos los dialectos de Java, incluyendo la versión 7.

0

Jalopy no maneja declaraciones como Lista de cosas <MiClase> ... y comentarios de pelusa que comienzan con @

Pude forzarlo a formatear cambiando todas las <MyClass> en LTLTLTMyClassGTGTGT y luego @ en // @ // @ // @ (Simplemente repito LT, GT o // @ para asegurarme de que no Ya existo Luego pude Jalopy, y obviamente tengo que reemplazar todo de nuevo a lo que era.

Además, antes de cambiar el <o> usted tiene que asegurarse de que no va a cambiar compara como < = o = > etc.

así, es posible llamar a esto la solución 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í.

Cuestiones relacionadas