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-FORMATTING
→STOP-FORMATTING
)。
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]タブを参照)。
また、からフラグを有効にする必要があります Java Formatting
フォーマッタのEclipse 3.5 M4からの私の知る限りでは、ユーザーの改行を保存するオプション "Never Join Lines"があります。たぶんそれはあなたが望むことをします。
そうでなければ、この醜いハックがあります
String query = //
"SELECT FOO, BAR, BAZ" + //
" FROM ABC" + //
" WHERE BAR > 4";
SOに対するこの答え を参照してください。
特定のブロックコメントのフォーマットを抑制するために使用できる別の解決策があります。ブロックコメントの先頭に/*-
(ハイフンに注意)を使用すると、ファイルの残りの部分をフォーマットしてもフォーマットは影響を受けません。
/*-
* Here is a block comment with some very special
* formatting that I want indent(1) to ignore.
*
* one
* two
* three
*/
出典: Oracleのドキュメント 。
書式設定をオフにする代わりに、すでに折り返された行を結合しないように設定できます。 Jitterの回答と同様に、Eclipse STSのものは次のとおりです。
プロパティ→Javaコードスタイル→フォーマッタ→プロジェクト固有の設定を有効にするORワークスペース設定の設定→編集→行の折り返し(タブ)→「すでに折り返された行に参加しない」をチェックします。
保存して適用します。
フォーマッタタグを追加する機能を有効にする必要があります。メニューバーで、
Windows→PreferencesJava→Code Style→Formatter
を押す Edit ボタン。最後のタブを選択してください。オン/オフボックスに注目し、チェックボックスでそれらを有効にします。
行の先頭にプラス記号を付けると、書式が異なります。
String query =
"SELECT FOO, BAR, BAZ"
+ " FROM ABC"
+ " WHERE BAR > 4";
二重スラッシュ "//"で各行を終了します。それはEclipseがそれらすべてを同じ行に移動させることを防ぎます。
私は、フォーマッタが私の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 ";
別の方法:Eclipse 3.6では、「行の折り返し」の後に「一般設定」の下に「すでに折り返した行を結合しない」というオプションがあります。つまり、フォーマッタは長い行を折り返しますが、すでに持っている折り返しを元に戻すことはありません。
@xpmatteoにはコードの一部を無効にするという答えがありますが、これに加えて、デフォルトのEclipse設定は、ファイル全体ではなく、編集されたコード行のみをフォーマットするように設定する必要があります。
Preferences->Java->Editor->Save Actions->Format Source Code->Format Edited Lines
同僚が実際には変更されていないコードを再フォーマットしているので、これはそもそもそれが起こるのを妨げていたでしょう。これは、ソースコントロールのdiffが無用になってしまうのを防ぐのに良い方法です(フォーマット設定の違いが小さいためにファイル全体が再フォーマットされる場合)。
On/offタグオプションがオフになっていると、再フォーマットもできなくなります。
改行したい場所に//
を追加したという幻のコメントは素晴らしいです。
@formatter:offはコードからエディタへの参照を追加します。私の考えでは、このコードは決してそのような参照を持つべきではありません。
ファントムコメント(//)は、使用されている書式設定ツールに関係なく機能します。 EclipseやInteliJ、あるいはあなたが使っているエディタに関係なく。これはとても素敵な Google Javaフォーマット でも動作します。
ファントムコメント(//)はあなたのアプリケーション全体に適用されます。 Javascriptもあり、おそらく JSBeautifier のようなものを使用している場合。 Javascriptでも同様のコードスタイルを使用できます。
実際には、おそらくフォーマットしたいのですが正しいですか?タブとスペースの混在と末尾のスペースを削除します。コード標準に従って行をインデントします。 あなたが望まないものは長い行です。それだけ、そしてそれだけが、幻のコメントがあなたに与えるものです!