Comment désactiver le formateur de code Eclipse pour certaines sections du code Java?

J’ai du code Java avec des instructions SQL écrites sous forme de chaînes Java (merci de ne pas utiliser de firewars OR / M, le SQL embarqué est ce qu’il est – pas ma décision).

J’ai décomposé les instructions SQL sémantiquement en plusieurs chaînes concaténées sur plusieurs lignes de code pour en faciliter la maintenance. Donc, au lieu de quelque chose comme:

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

J’ai quelque chose comme:

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

Ce style rend le SQL beaucoup plus facile à lire et à maintenir (IMHO), en particulier pour les requêtes plus volumineuses. Par exemple, je peux mettre mon éditeur en mode “écraser” et modifier le texte en place assez facilement.

Notez que ce problème se généralise au-delà de l’exemple particulier de SQL. Tout code écrit avec une mise en forme verticale, en particulier des constructions tabulaires, est susceptible d’être détruit par une imprimante de bonne taille.

Maintenant, certains membres du projet utilisent l’éditeur Eclipse et la mise en forme sémantique est souvent détruite lors du formatage d’un fichier source complet.

Y a-t-il un moyen de demander à Eclipse d’ignorer certaines lignes de source en ce qui concerne le formatage?

Je cherche quelque chose comme un commentaire spécial qui permute le formateur Eclipse. Idéalement, un tel commentaire pourrait être configurable pour être ce que nous choisissons, et d’autres formateurs pourraient être programmés pour le respecter également:

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

De toute évidence, une des “solutions” consiste à faire en sorte que les membres de notre équipe normalisent certains formateurs externes comme Jalopy ou JIndent , mais ce n’est pas ce dont il est question (pas plus que ma décision sur ce projet): évitez le formateur Eclipse sur une base ad hoc.

Idéalement, une solution me permettra d’insérer des instructions pour le formateur Eclipse sans exiger que les membres de l’équipe utilisant Eclipse effectuent une reconfiguration IDE (autre que de choisir un commentaire de commande agnostique: STOP-ECLIPSE-FORMATTINGSTOP-FORMATTING ).

Eclipse 3.6 vous permet de désactiver le formatage en plaçant un commentaire spécial, comme

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

Les fonctions d’activation / désactivation doivent être activées dans les préférences Eclipse: Java > Style de code > Formateur . Cliquez sur Modifier , Désactiver / Activer les balises , activez l’ option Activer les balises Off / On .

Il est également possible de modifier les chaînes magiques dans les préférences – consultez le document Eclipse 3.6 ici .

Plus d’information

Java > Style de code > Formateur > Modifier > Off / On Tags

Cette préférence vous permet de définir une balise à désactiver et une balise pour activer le formateur (voir l’onglet Balises désactivées / activées dans votre profil de formateur):

entrer la description de l'image ici

Vous devez également activer les indicateurs de Java Formatting

AFAIK à partir d’Eclipse 3.5 M4 sur le formateur dispose d’une option “Never Join Lines” qui préserve les sauts de lignes utilisateur. Peut-être que ça fait ce que vous voulez.

Sinon il y a ce hack moche

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

Au lieu de désactiver le formatage, vous pouvez le configurer pour ne pas joindre les lignes déjà encapsulées. Semblable à la réponse de Jitter, voici pour Eclipse STS:

Propriétés → Style de code Java → Formateur → Activer les parameters spécifiques au projet OU Configurer les parameters de l’espace de travail → Modifier → Habillage (onglet) → cocher “Ne jamais joindre les lignes déjà encapsulées”

Enregistrer, appliquer.

entrer la description de l'image ici

Voir cette réponse sur SO .

Il existe une autre solution que vous pouvez utiliser pour supprimer la mise en forme de commentaires de bloc spécifiques. Utilisez /*- (notez le trait d’union) au début du commentaire de bloc, et le formatage ne sera pas affecté si vous formatez le rest du fichier.

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

Source: Documentation chez Oracle .

Vous devez activer la possibilité d’append les balises de formatage. Dans la barre de menus, allez à:

Windows Préférences Java Style de code Formateur

Appuyez sur le bouton Modifier . Choisissez le dernier onglet. Notez la case On / Off et activez-les avec une case à cocher.

Si vous placez le signe plus au début de la ligne, cela formate différemment:

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

J’utilise des parties de chaîne de largeur fixe (complétées par des espaces) pour éviter que le formateur ne gâche mon indentation de chaîne SQL. Cela vous donne des résultats mitigés et ne fonctionnera pas là où les espaces ne sont pas ignorés comme dans SQL, mais peuvent être utiles.

  final Ssortingng 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 "; 

Terminez chacune des lignes par une double barre oblique “//”. Cela empêchera l’éclipse de les déplacer tous sur la même ligne.

Autre méthode: dans Eclipse 3.6, sous “Line Wrapping” puis “General Settings”, il existe une option pour “Ne jamais joindre des lignes déjà encapsulées”. Cela signifie que le formateur encapsulera les longues lignes mais ne défaquera aucun emballage que vous avez déjà.

@xpmatteo a la réponse à la désactivation de portions de code, mais en plus de cela, les parameters d’éclipse par défaut doivent être définis pour ne mettre en forme que les lignes de code modifiées au lieu du fichier entier.

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

Cela aurait empêché que cela se produise en premier lieu puisque vos collègues reformatent le code qu’ils n’ont pas réellement modifié. C’est une bonne pratique pour éviter les incidents qui rendent inutile la diff sur votre contrôle de code source (lorsqu’un fichier entier est reformaté en raison de différences mineures entre les formats).

Cela empêcherait également le reformatage si l’option des balises d’activation / désactivation était désactivée.

Les commentaires fantômes, ajoutant // où vous voulez de nouvelles lignes, sont géniaux!

  1. Le @formatter: off ajoute une référence du code à l’éditeur. À mon avis, le code ne devrait jamais avoir de telles références.

  2. Les commentaires fantômes (//) fonctionneront quel que soit l’outil de formatage utilisé. Indépendamment d’Eclipse ou d’InteliJ ou de n’importe quel éditeur que vous utilisez. Cela fonctionne même avec le très bon format Java de Google

  3. Les commentaires fantômes (//) fonctionneront partout dans votre application. Si vous avez également Javascript et peut-être utiliser quelque chose comme JSBeautifier . Vous pouvez avoir un style de code similaire dans Javascript.

  4. En fait, vous souhaitez probablement un formatage correct? Vous souhaitez supprimer les espaces mixtes, les espaces et les espaces de fin. Vous voulez indenter les lignes conformément à la norme de code. Ce que vous ne voulez pas, c’est une longue file. C’est ce que le commentaire fantôme vous donne!

Ce hack fonctionne:

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

Je suggère de ne pas utiliser le formateur. Un code incorrect doit avoir une mauvaise apparence, pas artificiellement bon. Un bon code prend du temps. Vous ne pouvez pas sortingcher sur la qualité. Le formatage fait partie de la qualité du code source.