530 Stimmen

Wie schaltet man den Eclipse-Code-Formatierer für bestimmte Abschnitte von Java-Code aus?

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

Ich habe die SQL-Anweisungen semantisch in mehrere verkettete Zeichenketten über mehrere Codezeilen aufgeteilt, um die Wartung zu erleichtern. Anstatt also etwas wie:

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

Ich habe etwas wie:

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

Dieser Stil macht das SQL viel einfacher zu lesen und zu pflegen (IMHO), besonders bei größeren Abfragen. Ich kann zum Beispiel meinen Editor in den "Überschreibmodus" versetzen und den Text an Ort und Stelle recht einfach ändern.

Beachten Sie, dass dieses Problem über das spezielle Beispiel von SQL hinausgeht. Jeder Code, der mit einer vertikalen Formatierung geschrieben wird, insbesondere Tabellenkonstrukte, ist anfällig für die Zerstörung durch einen hübschen Drucker.

Nun verwenden einige Projektmitglieder den Eclipse-Editor und die semantische Formatierung wird oft zerstört, wenn sie eine ganze Quelldatei formatieren.

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

Ich suche so etwas wie einen speziellen Kommentar, der den Eclipse-Formatierer umschaltet. Idealerweise könnte ein solcher Kommentar so konfiguriert werden, dass er so lautet, wie wir es wünschen, und andere Formatierer könnten 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

Eine "Lösung" besteht natürlich darin, dass unsere Teammitglieder einen externen Formatierer wie Vordach o JIndent aber darum geht es in dieser Frage nicht (und auch nicht um meine Entscheidung zu diesem Projekt): Ich bin speziell auf der Suche nach einer Möglichkeit, den Eclipse-Formatierer ad hoc zu umgehen.

Idealerweise erlaubt mir eine Lösung, Anweisungen für den Eclipse-Formatierer einzufügen ohne dass Teammitglieder, die Eclipse verwenden, die IDE neu konfigurieren müssen (abgesehen von der Möglichkeit, einen formatierungsunabhängigen Befehlskommentar zu wählen: STOP-ECLIPSE-FORMATTINGSTOP-FORMATTING ).

14voto

CPerkins Punkte 8819

Wenn Sie das Pluszeichen an den Anfang der Zeile setzen, wird die Zeile anders formatiert:

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

6voto

Evvo Punkte 407

Beenden Sie jede der Zeilen mit einem doppelten Schrägstrich "//". Dadurch wird verhindert, dass Eclipse sie alle in dieselbe Zeile verschiebt.

4voto

Guus Punkte 2846

Ich verwende String-Teile mit fester Breite (aufgefüllt mit Leerzeichen), um zu vermeiden, dass der Formatierer meine SQL-String-Einrückung durcheinander bringt. Dies gibt Sie gemischte Ergebnisse, und wird nicht funktionieren, wo Leerzeichen nicht ignoriert wird, wie es in SQL ist, aber kann 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                          ";

4voto

kmccoy Punkte 2671

Alternative Methode: In Eclipse 3.6 gibt es unter "Line Wrapping" und "General Settings" die Option "Never join already wrapped lines". Das bedeutet, dass der Formatierer zwar lange Zeilen umbricht, aber einen bereits erfolgten Umbruch nicht rückgängig macht.

4voto

Robin Punkte 23622

@xpmatteo hat die Antwort auf die Deaktivierung von Teilen des Codes, aber darüber hinaus sollten die Standardeinstellungen von Eclipse so eingestellt werden, dass nur bearbeitete Codezeilen und nicht die gesamte Datei formatiert werden.

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

Dies hätte verhindert, dass es überhaupt erst dazu kommt, da Ihre Mitarbeiter den Code neu formatieren, den sie eigentlich nicht geändert haben. Dies ist eine gute Praxis, um Missgeschicke zu vermeiden, die Diff in der Versionsverwaltung unbrauchbar machen (wenn eine ganze Datei wegen geringfügiger Unterschiede in den Formateinstellungen umformatiert wird).

Es würde auch die Neuformatierung verhindern, wenn die Option "Tags ein/aus" ausgeschaltet wäre.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X