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


J'ai du code Java avec des instructions SQL écrites sous forme de chaînes Java (veuillez ne pas OU/M flamewars, le SQL intégré est ce qu'il est - pas ma décision).

J'ai cassé les instructions SQL sémantiquement 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 (À mon humble avis), en particulier pour les requêtes plus importantes. Par exemple, j' peut 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 les constructions tabulaires, est susceptible d'être détruit par une jolie imprimante.

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

Est-il un moyen de demandez à Eclipse d'ignorer certaines lignes de source en ce qui concerne le formatage?

Je cherche quelque chose comme un commentaire spécial qui bascule 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
String query =
    "SELECT FOO, BAR, BAZ" +
    "  FROM ABC          " +
    " WHERE BAR > 4      ";
// START-ECLIPSE-FORMATTING

Évidemment, une "solution" consiste à faire standardiser les membres de notre équipe sur un formateur externe comme Jalopy ou JIndent, mais ce n'est pas ça cette question concerne (aussi, pas ma décision sur 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 nécessiter que les membres de l'équipe utilisant Eclipse fassent une reconfiguration ID (autre que de choisir éventuellement un commentaire de commande agnostique formatter: STOP-ECLIPSE-FORMATTINGSTOP-FORMATTING).

Author: msrd0, 2009-11-30

12 answers

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

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

On/off caractéristiques doivent être réglé sur "on" dans les préférences d'Eclipse: Java > Code de Style > Formateur. Cliquez sur Modifier, Off/on des Balises, activer Activer/Désactiver les balises.

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

Plus Informations

Java > Style de code > Formateur > Modifier > /Désactiver Les Balises

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

entrez la description de l'image ici

Vous devez également activer les indicateurs de Java Formatage

 791
Author: xpmatteo, 2016-04-11 13:06:05

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

Sinon il y a ce hack laid

String query = //
    "SELECT FOO, BAR, BAZ" + //
    "  FROM ABC"           + //
    " WHERE BAR > 4";
 58
Author: jitter, 2009-11-30 16:48:29

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

Properties → Java Code Style → Formatter → Activer les paramètres spécifiques au projet OU Configurer les Paramètres de l'espace de travail → Edit → Line Wrapping (tab) → cochez "Ne jamais joindre les lignes déjà encapsulées"

Enregistrer, appliquer.

entrez la description de l'image ici

 22
Author: ilinca, 2014-07-31 14:30:29

Voir cette réponse sur DONC.

Il existe une autre solution que vous pouvez utiliser pour supprimer le formatage 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 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 d'Oracle.

 21
Author: Renaud, 2017-05-23 12:10:47

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

Fenêtres Préférences Java Style de code Formateur

Appuyez sur la Modifier bouton. Choisissez le dernier onglet. Notez la case Marche/Arrêt et activez-les avec une case à cocher.

 16
Author: ZilWerks, 2015-12-16 00:10:55

Si vous mettez le signe plus au début de la ligne, il se formate différemment:

String query = 
    "SELECT FOO, BAR, BAZ" 
    +    "  FROM ABC"           
    +    " WHERE BAR > 4";
 14
Author: CPerkins, 2017-12-29 22:35:01

J'utilise des parties de chaîne à 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 lorsque les espaces ne sont pas ignorés comme dans SQL, mais peut être utile.

    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
Author: Guus, 2010-07-16 11:17:51

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

 5
Author: Evvo, 2016-07-23 02:12:17

Méthode alternative: Dans Eclipse 3.6, sous "Line Wrapping" puis "General Settings", il y a une option pour "Never join already wrapped lines."Cela signifie que le formateur enveloppera de longues lignes mais n'annulera aucun emballage que vous avez déjà.

 4
Author: kmccoy, 2011-04-16 17:10:48

@xpmatteo a la réponse à la désactivation de parties de code, mais en plus de cela, les paramètres eclipse par défaut doivent être définis pour formater uniquement 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é cela de se produire en premier lieu puisque vos collègues reformatent du code qu'ils n'ont pas réellement changé. C'est une bonne pratique pour éviter les mésaventures qui rendent inutile le diff sur votre contrôle source (lorsqu'un fichier entier est reformaté à cause de mineur différences de réglage du format).

Cela empêcherait également le reformatage si l'option on/off tags était désactivée.

 4
Author: Robin, 2012-08-15 15:02:10

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. Le code ne devrait, à mon avis, jamais avoir de telles références.

  2. Les commentaires fantômes (//) fonctionneront quel que soit l'outil de formatage utilisé. Quel que soit Eclipse ou InteliJ ou quel que soit l'éditeur que vous utilisez. Cela fonctionne même avec le très beau format Java de Google

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

  4. En fait, vous voulez probablement formater non? Vous souhaitez supprimer l'onglet/espace mixte et les espaces de fin. Vous souhaitez indenter les lignes selon la norme de code. Ce que vous ne voulez pas est une longue ligne. Cela, et seulement cela, est ce que le commentaire fantôme donne vous!

 1
Author: Tomas Bjerre, 2018-07-26 19:18:46

Ce hack fonctionne:

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

Je suggère de ne pas utiliser le formateur. Un mauvais code devrait avoir l'air mauvais et non artificiellement bon. Un bon code prend du temps. Vous ne pouvez pas tricher sur la qualité. Le formatage fait partie de la qualité du code source.

 -3
Author: Thomas Jung, 2009-11-30 16:55:03