web-dev-qa-db-ja.com

Javaコードの特定のセクションでEclipseコードフォーマッターをオフにする方法は?

SQLステートメントがJava文字列として書かれたJavaコードをいくつか持っています(OR/Mフレームウォーズはありません。埋め込みSQLはそれです-私の決定ではありません)。

メンテナンスを容易にするために、SQLステートメントを複数のコード行で複数の連結された文字列に意味的に分割しました。したがって、次のようなものの代わりに:

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

私のようなものがあります:

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

このスタイルにより、特に大規模なクエリの場合、SQLの読み取りと保守(IMHO)がはるかに簡単になります。たとえば、エディターを「上書き」モードにして、テキストをその場で簡単に変更できます。

この問題は、SQLの特定の例を超えて一般化されることに注意してください。垂直形式、特に表形式の構成で記述されたコードは、きれいなプリンターで破壊されやすい。

現在、一部のプロジェクトメンバーはEclipseエディターを使用しており、ソースファイル全体をフォーマットすると、セマンティックフォーマットが破壊されることがよくあります。

フォーマットに関してソースの特定の行を無視するようにEclipseに指示する方法はありますか?

Eclipseフォーマッタを切り替える特別なコメントのようなものを探しています。理想的には、そのようなコメントは、私たちが選択するものに合わせて構成可能であり、他のフォーマッタも同様にそれを尊重するようにプログラムできます。

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

明らかに、「解決策」の1つは、チームメンバーに Jalopy または JIndent などの外部フォーマッターで標準化することですが、それはこの質問の目的ではありません(また、私の決定ではありません)このプロジェクトで):私は特に、Eclipseフォーマッタをアドホックベースで回避する方法を探しています。

理想的には、ソリューションにより、Eclipseフォーマッターの指示を挿入できますEclipseを使用するチームメンバーにIDE再構成を要求することなく(フォーマッターに依存しないコマンドコメントを選択する場合を除く:STOP-Eclipse-FORMATTINGSTOP-FORMATTING)。

469
Greg Mattes

Eclipse 3.6では、次のように特別なコメントを入れることでフォーマットを無効にすることができます。

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

オン/オフ機能はEclipseの設定で "オン"にする必要があります。 Java>Code Style>Formatter。クリック Edit、 Off/On Tags有効にする Enable Off/On tags

設定のマジックストリングを変更することも可能です--- ここでEclipse 3.6のドキュメントをチェックしてください

その他の情報

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

この設定では、無効にするタグとフォーマッタを有効にするタグを1つ定義できます(フォーマッタプロファイルの[Off/On Tags]タブを参照)。

enter image description here

また、からフラグを有効にする必要があります Java Formatting

830
xpmatteo

フォーマッタのEclipse 3.5 M4からの私の知る限りでは、ユーザーの改行を保存するオプション "Never Join Lines"があります。たぶんそれはあなたが望むことをします。

そうでなければ、この醜いハックがあります

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

SOに対するこの答え を参照してください。

特定のブロックコメントのフォーマットを抑制するために使用できる別の解決策があります。ブロックコメントの先頭に/*-(ハイフンに注意)を使用すると、ファイルの残りの部分をフォーマットしてもフォーマットは影響を受けません。

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

出典: Oracleのドキュメント

24
Renaud

書式設定をオフにする代わりに、すでに折り返された行を結合しないように設定できます。 Jitterの回答と同様に、Eclipse STSのものは次のとおりです。

プロパティ→Javaコードスタイル→フォーマッタ→プロジェクト固有の設定を有効にするORワークスペース設定の設定→編集→行の折り返し(タブ)→「すでに折り返された行に参加しない」をチェックします。

保存して適用します。

enter image description here

23
ilinca

フォーマッタタグを追加する機能を有効にする必要があります。メニューバーで、

WindowsPreferencesJavaCode StyleFormatter

を押す Edit ボタン。最後のタブを選択してください。オン/オフボックスに注目し、チェックボックスでそれらを有効にします。

16
ZilWerks

行の先頭にプラス記号を付けると、書式が異なります。

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

二重スラッシュ "//"で各行を終了します。それはEclipseがそれらすべてを同じ行に移動させることを防ぎます。

5
Evvo

私は、フォーマッタが私のSQL文字列インデントをめちゃくちゃにしないようにするために、固定幅の文字列部分(空白で埋められている)を使用しています。これは複雑な結果をもたらし、空白文字がSQLのように無視されない場合は機能しませんが、役に立ちます。

    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

別の方法:Eclipse 3.6では、「行の折り返し」の後に「一般設定」の下に「すでに折り返した行を結合しない」というオプションがあります。つまり、フォーマッタは長い行を折り返しますが、すでに持っている折り返しを元に戻すことはありません。

4
kmccoy

@xpmatteoにはコードの一部を無効にするという答えがありますが、これに加えて、デフォルトのEclipse設定は、ファイル全体ではなく、編集されたコード行のみをフォーマットするように設定する必要があります。

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

同僚が実際には変更されていないコードを再フォーマットしているので、これはそもそもそれが起こるのを妨げていたでしょう。これは、ソースコントロールのdiffが無用になってしまうのを防ぐのに良い方法です(フォーマット設定の違いが小さいためにファイル全体が再フォーマットされる場合)。

On/offタグオプションがオフになっていると、再フォーマットもできなくなります。

4
Robin

改行したい場所に//を追加したという幻のコメントは素晴らしいです。

  1. @formatter:offはコードからエディタへの参照を追加します。私の考えでは、このコードは決してそのような参照を持つべきではありません。

  2. ファントムコメント(//)は、使用されている書式設定ツールに関係なく機能します。 EclipseやInteliJ、あるいはあなたが使っているエディタに関係なく。これはとても素敵な Google Javaフォーマット でも動作します。

  3. ファントムコメント(//)はあなたのアプリケーション全体に適用されます。 Javascriptもあり、おそらく JSBeautifier のようなものを使用している場合。 Javascriptでも同様のコードスタイルを使用できます。

  4. 実際には、おそらくフォーマットしたいのですが正しいですか?タブとスペースの混在と末尾のスペースを削除します。コード標準に従って行をインデントします。 あなたが望まないものは長い行です。それだけ、そしてそれだけが、幻のコメントがあなたに与えるものです!

1
Tomas Bjerre