¿Cómo desactivar el formateador de código Eclipse para ciertas secciones de código Java?

Tengo un código Java con sentencias de SQL escritas como cadenas de Java (por favor, no OR / M flamewars, el SQL incorporado es lo que es, no es mi decisión).

Rompí las declaraciones SQL semánticamente en varias cadenas concatenadas en varias líneas de código para facilitar el mantenimiento. Entonces en lugar de algo como:

String query = "SELECT FOO, BAR, BAZ FROM ABC WHERE BAR > 4"; 

Tengo algo como:

 String query = "SELECT FOO, BAR, BAZ" + " FROM ABC " + " WHERE BAR > 4 "; 

Este estilo hace que SQL sea mucho más fácil de leer y mantener (en mi humilde opinión), especialmente para consultas más grandes. Por ejemplo, puedo poner mi editor en el modo “sobrescribir” y modificar el texto en el lugar con bastante facilidad.

Tenga en cuenta que este problema se generaliza más allá del ejemplo particular de SQL. Cualquier código que se escriba con cualquier formato vertical, particularmente constructos tabulares, es susceptible de ser destruido por una impresora bonita.

Ahora, algunos miembros del proyecto usan el editor Eclipse y el formato semántico a menudo se destruye cuando formatean un archivo fuente completo.

¿Hay alguna manera de ordenar a Eclipse que ignore ciertas líneas de fuente con respecto al formateo?

Estoy buscando algo así como un comentario especial que alterne el formateador Eclipse. Idealmente, dicho comentario podría ser configurable para ser lo que elija, y otros formateadores podrían progtwigrse para respetarlo también:

 // STOP-ECLIPSE-FORMATTING String query = "SELECT FOO, BAR, BAZ" + " FROM ABC " + " WHERE BAR > 4 "; // START-ECLIPSE-FORMATTING 

Obviamente, una “solución” es hacer que los miembros de nuestro equipo se estandaricen en algún formateador externo como Jalopy o JIndent , pero de eso no se trata esta pregunta (tampoco es mi decisión sobre este proyecto): específicamente estoy buscando una forma de evite el formateador Eclipse de forma ad-hoc.

Idealmente, una solución me permitirá insertar instrucciones para el formateador Eclipse sin requerir que los miembros del equipo que usan Eclipse hagan una reconfiguración IDE (que no sea elegir un comentario de comando agnóstico del formateador: STOP-ECLIPSE-FORMATTINGSTOP-FORMATTING ).

Eclipse 3.6 le permite desactivar el formato colocando un comentario especial, como

 // @formatter:off ... // @formatter:on 

Las funciones de encendido / apagado deben activarse en las preferencias de Eclipse: Java > Estilo de código > Formateador . Haga clic en Editar , Apagar / Activar tags , active las tags Activar Desactivado / Activado .

También es posible cambiar las cadenas mágicas en las preferencias; consulte los documentos de Eclipse 3.6 aquí .

Más información

Java > Code Style > Formatter > Edit > Off / On Tags

Esta preferencia le permite definir una etiqueta para deshabilitar y una etiqueta para habilitar el formateador (consulte la pestaña Etiquetas desactivadas / activadas en su perfil de formateador):

enter image description here

También debe habilitar los indicadores del formato Java

AFAIK de Eclipse 3.5 M4 en el formateador tiene una opción “Nunca unir líneas” que preserva los saltos de líneas de usuario. Tal vez eso haga lo que quieras.

De lo contrario, hay este hack feo

 String query = // "SELECT FOO, BAR, BAZ" + // " FROM ABC" + // " WHERE BAR > 4"; 

En lugar de desactivar el formateo, puede configurarlo para que no se una a las líneas ya ajustadas. Similar a la respuesta de Jitter, aquí está para Eclipse STS:

