Checkstyle Javaルール

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

LeftCurly

CheckStyle公式ドキュメント

検証環境

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


チェック概要

チェック追加バージョン
Checkstyle 3.0

コードブロックの左中括弧({)の配置をチェックする。

左中括弧の配置ルールの設定にはLeftCurlyOptionを指定する。

説明
eol 中括弧は常に行末に配置する
nl 中括弧は常に改行して行頭に配置する
nlow 中括弧に接続された文/式/宣言が複数行にまたがる場合は、nlルールを適用し、それ以外の場合はeolルールを適用する
// eol
// OK
if (condition) {
}

// NG
if (condition) 
{
}

// nl
// OK
if (condition) 
{
}

// NG
if (condition) {
}

// nlow
// OK
if (condition) {
}
if (condition1 && condition2 &&
        condition3 && condition4)
{
}

// NG
if (condition) 
{
}
if (condition1 && condition2 &&
        condition3 && condition4) {
}

プロパティ

プロパティ デフォルト値 説明 追加バージョン
option LeftCurlyOption eol 左中括弧の配置ポリシー 3.0
ignoreEnums boolean true 左中括弧の配置ポリシーがEOLの場合、Enumのチェックを無視するかどうか 6.9
tokens トークンの サブセット ANNOTATION_DEF,
CLASS_DEF,
CTOR_DEF,
ENUM_CONSTANT_DEF,
ENUM_DEF,
INTERFACE_DEF,
LAMBDA,
LITERAL_CASE,
LITERAL_CATCH,
LITERAL_DEFAULT,
LITERAL_DO,
LITERAL_ELSE,
LITERAL_FINALLY,
LITERAL_FOR,
LITERAL_IF,
LITERAL_SWITCH,
LITERAL_SYNCHRONIZED,
LITERAL_TRY,
LITERAL_WHILE,
METHOD_DEF,
OBJBLOCK,
STATIC_INIT,
RECORD_DEF,
COMPACT_CTOR_DEF
チェック対象のトーク 3.0

トークンのサブセットには以下の値が設定可能

説明
ANNOTATION_DEF アノテーション宣言
CLASS_DEF クラス宣言
COMPACT_CTOR_DEF 引数なしコンストラクタ宣言
CTOR_DEF コンストラクタ宣言
ENUM_CONSTANT_DEF Enum定数宣言
ENUM_DEF Enum宣言
INTERFACE_DEF インターフェース宣言
LAMBDA ラムダ式->
LITERAL_CASE case
LITERAL_CATCH catch
LITERAL_DEFAULT default
LITERAL_DO do
LITERAL_ELSE else
LITERAL_FINALLY finally
LITERAL_FOR for
LITERAL_IF if
LITERAL_SWITCH switch
LITERAL_SYNCHRONIZED symchronized
LITERAL_TRY try
LITERAL_WHILE while
METHOD_DEF メソッド宣言
OBJBLOCK オブジェクトブロック
RECORD_DEF レコード宣言
STATIC_INIT スタティックイニシャライザ

設定+チェック実行結果

プロパティ設定なし

設定ファイル記述方法

<module name="Checker">
    <module name="TreeWalker">
        <module name="LeftCurly"/>
    </module>
</module>

チェック実行例

// NG 左中括弧は行末に配置する
class MyClass
{
    // NG 左中括弧は行末に配置する
    private interface TestInterface
    {
    }

    // OK
    private
    class
    TestClass {
    }
}

プロパティ設定あり

option

左中括弧の配置ポリシーを設定する。

設定ファイル記述方法

<module name="Checker">
    <module name="TreeWalker">
        <module name="LeftCurly">
            <property name="option" value="nl"/>
        </module>
    </module>
</module>

チェック実行例

左中括弧の配置ポリシーが「nl」なので、左中括弧は常に改行して記述する。

// OK
class MyClass
{
    // OK
    private interface TestInterface
    {
    }

    // NG 左中括弧は改行して行頭に配置する
    private
    class
    TestClass {
    }
}

ignoreEnums

trueを設定した場合、左中括弧のポリシーが「EOL(中括弧は常に行末に配置する)」の場合、Enumをチェック対象外とする。(デフォルト設定:true)

設定ファイル記述方法

<module name="Checker">
    <module name="TreeWalker">
        <module name="LeftCurly">
            <property name="ignoreEnums" value="false"/>
        </module>
    </module>
</module>

チェック実行例

enumでも左中括弧のの後は常に行末に配置する必要がある。

class MyClass {
    // NG
    enum Colors {RED,
        BLUE,
        GREEN;
    }
    
    // OK
    enum Colors {
        RED,
        BLUE,
        GREEN;
    }
}

tokens

チェック対象のトークンをコンマ区切りで記述する。

設定ファイル記述方法

<module name="Checker">
    <module name="TreeWalker">
        <module name="LeftCurly">
            <property name="tokens" value="CLASS_DEF,INTERFACE_DEF"/>
        </module>
    </module>
</module>

チェック実行例

// NG 左中括弧は行末に配置する
class MyClass
{
    // OK メソッド宣言はチェック対象外
    public void doSomething()
    {
    }
}