Checkstyle チェック項目ーWhitespace

Checkstyleチェック項目:Whitespace

CheckStyle公式ドキュメント

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 {
        }
    }
}