Checkstyle Javaルール

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

RightCurly

CheckStyle公式ドキュメント

検証環境

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


チェック概要

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

コードブロックの右中括弧(})の配置をチェックする。 チェック対象は以下の通り。

配列、ラムダ、クラスインスタンスの式ブロックの右中括弧についてはissue #5945を参照
enum定数の右中括弧についてはissue #7519を参照

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

説明
alone 右中括弧は常に行に単独で配置する
alone_or_singleline 右中括弧は基本的には行に単独で配置するが1行のステートメントの場合は同行に配置する
same alone_or_singlelineと基本的には同じだが、try-catchなどで、tryの}catchは同行に配置する
// alone
// OK
try {
}
catch (Exception ex) {
}
finally {
}

// NG
try {
} catch (Exception ex) {
} finally {
}

// alone_or_singleline
// OK
try {
}
catch (Exception ex) {
}
finally {
}

public long getId() { return id; }

// NG
try {
} catch (Exception ex) {
} finally {
}

public long getId() { return id;
}

// same
// OK
try {
} catch (Exception ex) {
} finally {
}

if (a > 0) {
}
int i = 5;

// NG
try {
}
catch (Exception ex) {
}
finally {
}

if (a > 0) {
} int i = 5;

プロパティ

プロパティ デフォルト値 説明 追加バージョン
option RightCurlyOption same 右中括弧の配置ポリシー 3.0
tokens トークンの サブセット LITERAL_TRY,
LITERAL_CATCH,
LITERAL_FINALLY,
LITERAL_IF,
LITERAL_ELSE
チェック対象のトーク 3.0

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

説明
ANNOTATION_DEF アノテーション宣言
CLASS_DEF クラス宣言
COMPACT_CTOR_DEF 引数なしコンストラクタ宣言
CTOR_DEF コンストラクタ宣言
ENUM_DEF Enum宣言
INSTANCE_INIT インスタンスイニシャライザ
INTERFACE_DEF インターフェース宣言
LITERAL_DO do
LITERAL_ELSE else
LITERAL_FINALLY finally
LITERAL_FOR for
LITERAL_IF if
LITERAL_TRY try
LITERAL_WHILE while
METHOD_DEF メソッド宣言
RECORD_DEF レコード宣言
STATIC_INIT スタティックイニシャライザ

設定+チェック実行結果

プロパティ設定なし

設定ファイル記述方法

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

チェック実行例

public class MyClass {

    public void foo(boolean isActive) {

        if (isActive) {
            bar();    
        }
        // NG 「}」とelseは同行に配置する
        else {
            bar();
        }

        if (foo) {
            bar();
        // OK
        } else {
            bar();
        }


        // OK
        if (foo) { bar(); }
    }
}

プロパティ設定あり

option

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

設定ファイル記述方法

<module name="Checker">
    <module name="TreeWalker">
        <module name="RightCurly">
            <property name="option" value="alone"/>
        </module>
    </module>
</module>

チェック実行例

public class MyClass {

    public void foo(boolean isActive) {

        if (isActive) {
            bar();    
        }
        // OK
        else {
            bar();
        }

        if (foo) {
            bar();
        // NG 右括弧は行に単独で配置
        } else {
            bar();
        }


        // NG 右括弧は行に単独で配置
        if (foo) { bar(); }
    }
}

tokens

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

設定ファイル記述方法

<module name="Checker">
    <module name="TreeWalker">
        <module name="RightCurly">
            <property name="tokens" value="LITERAL_IF"/>
        </module>
    </module>
</module>

チェック実行例

public class MyClass {

    public void foo(boolean isActive) {

        if (isActive) {
            bar();    
        }
        // NG 「}」とelseは同行に配置する
        else {
            bar();
        }

        if (foo) {
            bar();
        // OK
        } else {
            bar();
        }


        // OK for文はチェック対象外
        for (int i = 0; i < 3; i++) { bar(i); 
        }
    }
}