Checkstyle Javaルール

CheckstyleのJavaルールについて1つずつまとめます

EmptyLineSeparator (Checkstyle Java Whitespace)


CheckStyle公式ドキュメント#EmptyLineSeparator

バージョン

Checkstyleバージョン:10.15.0
Javaバージョン:17


チェック追加Ver
Checkstyle 5.8

以下の前に空行が挿入されているかどうかをチェックする。
ステートメントだけでなく、実装やドキュメントのコメントやブロックの前に空の行区切りがあるかどうかもチェックする。

  • package
  • import
  • fields
  • constructors
  • methods
  • nested classes
  • static initializers
  • instance initializers

プロパティ

プロパティ デフォルト値 説明 追加Ver
allowNoEmptyLineBetweenFields boolean false フィールド間の空行なしを許可するかどうか 5.8
allowMultipleEmptyLines boolean true クラスメンバー間に複数の空行を許可するかどうか 6.3
allowMultipleEmpty
LinesInsideClassMembers
boolean true クラス内(メソッド内の処理等)に複数の空行を許可するかどうか 6.18
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
チェック対象のトーク 5.8

トークンのサブセットの設定値

説明
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="Checker">
    <module name="TreeWalker">
        <module name="EmptyLineSeparator"/>
    </module>
</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() {}
}

プロパティを設定した場合

allowNoEmptyLineBetweenFields

フィールド間の空行なしを許可するかどうか
デフォルト:false

設定ファイル記述方法

<module name="Checker">
    <module name="TreeWalker">
        <module name="EmptyLineSeparator">
            <property name="allowNoEmptyLineBetweenFields" value="true" />
        </module>
    </module>
</module>

チェック実行例

// OK フィールドの間に空行がなくてもOK
///////////////////////////////////////////////////
//HEADER
///////////////////////////////////////////////////

package com.whitespace;

import java.io.Serializable;

class MyClass {
  int var1 = 1;
  int var2 = 2;

  public void foo() {}
}

allowMultipleEmptyLines

クラスメンバー間に複数の空行を許可するかどうか
デフォルト:true

設定ファイル記述方法

<module name="Checker">
    <module name="TreeWalker">
        <module name="EmptyLineSeparator">
            <property name="allowMultipleEmptyLines" value="false" />
        </module>
    </module>
</module>

チェック実行例

// NG フィールドの間に複数行の空行が存在している
///////////////////////////////////////////////////
//HEADER
///////////////////////////////////////////////////

package com.whitespace;

import java.io.Serializable;

class MyClass {
  int var1 = 1;


  int var2 = 2;

  public void foo() {}
}

// OK
///////////////////////////////////////////////////
//HEADER
///////////////////////////////////////////////////

package com.whitespace;

import java.io.Serializable;

class MyClass {
  int var1 = 1;

  int var2 = 2;

  public void foo() {}
}

allowMultipleEmptyLinesInsideClassMembers

クラスメンバーの中で複数の空行を許可するかどうか
デフォルト:true

設定ファイル記述方法

<module name="Checker">
    <module name="TreeWalker">
        <module name="EmptyLineSeparator">
            <property name="allowMultipleEmptyLinesInsideClassMembers" value="false" />
        </module>
    </module>
</module>

チェック実行例

// NG メソッドの中に複数行の空行が存在している
///////////////////////////////////////////////////
//HEADER
///////////////////////////////////////////////////

package com.whitespace;

import java.io.Serializable;

class MyClass {
  int var1 = 1;

  int var2 = 2;

  public void foo() {
    int var4 = 4;


    int var5 = 5;
  }
}

// OK
///////////////////////////////////////////////////
//HEADER
///////////////////////////////////////////////////

package com.whitespace;

import java.io.Serializable;

class MyClass {
  int var1 = 1;

  int var2 = 2;

  public void foo() {
    int var4 = 4;

    int var5 = 5;
  }
}

tokens

チェック対象のトークン。

設定ファイル記述方法

<module name="Checker">
    <module name="TreeWalker">
        <module name="EmptyLineSeparator">
            <property name="tokens" value="VARIABLE_DEF, METHOD_DEF"/>
        </module>
    </module>
</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 変数宣言とメソッド宣言の間には1行以上の空行が必要
///////////////////////////////////////////////////
//HEADER
///////////////////////////////////////////////////

package com.whitespace;
import java.io.Serializable;
class MyClass {
  public static final int FOO_CONST = 1;

  public void foo() {}
}