Estoy interesado en conocer las opciones disponibles de formateadores de código fuente independientes de alta calidad para Java.
El formateador debe ser autónomo, es decir, debe admitir un modo "por lotes" que esté desacoplado de cualquier entorno de desarrollo en particular . Idealmente, también debería ser independiente de cualquier sistema operativo en particular . Por lo tanto, un formateador incorporado para el IDE del día es de poco interés aquí (a menos que el IDE admita la invocación del formateador en modo por lotes, quizás desde la línea de comandos). Un formateador escrito en C / C ++ de código cerrado que solo se ejecuta, digamos, en 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 modificar el diseño del código como cambiar el espacio en blanco u organizar import
declaraciones. Se realiza muy poca o ninguna otra refactorización. Un verificador de estilo también aplica reglas de estilo, pero simplemente informa violaciones de reglas sin producir código fuente modificado como salida. Entonces la imagen se ve así:
Formateador (produce código fuente modificado que se ajusta a las reglas de estilo)
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 infracciones de reglas
Más aclaraciones
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 propósito general escrita en Java que pueda imprimir muchas cosas. Quiero diseñar el código Java.
También estoy no necesariamente interesado en un formateador-grand unificada para muchos idiomas. Supongo que sería bueno que una solución tuviera soporte para lenguajes distintos de Java, pero eso no es un requisito.
Además, las herramientas que sólo realizan el código de relieve son derecho a cabo .
Tampoco estoy interesado en un servicio web. Quiero una herramienta que pueda ejecutar localmente.
Finalmente, las soluciones no necesitan limitarse a código abierto, dominio público, shareware, software libre, comercial o cualquier otra cosa. Se aceptan todas las formas de concesión de licencias .
fuente
Respuestas:
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 antiguo y no parece haber ninguna actualización reciente. No estoy muy seguro de si funcionará con Java 5/6. Quizás quieras mirar 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
fuente
También puede ejecutar el reformateo de Eclipse desde la línea de comandos.
Aquí está la documentación de Eclipse de la función
Primero debe crear un archivo de configuración específico para su proyecto de la configuración del formateador de código Java.
Luego, guárdelo
{projectDirectory}/.settings/org.eclipse.jdt.core.prefs
en otra ubicación.Ahora llamarás al formateador.
"c:\path\to\eclipse\eclipse.exe" -vm "C:\path\to\jdk\bin\java.exe" -application org.eclipse.jdt.core.JavaCodeFormatter -config "c:\path\to\org.eclipse.jdt.core.prefs" "C:\path\to\your\src"
[ADVERTENCIA] Esto parece haber dejado de funcionar en Eclipse 2018. Use Eclipse Oxygen.
fuente
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 a formatear Java / C / C ++ y puede ser controlado por lotes (a través de scripts de shell o similares)
fuente
ACTUALIZACIÓN: Según mi nuevo conocimiento basado en un informe de error incorrecto que presenté: 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 un archivo de este tipo aquí: https://bugs.eclipse.org/bugs/attachment.cgi?id=178874
o convierta cualquier archivo de formato XML exportado con: cat formatter.xml | ajuste grep | sed 's / @@'> formatter.asprefs
Gracias misha
Aquí hay algo que hice usando frascos Eclipse 3.6. Es solo 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. La salida de 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 la publicación aquí: http://www.peterfriese.de/formatting-your-code-using-the-eclipse-code-formatter/
Como no sé cuánto tiempo permanecerá activo el enlace, describiré el contenido a continuación.
Esto se basa en la distribución de Eclipse 3.6 Helios. Usé el de Linux x86, pero debería funcionar para cualquier versión, ya que no usé ningún archivo JAR específico de la plataforma (que yo sepa).
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 jar relevantes en el directorio de complementos se toman directamente del directorio de complementos 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 reproducirse.
Un proyecto interesante basado en el mismo concepto se encuentra aquí: http://code.google.com/p/maven-java-formatter-plugin/
Gracias misha
fuente
Prueba el "Embellecedor de código Jacobe":
http://www.tiobe.com/index.php/content/products/jacobe/Jacobe.html
La edición personal es gratuita.
fuente
Solía usar Dr. Java para codificar y con una rápida pestaña ctrl + A + lo formatea todo muy bien con resaltado de sintaxis. Lo he usado en Mac y Windows, no sé si son compatibles con Linux. Y es de código abierto, independiente y gratuito.
fuente
También usé mucho PrettyPrinter incrustado dentro de JRefactory ( http://jrefactory.sourceforge.net/ ). Lo descubrí a través de su complemento para JEdit. Lo aprecié porque tenía la mejor cobertura de javadoc que jamás haya visto.
Desafortunadamente, parece muerto (sin evolución desde 2004) y en realidad no es compatible con Java5.
Por cierto, confirmo que Triemax es una suite comercial basada en Jalopy de código abierto muerto.
fuente
Consulte nuestro Formateador de Java para obtener una herramienta que maneja todos los dialectos de Java, incluida la versión 7.
fuente
Jalopy no maneja declaraciones como List stuff <MyClass> ... y comentarios de lint que comienzan con @
He podido forzarlo a formatear cambiando todos los <MyClass> a LTLTLTMyClassGTGTGT y luego @ a // @ // @ // @ (solo repito LT, GT o // @ para asegurarme de que no Ya existen. Entonces pude hacer Jalopy, y obviamente tengo que reemplazar todo de nuevo a lo que era.
Además, antes de cambiar <o>, debe asegurarse de no cambiar comparaciones como <= o> =, etc.
Entonces, podría llamar a esto la solución del 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 por mí.
fuente