it-swarm.com.de

Wie kann ich den Eclipse-Code-Formatierer für bestimmte Abschnitte von Java Code deaktivieren?

Ich habe einen Java - Code mit SQL - Anweisungen geschrieben als Java - Zeichenfolgen (bitte keine OR/M - Flamewars, das eingebettete SQL ist das, was es ist - nicht mein Entscheidung).

Ich habe die SQL-Anweisungen semantisch in mehrere verkettete Zeichenfolgen über mehrere Codezeilen aufgeteilt, um die Wartung zu vereinfachen. Also anstelle von etwas wie:

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

Ich habe so etwas wie:

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

Dieser Stil erleichtert das Lesen und Verwalten von SQL (IMHO), insbesondere bei größeren Abfragen. Zum Beispiel kann ich meinen Editor in den "Überschreib" -Modus versetzen und den Text ziemlich einfach an Ort und Stelle ändern.

Beachten Sie, dass dieses Problem über das spezielle Beispiel von SQL hinausgeht. Jeder Code, der mit einer vertikalen Formatierung geschrieben wurde, insbesondere tabellarische Konstrukte, kann von einem hübschen Drucker zerstört werden.

Einige Projektmitglieder verwenden jetzt den Eclipse-Editor und die semantische Formatierung wird häufig zerstört, wenn sie eine gesamte Quelldatei formatieren.

Gibt es eine Möglichkeit, Eclipse anzuweisen, bestimmte Quellenzeilen in Bezug auf die Formatierung zu ignorieren?

Ich suche so etwas wie einen speziellen Kommentar, der den Eclipse-Formatierer umschaltet. Im Idealfall kann ein solcher Kommentar so konfiguriert werden, dass er beliebig gewählt wird, und andere Formatierer können so programmiert werden, dass sie ihn ebenfalls berücksichtigen:

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

Offensichtlich besteht eine "Lösung" darin, unsere Teammitglieder auf externe Formatierer wie Jalopy oder JIndent standardisieren zu lassen, aber darum geht es in dieser Frage nicht (auch nicht um meine Entscheidung) zu diesem Projekt): Ich suche speziell nach einer Möglichkeit, den Eclipse-Formatierer ad-hoc zu umgehen.

Im Idealfall kann ich mithilfe einer Lösung Anweisungen für den Eclipse-Formatierer einfügen, ohne dass Teammitglieder mit Eclipse IDE Neukonfiguration (außer möglicherweise einen Kommentar zum Formatierer-Agnostic-Befehl zu wählen: STOP-Eclipse-FORMATTINGSTOP-FORMATTING).

469
Greg Mattes

Mit Eclipse 3.6 können Sie die Formatierung deaktivieren, indem Sie einen speziellen Kommentar einfügen, z

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

Die Ein/Aus-Funktionen müssen in den Eclipse-Einstellungen aktiviert sein: Java>Code Style>Formatter. Klicke auf EditOff/On Tags, aktivieren Enable Off/On tags.

Es ist auch möglich, die magischen Zeichenfolgen in den Einstellungen zu ändern - siehe die Eclipse 3.6-Dokumentation hier .

Weitere Informationen

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

Mit dieser Voreinstellung können Sie ein Tag zum Deaktivieren und ein Tag zum Aktivieren des Formatierers definieren (siehe Registerkarte Aus/Ein-Tags in Ihrem Formatiererprofil):

enter image description here

Sie müssen auch die Flags von aktivieren Java Formatting

838
xpmatteo

AFAIK von Eclipse 3.5 M4 auf dem Formatierer verfügt über die Option "Niemals Zeilen verbinden", mit der Benutzerzeilenumbrüche beibehalten werden. Vielleicht macht das was du willst.

Sonst gibt es diesen hässlichen Hack

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

Siehe diese Antwort auf SO .

