Checkstyle Javaルール

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

NeedBraces

CheckStyle公式ドキュメント

検証環境

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


チェック概要

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

コードブロックの周りに中括弧があるかどうかをチェックする。

プロパティ

プロパティ デフォルト値 説明 追加バージョン
allowSingleLineStatement boolean false 中括弧のない1行の文を許可するかどうか 6.5
allowEmptyLoopBody boolean false 空のループを許可するかどうか 6.12.1
tokens トークンの サブセット LITERAL_DO,
LITERAL_ELSE,
LITERAL_FOR,
LITERAL_IF,
LITERAL_WHILE
チェック対象のトーク 3.0

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

説明
LAMBDA ラムダ式->
LITERAL_CASE case
LITERAL_DEFAULT default
LITERAL_DO do
LITERAL_ELSE else
LITERAL_FOR for
LITERAL_IF if
LITERAL_WHILE while

設定+チェック実行結果

プロパティ設定なし

設定ファイル記述方法

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

チェック実行例

// NG if文の処理が1行であっても、中括弧で囲む必要がある
if (obj.isValid()) return true;

// OK
if (true) {
    return true;
}

// OK
for (int i = 0; i < 5; i++) {
     ++count;
}

// NG 処理のないループ処理は書かない
for (int j = 0; j < 10; j++);

プロパティ設定あり

allowSingleLineStatement

trueを設定した場合、中括弧のない1行の文を許可する。(デフォルト:false)

設定ファイル記述方法

<module name="Checker">
    <module name="TreeWalker">
        <module name="NeedBraces">
            <property name="allowSingleLineStatement" value="true"/>
        </module>
    </module>
</module>

チェック実行例

// OK 「allowSingleLineStatement=true」なので1行の処理の場合は中括弧がなくてもOK
if (obj.isValid()) return true;

// OK
if (true) {
    return true;
}

// OK
for (int i = 0; i < 5; i++) {
     ++count;
}

// NG 処理のないループ処理は書かない
for (int j = 0; j < 10; j++);

allowEmptyLoopBody

trueを設定した場合、空のループを許可する。(デフォルト:false)

設定ファイル記述方法

<module name="Checker">
    <module name="TreeWalker">
        <module name="NeedBraces">
            <property name="allowEmptyLoopBody" value="true"/>
        </module>
    </module>
</module>

チェック実行例

// NG if文の処理が1行であっても、中括弧で囲む必要がある
if (obj.isValid()) return true;

// OK
if (true) {
    return true;
}

// OK
for (int i = 0; i < 5; i++) {
     ++count;
}

// OK 「allowEmptyLoopBody=true」なので処理のないループ処理を書くことが出来る
for (int j = 0; j < 10; j++);

tokens

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

設定ファイル記述方法

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

チェック実行例

// NG if文の処理が1行であっても、中括弧で囲む必要がある
if (obj.isValid()) return true;

// OK
if (true) {
    return true;
}

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

// OK for文はチェック対象外
for (int j = 0; j < 10; j++);