Checkstyleチェック項目:Whitespace
ver 10.3.1
EmptyForInitializerPad
for文の空の初期化式に空白を許可するかどうかをチェックする。
forの初期化式後に改行されている場合はチェックが実行されない。
〇forの初期化式とは
for (初期化式; 条件式; 変化式) { // 繰り返しの中で実行される処理 }
プロパティ
プロパティ | 型 | デフォルト値 | 説明 |
---|---|---|---|
option | PadOption | nospace | 空白パディングについてのポリシーを指定 |
〇PadOptionには以下の値が設定可能
値 | 説明 |
---|---|
nospace | 空白パディングは行わない |
space | 空白パディングを行う |
チェック設定例
プロパティ設定なし
<module name="EmptyForInitializerPad"/>
プロパティ設定あり
<module name="EmptyForInitializerPad"> <property name="option" value="space"/> </module>
チェック実行例
プロパティ設定なし
// OK for (; i < 2; i++ ); // OK for (;i<2;i++); // OK 空の初期化式後に改行されているためチェックは実行されない for ( ; i < 2; i++ ); // NG 空の初期化式の位置に空白が挿入されている for ( ; i < 1; i++ ); // NG 空の初期化式の位置に空白が挿入されている for ( ;i<2;i++);
プロパティ設定あり
// NG 空の初期化式の位置に空白が挿入されてない for (; i < 2; i++ ); // NG 空の初期化式の位置に空白が挿入されてない for (;i<2;i++); // OK 空の初期化式後に改行されているためチェックは実行されない for ( ; i < 2; i++ ); // OK for ( ; i < 1; i++ ); // OK for ( ;i<2;i++);
EmptyForIteratorPad
for文の空の変化式に空白を許可するかどうか。
forの変化式後に改行されている場合はチェックが実行されない。
〇 forの初期化式とは
for (初期化式; 条件式; 変化式){ // 繰り返しの中で実行される処理 }
プロパティ
プロパティ | 型 | デフォルト値 | 説明 |
---|---|---|---|
option | PadOption | nospace | 空白パディングについてのポリシーを指定 |
〇PadOptionには以下の値が設定可能
値 | 説明 |
---|---|
nospace | 空白パディングは行わない |
space | 空白パディングを行う |
チェック設定例
プロパティ設定なし
<module name="EmptyForIteratorPad"/>
プロパティ設定あり
<module name="EmptyForIteratorPad"> <property name="option" value="space"/> </module>
チェック実行例
プロパティ設定なし
// OK for (Iterator it = map.entrySet().iterator(); it.hasNext();); // OK 空の変化式後に改行されているためチェックは実行されない for (Iterator foo = very.long.line.iterator(); foo.hasNext(); ); // NG 空の変化式の位置に空白が挿入されている for (Iterator it = map.entrySet().iterator(); it.hasNext(); );
プロパティ設定あり
// NG 空の変化式の位置に空白が挿入されていない for (Iterator it = map.entrySet().iterator(); it.hasNext();); // OK 空の変化式後に改行されているためチェックは実行されない for (Iterator foo = very.long.line.iterator(); foo.hasNext(); ); // OK for (Iterator it = map.entrySet().iterator(); it.hasNext(); );
EmptyLineSeparator
以下の前に空行が挿入されているかどうか
- package
- import
- fields
- constructors
- methods
- nested classes
- static initializers
- instance initializers
ステートメントだけでなく、実装やドキュメントのコメントやブロックの前に空行が挿入されているかどうかをチェックする。
プロパティ
プロパティ | 型 | デフォルト値 | 説明 |
---|---|---|---|
allowNoEmptyLineBetweenFields | boolean | false | フィールド間の空行なしを許可するかどうか |
allowMultipleEmptyLines | boolean | true | クラスメンバー間に複数の空行を許可するかどうか |
allowMultipleEmptyLines InsideClassMembers | boolean | true | クラス内(メソッド内の処理等)に複数の空行を許可するかどうか |
tokens | トークンの サブセット | PACKAGE_DEF, IMPORT, STATIC_IMPORT, CLASS_DEF, INTERFACE_DEF, ENUM_DEF, STATIC_INIT, INSTANCE_INIT, METHOD_DEF, CTOR_DEF, VARIABLE_DEF, RECORD_DEF, COMPACT_CTOR_DEF |
チェック対象のトークン |
〇トークンのサブセットには以下の値が設定可能
値 | 説明 |
---|---|
CLASS_DEF | クラス宣言 |
COMPACT_CTOR_DEF | 引数なしコンストラクタ宣言 |
CTOR_DEF | コンストラクタ宣言 |
ENUM_DEF | Enum宣言 |
IMPORT | インポート |
INTERFACE_DEF | インターフェース宣言 |
INSTANCE_INIT | インスタンスイニシャライザ |
METHOD_DEF | メソッド宣言 |
PACKAGE_DEF | パッケージ宣言 |
STATIC_IMPORT | staticインポート |
STATIC_INIT | スタティックイニシャライザ |
RECORD_DEF | レコード宣言 |
VARIABLE_DEF | フィールドまたはローカル変数の宣言 |
チェック設定例
プロパティ設定なし
<module name="EmptyLineSeparator"/>
プロパティ設定あり
<module name="EmptyLineSeparator"> <property name="allowNoEmptyLineBetweenFields" value="true"/> <property name="allowMultipleEmptyLines" value="false"/> <property name="allowMultipleEmptyLinesInsideClassMembers" value="false"/> <property name="tokens" value="VARIABLE_DEF, METHOD_DEF"/> </module>
チェック実行例
プロパティ設定なし
// NG package, import, class, field, methodの間にはそれぞれ1行以上の空行が必要 /////////////////////////////////////////////////// //HEADER /////////////////////////////////////////////////// package com.whitespace; import java.io.Serializable; class MyClass { public static final int FOO_CONST = 1; public void foo() {} } // OK /////////////////////////////////////////////////// //HEADER /////////////////////////////////////////////////// package com.whitespace; import java.io.Serializable; class MyClass { public static final int FOO_CONST = 1; public void foo() {} }
プロパティ設定あり
// NG package, import, class, field, methodの間にはそれぞれ1行の空行が必要 /////////////////////////////////////////////////// //HEADER /////////////////////////////////////////////////// package com.whitespace; import java.io.Serializable; class MyClass { public static final int FOO_CONST = 1; public void foo() { System.out.println("abc!"); } } // OK /////////////////////////////////////////////////// //HEADER /////////////////////////////////////////////////// package com.whitespace; import java.io.Serializable; class MyClass { public static final int FOO_CONST = 1; public void foo() { System.out.println("abc!"); } }
FileTabCharacter
ソースコードにタブ文字(\t)がないことを確認する。
プロパティ
プロパティ | 型 | デフォルト値 | 説明 |
---|---|---|---|
eachLine | boolean | false | タブを含む各行を報告するか(true)、最初のインスタンスだけを報告するか(false) |
fileExtensions | String[] |
all files | チェック対象のファイルの拡張子を指定する |
チェック設定例
プロパティ設定なし
<module name="FileTabCharacter"/>
プロパティ設定あり
<module name="FileTabCharacter"> <property name="eachLine" value="true"/> <property name="fileExtensions" value="java, xml"/> </module>
チェック実行例
プロパティ設定なし
public class MyClass { // NG インデントにタブ文字を使用している int a; // OK インデントにタブを使用しているが「eachLine=false」なので報告されない public void foo (int arg) { // OK インデントにスペースを使用している a = arg; } }
プロパティ設定あり
public class MyClass { // NG インデントにタブ文字を使用している int a; // NG インデントにタブ文字を使用している public void foo (int arg) { // OK インデントにスペースを使用している a = arg; } }
GenericWhitespace
"<"と">"の周りの空白が一般的なルールに合っているかどうかをチェックする。
一般的なルールとして以下のものがある。
◇ "<"について
- "<"の前に空白を挿入するのは一般的なメソッドの定義においてのみ
- メソッド名やコンストラクタの前に付ける場合は、"<"の前に空白を挿入しない
- 型名に続く場合、"<"の前にはホワイトスペースを挿入しない
- すべての場合において、"<"の後にホワイトスペースを挿入しない
◇ ">"について
チェック設定例
<module name="GenericWhitespace"/>
チェック実行例
// OK // Generic methods definitions public void <K, V extends Number> boolean foo(K, V) {} // Generic type definition class name<T1, T2, ..., Tn> {} // Generic type reference OrderedPair<String, Box<Integer>> p; // Generic preceded method name boolean same = Util.<Integer, String>compare(p1, p2); // Diamond operator Pair<Integer, String> p1 = new Pair<>(1, "apple"); // Method reference List<T> list = ImmutableList.Builder<T>::new; // Method reference sort(list, Comparable::<String>compareTo); // Constructor call MyClass obj = new <String>MyClass(); // NG List< String> l; // "<"の後ろの空白が不要 Box b = Box. <String>of("foo"); // "<"の前の空白が不要 public<T> void foo() {} // "<"の前に空白が必要 List a = new ArrayList<> (); // ">"の後ろの空白が不要 Map<Integer, String>m; // ">"の後ろに空白が必要 Pair<Integer, Integer > p; // ">"の前の空白が不要
MethodParamPad
メソッド定義、コンストラクタ定義、メソッド呼び出し、コンストラクタ呼び出しの識別子と、パラメータリストの左かっこの間の空白をチェックする。
プロパティ
プロパティ | 型 | デフォルト値 | 説明 |
---|---|---|---|
allowLineBreaks | boolean | false | 識別子と左括弧の間で改行を許可するかどうか |
option | PadOption | nospace | 空白パディングについてのポリシーを指定する |
tokens | トークンの サブセット | CTOR_DEF, LITERAL_NEW, METHOD_CALL , METHOD_DEF, SUPER_CTOR_CALL, ENUM_CONSTANT_DEF, RECORD_DEF |
チェック対象のトークン |
〇PadOptionには以下の値が設定可能
値 | 説明 |
---|---|
nospace | 空白パディングは行わない |
space | 空白パディングを行う |
〇 トークンのサブセットには以下の値が設定可能
値 | 説明 |
---|---|
CTOR_DEF | コンストラクター宣言 |
ENUM_CONSTANT_DEF | enum定数の定義 |
LITERAL_NEW | newキーワード |
METHOD_CALL | メソッド呼び出し |
METHOD_DEF | メソッド宣言 |
RECORD_DEF | レコード宣言 |
SUPER_CTOR_CALL | 親コンストラクタ呼び出し |
チェック設定例
プロパティ設定なし
<module name="MethodParamPad"/>
プロパティ設定あり
<module name="MethodParamPad"> <property name="tokens" value="METHOD_DEF"/> <property name="option" value="space"/> <property name="allowLineBreaks" value="true"/> </module>
チェック実行例
プロパティ設定なし
public class MyClass { // OK public MyClass() { super(); } // NG '('の前に空白が挿入されている public MyClass (int aParam) { super (); } // OK public void method() {} // NG '('の前に空白が挿入されている public void methodWithVeryLongName () {} }
プロパティ設定あり
public class MyClass { // OK '('の前に空白が挿入されていないが、チェック対象がメソッド宣言のみなのでOK public MyClass() { super(); } // OK public MyClass (int aParam) { super (); } // NG '('の前に空白が挿入されていない public void method() {} // OK public void methodWithVeryLongName () {} }
NoLineWrap
選択した文が改行されていないことをチェックする。
デフォルトでは、import と package の折り返しを制限しているが、任意のステートメントをチェックすることが可能。
プロパティ
プロパティ | 型 | デフォルト値 | 説明 |
---|---|---|---|
tokens | トークンの サブセット | PACKAGE_DEF, IMPORT, STATIC_IMPORT | チェック対象のトークン |
〇トークンのサブセットには以下の値が設定可能
値 | 説明 |
---|---|
CLASS_DEF | クラス宣言 |
COMPACT_CTOR_DEF | 引数なしコンストラクタ宣言 |
CTOR_DEF | コンストラクター宣言 |
ENUM_DEF | Enum宣言 |
IMPORT | インポート |
INTERFACE_DEF | インターフェース宣言 |
METHOD_DEF | メソッド宣言 |
PACKAGE_DEF | パッケージ宣言 |
RECORD_DEF | レコード宣言 |
STATIC_IMPORT | staticインポート |
チェック設定例
プロパティ設定なし
<module name="NoLineWrap"/>
プロパティ設定あり
<module name="NoLineWrap"> <property name="tokens" value="IMPORT"/> </module>
チェック実行例
プロパティ設定なし
// NG パッケージ宣言途中で改行しない package com.puppycrawl.tools.checkstyle. checks.whitespace; // OK import java.lang.Object; // NG import途中で改行しない import java.lang. Integer; // NG static import途中で改行しない import static java.math. BigInteger.TEN;
プロパティ設定あり
// OK パッケージ宣言途中で改行しているが、チェック対象はimportのみなのでOK package com.puppycrawl.tools.checkstyle. checks.whitespace; // OK import java.lang.Object; // NG import途中で改行しない import java.lang. Integer; // NG static import途中で改行しているが、チェック対象はimportのみなのでOK import static java.math. BigInteger.TEN;
NoWhitespaceAfter
トークンの後に空白がないことをチェックする。
プロパティ
プロパティ | 型 | デフォルト値 | 説明 |
---|---|---|---|
allowLineBreaks | boolean | true | トークンが改行された場合に、空白を許容するかどうか |
tokens | トークンの サブセット | ARRAY_INIT, AT, INC, DEC, UNARY_MINUS, UNARY_PLUS, BNOT, LNOT, DOT, ARRAY_DECLARATOR, INDEX_OP |
チェック対象のトークン |
〇トークンのサブセットには以下の値が設定可能
値 | 説明 |
---|---|
ARRAY_DECLARATOR | 配列の宣言 |
ARRAY_INIT | 配列の初期化 |
AT | @ |
BNOT | ~ |
DEC | -- |
DOT | . |
INC | ++ |
INDEX_OP | 配列のインデックス |
LITERAL_SYNCHRONIZED | synchronized |
LNOT | ! |
METHOD_REF | メソッド参照 |
TYPECAST | キャスト |
UNARY_MINUS | - |
UNARY_PLUS | + |
チェック設定例
プロパティ設定なし
<module name="NoWhitespaceAfter"/>
プロパティ設定あり
<module name="NoWhitespaceAfter"> <property name="tokens" value="DOT"/> <property name="allowLineBreaks" value="false"/> </module>
チェック実行例
プロパティ設定なし
class MyClass { public void lineBreak(String x) { // OK Integer. parseInt(x); // OK Integer.parseInt(x); } public void dotOperator(String s) { // NG '.'の後ろに空白が挿入されている Integer. parseInt(s); } public void arrayDec() { // OK int[] arr = arr; // NG 'int'の後ろに空白が挿入されている int [] arr = arr; } public void bitwiseNot(int a) { // NG '~'の後ろに空白が挿入されている a = ~ a; // OK a = ~a; } }
プロパティ設定あり
class MyClass { public void lineBreak(String x) { // NG 「allowLineBreaks=false」なのでNG Integer. parseInt(x); // OK Integer.parseInt(x); } public void dotOperator(String s) { // NG '.'の後ろに空白が挿入されている Integer. parseInt(s); } public void arrayDec() { // OK int[] arr = arr; // OK 「.」以外はチェック対象外 int [] arr = arr; } public void bitwiseNot(int a) { // OK 「.」以外はチェック対象外 a = ~ a; // OK a = ~a; } }
NoWhitespaceBefore
トークンの前に空白がないことをチェックする。
プロパティ
プロパティ | 型 | デフォルト値 | 説明 |
---|---|---|---|
allowLineBreaks | boolean | false | トークンが改行された場合に、空白を許容するかどうか |
tokens | トークンの サブセット | COMMA, SEMI, POST_INC, POST_DEC, ELLIPSIS, LABELED_STAT | チェック対象のトークン |
〇 トークンのサブセットには以下の値が設定可能
値 | 説明 |
---|---|
COMMA | , |
DOT | . |
ELLIPSIS | 可変長引数の... |
GENERIC_END | 総称型の> |
GENERIC_START | 総称型の< |
LABELED_STAT | ラベル |
METHOD_REF | メソッド参照の:: |
POST_DEC | 後置-- |
POST_INC | 後置++ |
SEMI | ; |
チェック設定例
プロパティ設定なし
<module name="NoWhitespaceBefore"/>
プロパティ設定あり
<module name="NoWhitespaceBefore"> <property name="allowLineBreaks" value="true"/> <property name="tokens" value="POST_INC"/> </module>
チェック実行例
プロパティ設定なし
int foo; // NG `++`の前に空白が挿入されている foo ++; // OK foo++; // NG `;`の前に空白が挿入されている for (int i = 0 ; i < 5; i++) {} // OK for (int i = 0; i < 5; i++) {} // NG `,`の前に空白が挿入されている int[][] array = { { 1, 2 } , { 3, 4 } }; // OK int[][] array2 = { { 1, 2 }, { 3, 4 } }; // NG `:`の前に空白が挿入されている { label1 : for (int i = 0; i < 10; i++) {} } // OK { label2: while (true) {} }
プロパティ設定あり
int foo; // NG `++`の前に空白が挿入されている foo ++; // OK foo++; // OK 後置インクリメント以外はチェック対象外 for (int i = 0 ; i < 5; i++) {} // OK for (int i = 0; i < 5; i++) {} // OK 後置インクリメント以外はチェック対象外 int[][] array = { { 1, 2 } , { 3, 4 } }; // OK int[][] array2 = { { 1, 2 }, { 3, 4 } }; // OK 後置インクリメント以外はチェック対象外 { label1 : for (int i = 0; i < 10; i++) {} } // OK { label2: while (true) {} }
NoWhitespaceBeforeCaseDefaultColon
スイッチブロックのコロンの前に空白がないことをチェックする。
チェック設定例
<module name="NoWhitespaceBeforeCaseDefaultColon"/>
チェック実行例
class Test { public void sample(){ switch(1) { // NG `:`の前に空白が挿入されている case 1 : break; // OK case 2: break; // NG `:`の前に空白が挿入されている default : break; } switch(2) { // OK case 2: break; // NG `:`の前に空白が挿入されている case 3, 4 : break; // OK case 4, 5: break; // NG `:`の前に空白が挿入されている default : break; } } }
OperatorWrap
演算子の行の折り返し方法のポリシーをチェックする。
プロパティ
プロパティ | 型 | デフォルト値 | 説明 |
---|---|---|---|
option | WrapOption | nl | 行の折り返し方法のポリシーを指定する |
tokens | トークンの サブセット | QUESTION, COLON, EQUAL, NOT_EQUAL, DIV, PLUS, MINUS, STAR, MOD, SR, BSR, GE, GT, SL, LE, LT, BXOR, BOR, LOR, BAND, LAND, TYPE_EXTENSION_AND, LITERAL_INSTANCEOF |
チェック対象のトークン |
〇WrapOptionには以下の値が設定可能
値 | 説明 |
---|---|
eol | トークンは行末にある必要がある |
nl | トークンは改行する必要がある |
〇トークンのサブセットには以下の値が設定可能
値 | 説明 |
---|---|
ASSIGN | = |
BAND | & |
BAND_ASSIGN | &= |
BOR | | |
BOR_ASSIGN | |= |
BSR | >>> |
BSR_ASSIGN | >>>= |
BXOR | ^ |
BXOR_ASSIGN | ^= |
COLON | : |
DIV | / |
DIV_ASSIGN | /= |
EQUAL | == |
GE | >= |
GT | > |
LAND | && |
LE | <= |
LITERAL_INSTANCEOF | instanceof |
LOR | || |
LT | < |
METHOD_REF | メソッド参照の:: |
MINUS | - |
MINUS_ASSIGN | -= |
MOD | % |
MOD_ASSIGN | *= |
NOT_EQUAL | != |
PLUS | + |
PLUS_ASSIGN | += |
QUESTION | ? |
SL | << |
SL_ASSIGN | <<= |
SR | >> |
SR_ASSIGN | >>= |
STAR | * |
STAR_ASSIGN | *= |
TYPE_EXTENSION_AND | & |
チェック設定例
プロパティ設定なし
<module name="OperatorWrap"/>
プロパティ設定あり
<module name="OperatorWrap"> <property name="tokens" value="ASSIGN,DIV_ASSIGN,PLUS_ASSIGN,MINUS_ASSIGN,STAR_ASSIGN,MOD_ASSIGN,SR_ASSIGN,BSR_ASSIGN,SL_ASSIGN,BXOR_ASSIGN,BOR_ASSIGN,BAND_ASSIGN, PLUS"/> <property name="option" value="eol"/> </module>
チェック実行例
プロパティ設定なし
デフォルトのチェック結果は以下のようになる。
class MyClass { public static void main(String[] args) { // NG `+`の前に改行するべき String s = "Hello" + "World"; // NG `==`の前に改行するべき if (10 == 20) { } // OK if (10 == 20) { } // NG `/`の前に改行するべき int c = 10 / 5; // OK int d = c / 10; } }
プロパティ設定あり
class MyClass { public static void main(String[] args) { // OK String s = "Hello" + "World"; // NG `+`は行末に配置する String s = "Hello" + "World"; // OK `==`はチェック対象外 if (10 == 20) { } // OK if (10 == 20) { } } }
ParenPad
左括弧の後と右括弧の前に空白を入れる必要があるか、もしくは空白を入れることが禁止されているかをチェックする。
〇for文の変化式とは
for (初期化式; 条件式; 変化式){ // 繰り返しの中で実行される処理 }
空のfor変化式の後の右括弧、空のfor初期化式の前の左括弧、最後のリソース変数が最後のセミコロンを持つtry-with-resourcesリソース指定の右括弧では、チェックは行われない。
プロパティ
プロパティ | 型 | デフォルト値 | 説明 |
---|---|---|---|
option | PadOption | nospace | 空白パディングについてのポリシーを指定 |
tokens | トークンの サブセット | ANNOTATION, ANNOTATION_FIELD_DEF, CTOR_CALL, CTOR_DEF, DOT, ENUM_CONSTANT_DEF, EXPR, LITERAL_CATCH, LITERAL_DO, LITERAL_FOR, LITERAL_IF, LITERAL_NEW, LITERAL_SWITCH, LITERAL_SYNCHRONIZED, LITERAL_WHILE, METHOD_CALL, METHOD_DEF, QUESTION, RESOURCE_SPECIFICATION, SUPER_CTOR_CALL, LAMBDA, RECORD_DEF |
チェック対象のトークン |
〇 PadOptionには以下の値が設定可能
値 | 説明 |
---|---|
nospace | 空白パディングは行わない |
space | 空白パディングを行う |
〇 トークンのサブセットには以下の値が設定可能
値 | 説明 |
---|---|
ANNOTATION | パッケージ、タイプ、フィールド、パラメータ、変数のアノテーション |
ANNOTATION_FIELD_DEF | アノテーションフィールド宣言 |
CTOR_CALL | コンストラクタ呼び出し |
CTOR_DEF | コンストラクタ定義 |
DOT | . |
ENUM_CONSTANT_DEF | Enum定数宣言 |
EXPR | 式 |
LAMBDA | ラムダ記号-> |
LITERAL_CATCH | catch |
LITERAL_DO | do |
LITERAL_FOR | for |
LITERAL_IF | if |
LITERAL_NEW | new |
LITERAL_SWITCH | switch |
LITERAL_SYNCHRONIZED | synchronized |
LITERAL_WHILE | while |
METHOD_CALL | メソッド呼び出し |
METHOD_DEF | メソッド定義 |
QUESTION | ? |
RECORD_DEF | レコード定義 |
RESOURCE_SPECIFICATION | try-with-resources構文 |
SUPER_CTOR_CALL | 親コンストラクタ呼び出し |
チェック設定例
プロパティ設定なし
<module name="ParenPad"/>
プロパティ設定あり
<module name="ParenPad"> <property name="tokens" value="LITERAL_WHILE, LITERAL_CATCH, SUPER_CTOR_CALL"/> <property name="option" value="space"/> </module>
チェック実行例
プロパティ設定なし
class MyClass { int n; // OK public void foo() { // NG `(`の後ろにスペースを挿入しない bar( 1); } // NG `)`の前にスペースを挿入しない public void bar(int k ) { // OK while (k > 0) { } // OK Test obj = new Test(k); } }
プロパティ設定あり
class MyClass { int n; // OK メソッド宣言はチェック対象外 public void foo() { // OK bar( 1); } // OK public void bar(int k ) { // NG 左括弧の後と右括弧の前に空白を入れる while (k > 0) { } // OK コンストラクタ呼び出しはチェック対象外 Test obj = new Test(k); } }
SeparatorWrap
セパレータによる行の折り返しをチェックする。
プロパティ
プロパティ | 型 | デフォルト値 | 説明 |
---|---|---|---|
option | WrapOption | eol | 行の折り返し方法のポリシーを指定する |
tokens | トークンの サブセット | DOT, COMMA | チェック対象のトークン |
〇 WrapOptionには以下の値が設定可能
値 | 説明 |
---|---|
eol | トークンは行末にある必要がある |
nl | トークンは改行する必要がある |
〇 トークンのサブセットには以下の値が設定可能
値 | 説明 |
---|---|
ARRAY_DECLARATOR | 配列宣言 |
AT | @ |
COMMA | , |
DOT | . |
ELLIPSIS | 可変長引数の... |
LPAREN | ( |
METHOD_REF | メソッド参照 |
RBRACK | ] |
RPAREN | ) |
SEMI | ; |
チェック設定例
プロパティ設定なし
<module name="SeparatorWrap"/>
プロパティ設定あり
<module name="SeparatorWrap"> <property name="tokens" value="COMMA"/> <property name="option" value="nl"/> </module>
チェック実行例
プロパティ設定なし
// OK import java.io. IOException; class MyClass { String s; // OK public void foo(int a, int b) { } // NG `,`で改行している public void bar(int p , int q) { // NG `.`で改行している if (s .isEmpty()) { } } }
プロパティ設定あり
// OK import java.io. IOException; class MyClass { String s; // NG コンマの前で改行していない public void foo(int a, int b) { } // OK public void bar(int p , int q) { // OK if (s .isEmpty()) { } } }
SingleSpaceSeparator
非空白文字が1つ以上の空白文字で区切られていないことをチェックする。
プロパティ
プロパティ | 型 | デフォルト値 | 説明 |
---|---|---|---|
validateComments | boolean | false | コメントを囲む空白を有効にするかどうか |
チェック設定例
プロパティ設定なし
<module name="SingleSpaceSeparator"/>
プロパティ設定あり
<module name="SingleSpaceSeparator"> <property name="validateComments" value="true"/> </module>
チェック実行例
プロパティ設定なし
// NG `)`と`{`の間に2以上の空白がある int foo() { // NG returnと値の間に2以上の空白がある return 1; // comment } // OK int fun1() { return 3; // comment }
プロパティ設定あり
// NG `)`と`{`の間に2以上の空白がある int foo() { // NG returnと値の間に2以上の空白がある return 1; // comment } // OK int fun1() { // NG 行コメントとの間に2以上の空白がある return 3; // comment }
TypecastParenPad
タイプキャストの左括弧の後と右括弧の前にスペースを入れるのか、それともそのようなスペースは禁止するのかをチェックする。
プロパティ
プロパティ | 型 | デフォルト値 | 説明 |
---|---|---|---|
option | PadOption | nospace | 空白パディングについてのポリシーを指定 |
〇 PadOptionには以下の値が設定可能
値 | 説明 |
---|---|
nospace | 空白パディングは行わない |
space | 空白パディングを行う |
チェック設定例
プロパティ設定なし
<module name="TypecastParenPad"/>
プロパティ設定あり
<module name="TypecastParenPad"> <property name="option" value="space"/> </module>
チェック実行例
プロパティ設定なし
class MyClass { float f1 = 3.14f; // NG `(`の後ろに空白が挿入されている int n = ( int) f1; double d = 1.234567; // NG `)`の前に空白が挿入されている float f2 = (float ) d; // OK float f3 = (float) d; }
プロパティ設定あり
class MyClass { float f1 = 3.14f; // OK int n = ( int) f1; double d = 1.234567; // OK float f2 = (float ) d; // NG float f3 = (float) d; }
WhitespaceAfter
トークンの後に空白があるかどうかをチェックする。
空のfor変化式のセミコロンの後の空白はチェックしない。
プロパティ
プロパティ | 型 | デフォルト値 | 説明 |
---|---|---|---|
tokens | トークンの サブセット | COMMA, SEMI, TYPECAST, LITERAL_IF, LITERAL_ELSE, LITERAL_WHILE, LITERAL_DO, LITERAL_FOR, LITERAL_FINALLY, LITERAL_RETURN, LITERAL_YIELD, LITERAL_CATCH, DO_WHILE, ELLIPSIS, LITERAL_SWITCH, LITERAL_SYNCHRONIZED, LITERAL_TRY, LITERAL_CASE, LAMBDA |
チェック対象のトークン |
〇 トークンのサブセットには以下の値が設定可能
値 | 説明 |
---|---|
COMMA | , |
DO_WHILE | do-whileのwhile |
ELLIPSIS | 可変長引数の... |
LAMBDA | ラムダ式の-> |
LITERAL_CASE | case |
LITERAL_CATCH | catch |
LITERAL_DO | do |
LITERAL_ELSE | else |
LITERAL_FINALLY | finally |
LITERAL_FOR | for |
LITERAL_IF | if |
LITERAL_RETURN | return |
LITERAL_SWITCH | switch |
LITERAL_SYNCHRONIZED | synchronized |
LITERAL_TRY | try |
LITERAL_WHILE | while |
LITERAL_YIELD | yield |
SEMI | ; |
TYPECAST | キャスト |
チェック設定例
プロパティ設定なし
<module name="WhitespaceAfter"/>
プロパティ設定あり
<module name="WhitespaceAfter"> <property name="tokens" value="COMMA, SEMI"/> </module>
チェック実行例
プロパティ設定なし
public void myTest() { if (foo) { // NG ifの後ろにスペースがない } else if(bar) { } // OK testMethod(foo, bar); // NG コンマの後ろにスペースがない testMethod(foo,bar); }
プロパティ設定あり
public void myTest() { if (foo) { // OK ifはチェック対象外 } else if(bar) { } // OK testMethod(foo, bar); // NG コンマの後ろにスペースがない testMethod(foo,bar); }
WhitespaceAround
トークンが空白で囲まれているかどうかをチェックする。
プロパティ
プロパティ | 型 | デフォルト値 | 説明 |
---|---|---|---|
allowEmptyConstructors | boolean | false | 空のコンストラクタを許可するかどうか |
allowEmptyMethods | boolean | false | 空のメソッドを許可するかどうか |
allowEmptyTypes | boolean | false | 空のクラス、インターフェース、enumを許可するかどうか |
allowEmptyLoops | boolean | false | 空のループ処理を許可するかどうか |
allowEmptyLambdas | boolean | false | 空のラムダを許可するかどうか |
allowEmptyCatches | boolean | false | 空のcatchを許可するかどうか |
ignoreEnhancedForColon | boolean | true | 拡張forループでコロンの周りの空白を無視するかどうか |
tokens | トークンの サブセット | ASSIGN, BAND, BAND_ASSIGN, BOR, BOR_ASSIGN, BSR, BSR_ASSIGN, BXOR, BXOR_ASSIGN, COLON, DIV, DIV_ASSIGN, DO_WHILE, EQUAL, GE, GT, LAMBDA, LAND, LCURLY, LE, LITERAL_CATCH, LITERAL_DO, LITERAL_ELSE, LITERAL_FINALLY, LITERAL_FOR, LITERAL_IF, LITERAL_RETURN, LITERAL_SWITCH, LITERAL_SYNCHRONIZED, LITERAL_TRY, LITERAL_WHILE, LOR, LT, MINUS, MINUS_ASSIGN, MOD, MOD_ASSIGN, NOT_EQUAL, PLUS, PLUS_ASSIGN, QUESTION, RCURLY, SL, SLIST, SL_ASSIGN, SR, SR_ASSIGN, STAR, STAR_ASSIGN, LITERAL_ASSERT, TYPE_EXTENSION_AND |
チェック対象のトークン |
〇 トークンのサブセットには以下の値が設定可能
値 | 説明 |
---|---|
ARRAY_INIT | 配列の初期化 |
ASSIGN | = |
BAND_ASSIGN | &= |
BAND | & |
BOR_ASSIGN | |= |
BOR | | |
BSR_ASSIGN | >>>= |
BSR | >>> |
BXOR_ASSIGN | ^= |
BXOR | ^ |
COLON | : |
DIV_ASSIGN | /= |
DIV | / |
DO_WHILE | do-whileのwhile |
ELLIPSIS | 可変長引数の... |
EQUAL | == |
GENERIC_END | > |
GENERIC_START | < |
GE | >= |
GT | > |
LAMBDA | ラムダ式の-> |
LAND | && |
LCURLY | { |
LE | <= |
LITERAL_ASSERT | assert |
LITERAL_CATCH | catch |
LITERAL_DO | do |
LITERAL_ELSE | else |
LITERAL_FINALLY | finally |
LITERAL_FOR | for |
LITERAL_IF | if |
LITERAL_RETURN | return |
LITERAL_SWITCH | switch |
LITERAL_SYNCHRONIZED | synchronized |
LITERAL_TRY | try |
LITERAL_WHILE | while |
LOR | || |
LT | < |
MINUS_ASSIGN | -= |
MINUS | - |
MOD_ASSIGN | %= |
MOD | % |
NOT_EQUAL | != |
PLUS_ASSIGN | += |
PLUS | + |
QUESTION | ? |
RCURLY | } |
SLIST | リスト |
SL_ASSIGN | <<= |
SL | << |
SR_ASSIGN | >>= |
SR | >> |
STAR_ASSIGN | *= |
STAR | * |
TYPE_EXTENSION_AND | 総称型 |
WILDCARD_TYPE | すべてのタイプを参照する型 |
チェック設定例
プロパティ設定なし
<module name="WhitespaceAround"/>
プロパティ設定あり
<module name="WhitespaceAround"> <property name="allowEmptyMethods" value="true"/> <property name="tokens" value="ASSIGN,DIV_ASSIGN,PLUS_ASSIGN,MINUS_ASSIGN,STAR_ASSIGN, MOD_ASSIGN,SR_ASSIGN,BSR_ASSIGN,SL_ASSIGN,BXOR_ASSIGN, BOR_ASSIGN,BAND_ASSIGN"/> </module>
チェック実行例
プロパティ設定なし
class MyClass { // NG `{`の前後にスペースが必要 public MyClass(){} // OK public static void main(String[] args) { if (foo) { } else { } } }
プロパティ設定あり
class MyClass { // OK public MyClass(){} // OK public static void main(String[] args) { if (foo) { } else { } } }