Pregunta Formateador de código Java autónomo / embellecedor / bonita impresora? [cerrado]


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

El formateador debe ser independiente, es decir, debe admitir una "por lotes es decir desacoplado de cualquier entorno de desarrollo particular. 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 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 u organizar import declaraciones. Se realiza muy poca, si alguna, otra refactorización. Un verificador de estilo también aplica reglas de estilo, pero simplemente informes violaciones a las reglas sin producir código fuente modificado como salida. Entonces la imagen se ve así:

Formateador (produce 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

Comprobador de estilo (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.

También soy no buscando un impresora bonita de propósito general escrita en Java eso puede bastante imprimir muchas cosas. Quiero diseñar un código Java.

También estoy no necesariamente interesado en un formateador grandioso 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, herramientas que solo realizan resaltado de código son derecho  fuera.

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


76
2018-06-15 15:07


origen


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 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


25
2018-06-15 15:11



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


14
2017-07-16 14:36



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

Un estilo 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)


6
2018-06-15 15:12



ACTUALIZACIÓN: según mi nuevo entendimiento basado en incorrecto informe de error 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 archivo XML.

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 la publicación 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


4
2017-09-12 18:20



Prueba "Jacobe Code Beautifier":

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

La edición personal es gratis.


1
2017-08-06 21:43



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


1
2018-06-15 15:15



También usé 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 el jalopy de código abierto muerto.


0
2018-06-15 20:01



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


0
2018-05-05 17:01



Jalopy no maneja declaraciones como List stuff <MyClass> ... 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 existe. Luego pude Jalopy, y obviamente tengo que volver a poner todo en su lugar.

Además, antes de cambiar el <o>, 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í.


0
2017-10-23 15:34