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


J'ai du code Java avec des instructions SQL écrites en tant que chaînes Java (s'il vous plaît pas de OR / M flamewars, le SQL embarqué est ce qu'il est - pas ma décision).

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. Donc, 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 requêtes plus volumineuses. Par exemple, je peux mettre mon éditeur en mode "overwrite" et modifier le texte sur 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 jolie imprimante.

Maintenant, certains membres du projet utilisent l'éditeur Eclipse et la mise en forme sémantique est souvent détruite lorsqu'ils formatent un fichier source entier.

Existe-t-il un moyen d'indiquer à 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 aussi:

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

De toute évidence, une "solution" consiste à faire normaliser les membres de notre équipe Guimbarde ou JIndent, mais ce n'est pas ce que cette question concerne (aussi, pas ma décision sur ce projet): Je suis spécifiquement à la recherche d'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 obliger les membres de l'équipe à utiliser Eclipse pour effectuer une reconfiguration IDE (autre que de choisir éventuellement un commentaire de commande agnostic de formateur: STOP-ECLIPSE-FORMATTING → STOP-FORMATTING).


434
2017-11-30 16:38


origine


Réponses:


Eclipse 3.6 vous permet de désactiver la mise en forme en plaçant un commentaire spécial, comme

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

Les fonctionnalités on / off doivent être activées dans les préférences Eclipse: Java  > Style de code > Formatter. Cliquer sur modifier, Étiquettes off / on, activer Activer les tags Off / On.

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

Plus d'information

Java  > Style de code  > Formatter  > modifier  > Étiquettes off / on

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

enter image description here

Vous devez également activer les drapeaux de Formatage Java


780
2017-07-28 14:17



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

Sinon il y a ce hack moche

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

57
2017-11-30 16:48



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

Propriétés → Style de code Java → Formatter → Activer les paramètres spécifiques au projet OU Configurer les paramètres de l'espace de travail → Édition → Habillage de ligne (onglet) → Cochez la case «Ne jamais joindre des lignes déjà enveloppées»

Enregistrer, appliquer.

enter image description here


22
2017-07-31 14:30



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. Utilisation /*- (Notez le tiret) au début du commentaire de 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
 */

La source: Documentation chez Oracle.


17
2018-04-11 15:01



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

 les fenêtres  →  Préférences  Java  →  Style de code  →  Formatter

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


16
2017-08-17 18:06



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

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

14
2017-11-30 16:50



J'utilise des parties de chaîne de largeur fixe (complétées avec 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 lorsque les espaces ne sont pas ignorés comme dans SQL, mais peuvent être utiles.

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

5
2017-07-16 11:17



Terminez chacune des lignes avec une double barre oblique "//". Cela empêchera Eclipse de les déplacer tous sur la même ligne.


5
2017-07-23 02:12



Méthode alternative: Dans Eclipse 3.6, sous "Line Wrapping" puis "General Settings", il y a une option "Ne jamais rejoindre les lignes déjà enveloppées". Cela signifie que le formateur va envelopper les longues lignes, mais ne pas annuler tout emballage que vous avez déjà.


4
2018-04-16 17:10



@xpmatteo a la réponse à la désactivation des portions de code, mais en plus de cela, les paramètres d'éclipse par défaut doivent être définis pour ne formater que les lignes de code édité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 changé. C'est une bonne pratique pour éviter les problèmes qui rendent le contrôle diff sur votre source inutilisable (lorsqu'un fichier entier est reformaté en raison de différences mineures de réglage de format).

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


4
2017-08-15 15:02



Les commentaires fantômes, en ajoutant // où vous voulez de nouvelles lignes, sont super!

  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 beau Google Java Format

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

  4. En fait, vous voulez probablement le formatage droite? Vous souhaitez supprimer les espaces mixtes de tabulation / espace et 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!


0
2018-06-01 19:45