web-dev-qa-db-fra.com

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 la forme de chaînes Java (veuillez ne pas utiliser OR/M flamewars, le code SQL incorporé est ce qu'il est - pas ma décision).

J'ai divisé 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 facilite beaucoup la lecture et la maintenance du code SQL (IMHO), en particulier pour les requêtes plus volumineuses. Par exemple, je peux mettre mon éditeur en mode "écrasement" 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 un formatage vertical, en particulier des constructions tabulaires, est susceptible d’être détruit par une jolie imprimante.

Désormais, 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 complet.

Y at-il un moyen de demander à Eclipse d’ignorer certaines lignes de la 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 celui que nous choisissions, 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" est de faire en sorte que les membres de notre équipe adoptent une approche standard sur un formateur externe tel que Jalopy ou JIndent , mais ce n’est pas le propos de cette question (ni 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 demander aux membres de l’équipe d’utiliser Eclipse pour effectuer toute reconfiguration IDE ( autre que le choix éventuel d’un commentaire de commande sans fonction de formateur: STOP-Eclipse-FORMATTINGSTOP-FORMATTING).

469
Greg Mattes

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

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

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

Il est également possible de changer les chaînes magiques dans les préférences - consultez la documentation 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 à désactiver et une balise à activer le formateur (voir l'onglet Balises désactivées/activées dans votre profil de formateur):

enter image description here

Vous devez également activer les drapeaux de Java Formatting

838
xpmatteo

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

Sinon il y a ce bidule laid

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

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 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 sur Oracle .

24
Renaud

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

Propriétés → Java Style de code → Formateur → Activer les paramètres spécifiques au projet OR Configurer les paramètres de l'espace de travail → Édition → Retour à la ligne (onglet) → cochez la case "Ne jamais joindre les lignes déjà enroulées"

Enregistrer, appliquer.

enter image description here

23
ilinca

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

WindowsPreferencesJavaCode StyleFormatter

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

16
ZilWerks

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

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

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

5
Evvo

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 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 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
Guus

Méthode alternative: Dans Eclipse 3.6, sous "Entourage de ligne", puis "Paramètres généraux", vous avez la possibilité de "Ne jamais joindre les lignes déjà bouclées". Cela signifie que le formateur mettra les longues lignes à la ligne, sans annuler celles que vous avez déjà.

4
kmccoy

@xpmatteo a la solution pour désactiver des 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 l'aurait empêché en premier lieu puisque vos collègues reformatent du code qu'ils n'ont pas réellement changé. Ceci est une bonne pratique pour éviter les incidents qui rendent inutilisables les différences sur votre contrôle de code source (lorsqu'un fichier entier est reformaté en raison de différences mineures de paramètres de format).

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

4
Robin

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 l'éditeur que vous utilisez. Cela fonctionne même avec le très Nice Google Java Format

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

  4. En fait, vous voulez probablement que le formatage soit correct? Vous voulez supprimer les espaces mixtes tabulation/espace et fin. Vous souhaitez mettre les lignes en retrait conformément à la norme de code. Ce que vous ne voulez pas, c'est une longue ligne. C'est ce que le commentaire fantôme vous donne!

1
Tomas Bjerre