Es gibt eine andere Lösung, mit der Sie die Formatierung bestimmter Blockkommentare unterdrücken können. Verwenden /*- (beachten Sie den Bindestrich) am Anfang des Blockkommentars, und die Formatierung wird nicht beeinflusst, wenn Sie den Rest der Datei formatieren.

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

Quelle: Dokumentation bei Oracle .

24
Renaud

Anstatt die Formatierung zu deaktivieren, können Sie sie so konfigurieren, dass bereits umbrochene Zeilen nicht verbunden werden. Ähnlich wie bei Jitters Antwort hier für Eclipse STS:

Eigenschaften → Java Codestil → Formatierer → Projektspezifische Einstellungen aktivieren OR Arbeitsbereicheinstellungen konfigurieren → Bearbeiten → Zeilenumbruch (Registerkarte) → Häkchen "Niemals bereits umbrochene Zeilen verbinden" "

Speichern, anwenden.

enter image description here

23
ilinca

Sie müssen die Fähigkeit aktivieren, die Formatierungs-Tags hinzuzufügen. In der Menüleiste gehen Sie zu:

WindowsPreferencesJavaCode StyleFormatter

Drücken Sie die Edit Taste. Wählen Sie die letzte Registerkarte. Beachten Sie das Ein/Aus-Feld und aktivieren Sie es mit einem Kontrollkästchen.

16
ZilWerks

Wenn Sie das Pluszeichen an den Zeilenanfang setzen, wird es anders formatiert:

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

Beenden Sie jede Zeile mit einem doppelten Schrägstrich "//". Dadurch wird Eclipse daran gehindert, sie alle auf dieselbe Linie zu verschieben.

5
Evvo

Ich verwende Zeichenfolgenteile mit fester Breite (mit Leerzeichen aufgefüllt), um zu vermeiden, dass der Formatierer meinen SQL-Zeichenfolgeneinzug durcheinanderbringt. Dies führt zu gemischten Ergebnissen und funktioniert nicht, wenn Leerzeichen nicht wie in SQL ignoriert werden, kann aber hilfreich sein.

    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

Alternative Methode: In Eclipse 3.6 gibt es unter "Zeilenumbruch" unter "Allgemeine Einstellungen" die Option "Bereits umbrochene Zeilen niemals verbinden". Dies bedeutet, dass der Formatierer lange Zeilen umbricht, aber keinen bereits vorhandenen Umbruch rückgängig macht.

4
kmccoy

@xpmatteo hat die Antwort auf das Deaktivieren von Codeteilen. Darüber hinaus sollten die Standardeinstellungen für Eclipse so festgelegt werden, dass nur bearbeitete Codezeilen anstelle der gesamten Datei formatiert werden.

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

Dies hätte es von vornherein verhindert, da Ihre Mitarbeiter den Code neu formatieren, den sie eigentlich nicht geändert haben. Dies ist eine gute Vorgehensweise, um Pannen zu vermeiden, durch die Unterschiede in der Quellcodeverwaltung unbrauchbar werden (wenn eine gesamte Datei aufgrund geringfügiger Unterschiede bei den Formateinstellungen neu formatiert wird).

Es würde auch die Neuformatierung verhindern, wenn die Option "Ein/Aus-Tags" deaktiviert wäre.

4
Robin

Das Phantom kommentiert und fügt // wo Sie neue Zeilen wollen, sind großartig!

  1. Das @ formatter: off fügt dem Editor eine Referenz aus dem Code hinzu. Der Code sollte meiner Meinung nach niemals solche Referenzen haben.

  2. Die Phantomkommentare (//) funktionieren unabhängig vom verwendeten Formatierungswerkzeug. Unabhängig von Eclipse oder InteliJ oder dem von Ihnen verwendeten Editor. Dies funktioniert sogar mit dem sehr Nizza Google Java Format

  3. Die Phantomkommentare (//) funktionieren in Ihrer gesamten Anwendung. Wenn Sie auch Javascript haben und vielleicht etwas wie JSBeautifier verwenden. Sie können ähnliche Codestile auch in Javascript verwenden.

  4. Eigentlich möchten Sie wahrscheinlich die Formatierung richtig? Sie möchten gemischte Tabulatoren/Leerzeichen und nachfolgende Leerzeichen entfernen. Sie möchten die Zeilen gemäß dem Codestandard einrücken. Was Sie NICHT wollen, ist eine lange Schlange. Das und nur das gibt Ihnen der Phantomkommentar!

1
Tomas Bjerre