527 votes

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

J'ai du code Java avec des instructions SQL écrites sous forme de chaînes Java (s'il vous plaît, pas de querelles OR/M, le SQL intégré est ce qu'il est - ce n'est pas moi qui décide).

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

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

J'ai quelque chose comme :

String 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 grandes requêtes. Par exemple, je peux mettre mon éditeur en mode "overwrite" et modifier le texte sur place assez facilement.

Notez que cette question dépasse l'exemple particulier de SQL. Tout code écrit avec un quelconque formatage vertical, en particulier les constructions tabulaires, est susceptible d'être détruit par une jolie imprimante.

Or, certains membres du projet utilisent l'éditeur Eclipse et le formatage sémantique est souvent détruit lorsqu'ils formatent un fichier source entier.

Existe-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 permette d'activer le formateur Eclipse. Idéalement, un tel commentaire pourrait être configuré pour être ce que nous choisissons, et d'autres formateurs pourraient être programmés pour le respecter également :

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

Évidemment, une "solution" consiste à faire en sorte que les membres de notre équipe se standardisent sur un formateur externe tel que Jalopy ou JIndent mais ce n'est pas l'objet de cette question (et ce n'est pas non plus ma décision concernant ce projet) : Je cherche spécifiquement un moyen d'éviter le formateur Eclipse sur une base ad-hoc.

Idéalement, une solution me permettra d'insérer des instructions pour le formateur Eclipse sans que les membres de l'équipe utilisant Eclipse n'aient à reconfigurer l'IDE. (autre que le choix éventuel d'un commentaire de commande agnostique pour le formateur : STOP-ECLIPSE-FORMATTINGSTOP-FORMATTING ).

1 votes

Nous avons eu ce problème. Eclipse devrait disposer d'une option permettant de toujours rompre une ligne dans un constructeur de chaîne à l'endroit où se trouve un +, indépendamment du fait que la partie suivante de la chaîne tienne sur la ligne. Mais ce n'est pas le cas. :-(

0 votes

Apparemment, cette fonctionnalité a été ajoutée dans Eclipse 3.6M6 : bugs.eclipse.org/bugs/show_bug.cgi?id=27079

0 votes

Remarque : si vous voulez simplement empêcher Eclipse de mélanger vos commentaires, vous pouvez utiliser // devant chaque ligne. Pour commenter un bloc, mettez-le en surbrillance et appuyez sur Ctrl+/.

921voto

xpmatteo Points 4850

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

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

Les fonctions d'activation et de désactivation doivent être activées dans les préférences d'Eclipse : Java > Code Style > Formatter . Cliquez sur Edit , Off/On Tags , permettre Enable Off/On tags .

Il est également possible de changer les chaînes magiques dans les préférences - consultez la documentation d'Eclipse 3.6 ici .

Plus d'informations

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

Cette préférence vous permet de définir une balise pour désactiver et une balise pour activer le formateur (voir l'onglet Balises Off/On dans votre profil de formateur) :

enter image description here

Vous devez également activer les drapeaux de Java Formatting

7 votes

L'option "Ne jamais joindre les lignes", mentionnée ailleurs dans cette page, est également très utile.

94 votes

Les fonctions de marche/arrêt doivent être activées. Dans les préférences d'Eclipse : Java > Style de code > Formateur. Cliquez sur le bouton "Edit", "Off/On Tags", cochez "Enable Off/On tags".

2 votes

Ceci n'est pas disponible dans Préférences de style de code JavaScript où j'ai le problème exactement inverse avec le formatage. :(

63voto

jitter Points 35805

AFAIK à partir d'Eclipse 3.5 M4 le formateur a une option "Never Join Lines" qui préserve les coupures de lignes de l'utilisateur. Peut-être cela fait-il ce que vous voulez.

Sinon, il y a cet affreux hack

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

1 votes

Donc, en plus de l'option "Ne jamais joindre les lignes", je également doivent-ils écrire ces commentaires "fantômes" ? La partie "Ne jamais joindre les lignes" ne devrait-elle pas fonctionner toute seule ?

2 votes

Oui, bien sûr. Les commentaires fantômes sont une approche alternative (au cas où il n'existe pas, ou si vous êtes coincé avec une version antérieure, etc.)

0 votes

J'ai utilisé cette approche en tandem avec un modèle de formatage personnalisé dans TOAD pour me permettre de dépouiller l'ancien SQL du code JAVA, de le reformater et de supprimer tous les commentaires superflus, puis de le réintégrer dans JAVA. C'est pénible, mais cela nous a permis d'auto-formater notre code Java lors de sa sauvegarde. Merci pour cette suggestion !

40voto

Renaud Points 3226

Voir cette réponse sur SO .

Il existe une autre solution que vous pouvez utiliser pour supprimer le formatage de certains commentaires de bloc. Utilisez /*- (notez le trait d'union) au début du commentaire du bloc, et le formatage ne sera pas affecté si vous formatez le reste 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 .

5 votes

C'est la meilleure réponse car elle ne dépend pas de la configuration de l'IDE de l'utilisateur. Merci.

16voto

ZilWerks Points 131

Vous devez activer la possibilité d'ajouter les balises de formatage. Dans la barre de menu, allez dans :

Windows Preferences Java Code Style Formatter

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

14voto

CPerkins Points 5209

Si vous mettez le signe plus au début de la ligne, le format est différent :

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

1 votes

Cela pourrait être un compromis intéressant. En général, j'aimerais éviter de trop modifier le formatage du code en raison du comportement indésirable d'un outil. Dans ce cas, les opérateurs de concaténation de chaînes de caractères sont plus un accident que l'essence de ce qui se passe avec le SQL. C'est pourquoi je préfère les écrire à la fin de chaque ligne. J'ai l'impression que le SQL devrait être mis en avant comme le début de la ligne. Mais c'est peut-être une bonne façon de faire en l'absence d'une solution qui me permette de préserver le formatage que je souhaite. Merci !

8 votes

De rien. En fait, je mets mes signes + en tête de ligne depuis des décennies, et pas pour tromper le formateur. Je les préfère au début, parce que cela rend ce qui se passe plus clair pour moi : ce qui est à la fin d'une ligne est parfois perdu. C'était la norme du projet, quelque part à l'époque où nous utilisions des compilateurs à bois, et cela m'est resté.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X