Propiedades → Estilo de código Java → Formateador → Habilitar configuración específica del proyecto O Configurar ajustes del área de trabajo → Editar → Envoltura de línea (pestaña) → marcar “Nunca unirse a líneas ya cerradas”

Guardar, aplicar

enter image description here

Ver esta respuesta en SO .

Hay otra solución que puede usar para suprimir el formateo de comentarios de bloque específicos. Utilice /*- (tenga en cuenta el guion) al comienzo del comentario en bloque, y el formato no se verá afectado si formatea el rest del archivo.

 /*- * Here is a block comment with some very special * formatting that I want indent(1) to ignore. * * one * two * three */ 

Fuente: Documentación en Oracle .

Debe activar la capacidad de agregar las tags del formateador. En la barra de menú vaya a:

Windows Preferencias Java Estilo de código Formateador

Presione el botón Editar . Elige la última pestaña. Observe el cuadro Activar / Desactivar y habilítelos con una checkbox.

Si coloca el signo más al principio de la línea, se formatea de manera diferente:

 String query = "SELECT FOO, BAR, BAZ" + " FROM ABC" + " WHERE BAR > 4"; 

Estoy usando partes de cadena de ancho fijo (rellenas con espacios en blanco) para evitar que el formateador estropee mi sangría de cadena de SQL. Esto le da resultados mixtos, y no funcionará donde no se ignora el espacio en blanco como lo está en SQL, pero puede ser útil.

  final String sql = "SELECT v.value FROM properties p " + "JOIN property_values v ON p.property_id = v.property_id " + "WHERE p.product_id = ? " + "AND v.value IS NOT NULL "; 

Termine cada una de las líneas con una barra doble “//”. Eso evitará que el eclipse los mueva a todos en la misma línea.

Método alternativo: en Eclipse 3.6, debajo de “Ajuste de línea”, luego “Configuración general” existe la opción de “Nunca unir líneas ya envueltas”. Esto significa que el formateador envolverá las líneas largas pero no deshará ningún ajuste que ya tenga.

@xpmatteo tiene la respuesta para deshabilitar partes del código, pero además de esto, las configuraciones de eclipse predeterminadas deben configurarse para formatear solo líneas de código editadas en lugar de todo el archivo.

 Preferences->Java->Editor->Save Actions->Format Source Code->Format Edited Lines 

Esto habría impedido que sucediera, en primer lugar, ya que sus compañeros de trabajo están reformateando el código que en realidad no cambiaron. Esta es una buena práctica para evitar contratiempos que hagan que el diff en el control de origen sea inútil (cuando se reformatea un archivo completo debido a diferencias menores de configuración de formato).

También evitaría el cambio de formato si la opción de tags on / off se desactivó.

Los comentarios fantasmas, agregando // donde quieras nuevas líneas, ¡son geniales!

  1. El @formatter: off agrega una referencia del código al editor. El código debería, en mi opinión, nunca tener tales referencias.

  2. Los comentarios fantasmas (//) funcionarán independientemente de la herramienta de formato utilizada. Independientemente de Eclipse o InteliJ o cualquier editor que use. Esto incluso funciona con el muy agradable formato Google Java

  3. Los comentarios fantasmas (//) funcionarán en toda su aplicación. Si también tiene Javascript y quizás use algo como JSBeautifier . Puede tener un estilo de código similar también en el Javascript.

  4. En realidad, probablemente QUIERES formatear ¿verdad? Desea eliminar el tabulador / espacio mixto y los espacios finales. Desea sangrar las líneas de acuerdo con el estándar del código. Lo que NO deseas es una larga cola. ¡Eso, y solo eso, es lo que te da el comentario fantasma!

Este truco funciona:

 String x = "s" + //Formatter Hack "a" + // "c" + // "d"; 

Sugeriría no usar el formateador. El código incorrecto debería verse mal, no artificialmente bueno. El buen código lleva tiempo. No puedes engañar a la calidad. El formateo es parte de la calidad del código fuente.

Intereting Posts