515

Java 文字列として記述された SQL ステートメントを含む 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 つの「解決策」は、チーム メンバーにJalopyJIndentなどの外部フォーマッタを標準化させることですが、それはこの質問の目的ではありません (また、このプロジェクトに関する私の決定ではありません):アドホック ベースで Eclipse フォーマッターを回避します。

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

4

13 に答える 13

897

Eclipse 3.6 では、次のような特別なコメントを配置することで書式設定を無効にすることができます。

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

オン/オフ機能は、Eclipse 設定で「オン」にする必要がありますJava > Code Style > FormatterEditOff/On Tags、有効化をクリックしEnable Off/On tagsます。

環境設定でマジック ストリングを変更することもできます。こちらの Eclipse 3.6 ドキュメントを参照してください

詳しくは

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

このプリファレンスでは、フォーマッタを無効にするタグを 1 つ定義し、フォーマッタを有効にするタグを 1 つ定義できます (フォーマッタ プロファイルの [タグのオフ/オン] タブを参照してください)。

ここに画像の説明を入力

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

于 2010-07-28T14:17:36.120 に答える
63

フォーマッターのEclipse 3.5 M4のAFAIKには、ユーザーの改行を保持する「行を結合しない」オプションがあります。多分それはあなたが望むことをします。

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

String query = //
    "SELECT FOO, BAR, BAZ" + //
    "  FROM ABC"           + //
    " WHERE BAR > 4";
于 2009-11-30T16:48:29.490 に答える
37

SO でこの回答を参照してください。

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

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

出典: Oracle のドキュメント

于 2014-04-11T15:01:48.670 に答える
30

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

プロパティ→Javaコードスタイル→フォーマッター→プロジェクト固有の設定を有効にするか、ワークスペース設定を構成→編集→行の折り返し(タブ)→「既に折り返した行を結合しない」にチェックを入れます

保存して適用します。

ここに画像の説明を入力

于 2014-07-31T14:30:29.103 に答える
16

フォーマッタ タグを追加する機能をオンにする必要があります。メニューバーで次の場所に移動します。

Windows Preferences Java Code Style Formatter

ボタンを押しEditます。最後のタブを選択します。オン/オフボックスに注目し、チェックボックスで有効にします。

于 2011-08-17T18:06:38.260 に答える
14

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

String query = 
    "SELECT FOO, BAR, BAZ" 
    +    "  FROM ABC"           
    +    " WHERE BAR > 4";
于 2009-11-30T16:50:14.867 に答える
6

2 つのスラッシュ "//" で各行を終了します。これにより、日食がそれらすべてを同じ行に移動しなくなります。

于 2016-07-23T02:12:17.590 に答える
5

フォーマッタが 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                          ";
于 2010-07-16T11:17:51.973 に答える
4

代替方法: Eclipse 3.6 では、[行の折り返し] の [一般設定] の下に、[既に折り返した行を結合しない] オプションがあります。これは、フォーマッタが長い行を折り返すことを意味しますが、既にある折り目を元に戻すことはありません。

于 2011-04-16T17:10:48.333 に答える
4

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

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

同僚が実際には変更していないコードを再フォーマットしているため、これはそもそもそれが起こらないようにするためのものです。これは、ソース管理の diff が役に立たなくなるような事故を防ぐための良い方法です (フォーマット設定のわずかな違いのためにファイル全体が再フォーマットされた場合)。

タグのオン/オフオプションがオフになっている場合、再フォーマットも防止されます。

于 2012-08-15T15:02:10.287 に答える
2

//改行が必要な場所に追加するファントム コメントは素晴らしいです。

  1. @formatter: off は、コードからエディターへの参照を追加します。私の意見では、コードにはそのような参照はありません。

  2. ファントム コメント (//) は、使用する書式設定ツールに関係なく機能します。Eclipse、InteliJ、または使用するエディターに関係なく。これは、非常に優れた Google Java Formatでも機能します。

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

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

于 2017-06-01T19:45:37.393 に答える
-3

このハックは機能します:

String x = "s" + //Formatter Hack
    "a" + //
    "c" + //
    "d";

フォーマッタを使用しないことをお勧めします。悪いコードは人為的に良いものではなく、悪いものに見えるべきです。良いコードには時間がかかります。品質をごまかすことはできません。書式設定は、ソース コードの品質の一部です。

于 2009-11-30T16:47:45.670 に答える