Checkstyle / Module / Blocks



EmptyBlock

親モジュールTreeWalker
実装クラスcom.puppycrawl.tools.checkstyle.checks.EmptyBlockCheck(≦3.1)
com.puppycrawl.tools.checkstyle.checks.blocks.EmptyBlockCheck(3.2)

空のブロックがないかをチェックします。

プロパティ名デフォルト概要
optionBlock Policystatement空とみなすブロックの規定
tokensLITERAL_CATCH, LITERAL_DO, LITERAL_ELSE, LITERAL_FINALLY, LITERAL_IF, LITERAL_FOR, LITERAL_TRY, LITERAL_WHILE, INSTANCEOF_INIT(Since 3.2), STATIC_INITすべてチェックするブロックを指定

記述サンプル

  • Standard Checkstyle
    <module name = "EmptyBlock">
        <property name = "option" value = "statement" />
        <property name = "tokens" value = "LITERAL_FINALLY, STATIC_INIT" />
    </module>
  • Plug-in Checkstyle
    <rule-configuration
        classname = "com.puppycrawl.tools.checkstyle.checks.EmptyBlockCheck"
        severity = "warning">
        <config-properties>
            <config-property name = "option" value = "statement" />
            <config-property name = "tokens" value = "LITERAL_FINALLY, STATIC_INIT" />
        </config-properties>
    </rule-configuration>

チェックサンプル

<module name = "EmptyBlock">
    <property name = "option" value = "text" />
    <property name = "tokens" value = "LITERAL_FINALLY" />
</module>

としたとき、以下のようになる。

OK!  finally {
         conn.close();
     }
Boo! finally {
         // do nothing
     }
Boo! finally {
     }

2番目のコメントのみのブロックを認めたい場合は、option に text を指定する。

LeftCurly

親モジュールTreeWalker
実装クラスcom.puppycrawl.tools.checkstyle.checks.LeftCurlyCheck(≦3.1)
com.puppycrawl.tools.checkstyle.checks.blocks.LefCurlyCheck(3.2)

ブロックの開始文字である "{" の位置をチェックします。

プロパティ名デフォルト概要
optionLeft Curly Brace Policyeol"{"をどこに置くかの規定
maxLineLengthInteger80一行の最大文字数*1
tokensCLASS_DEF, CTOR_DEF, INTERFACE_DEF, LITERAL_CATCH, LITERAL_DO, LITERAL_ELSE, LITERAL_FINALLY, LITERAL_IF, LITERAL_SWITCH, LITERAL_SYNCHRONIZED, LITERAL_FOR, LITERAL_TRY, LITERAL_WHILE, METHOD_DEFすべてチェックするブロックを指定

記述サンプル

  • Standard Checkstyle
    <module name = "LeftCurly">
        <property name = "option" value = "nlow" />
        <property name = "maxLineLength" value = "100" />
        <property name = "tokens" value = "LITERAL_ELSE, LITERAL_IF" />
    </module>
  • Plug-in Checkstyle
    <rule-configuration
        classname = "com.puppycrawl.tools.checkstyle.checks.LeftCurlyCheck"
        severity = "warning">
        <config-properties>
            <config-property name = "option" value = "nlow" />
            <config-property name = "maxLineLength" value = "100" />
            <config-property name = "tokens" value = "LITERAL_ELSE, LITERAL_IF" />
        </config-properties>
    </rule-configuration>

チェックサンプル

<module name = "LeftCurly">
    <property name = "option" value = "eol" />
    <property name = "tokens" value = "CLASS_DEF" />
</module>

としたとき、以下のようになる。

OK!  public class Employee implements Person {
Boo! public class Employee implements Person
     {

行の長さによってチェックを替えたい場合は、nlow を使う。

<module name = "LeftCurly">
    <property name = "option" value = "nlow" />
    <property name = "maxLineLength" value = "40" />
    <property name = "tokens" value = "CLASS_DEF" />
</module>

としたとき、以下のようになる。

OK!  public class Employee {
Boo! public class Employee implements Person {
OK!  public class Employee implements Person
     {

NeedBraces

親モジュールTreeWalker
実装クラスcom.puppycrawl.tools.checkstyle.checks.NeedBracesCheck(≦3.1)
com.puppycrawl.tools.checkstyle.checks.blocks.NeedBracesCheck(3.2)

ブロック内に1文しかない場合に大括弧("{" や "}")を省略できるが、これを省略しないようにチェックします。

プロパティ名デフォルト概要
tokensLITERAL_DO, LITERAL_ELSE, LITERAL_IF, LITERAL_FOR, LITERAL_WHILEすべてチェックするブロックを指定

記述サンプル

  • Standard Checkstyle
    <module name = "NeedBraces">
        <property name = "tokens" value = "LITERAL_ELSE, LITERAL_IF, LITERAL_FOR" />
    </module>
  • Plug-in Checkstyle
    <rule-configuration
        classname = "com.puppycrawl.tools.checkstyle.checks.NeedBracesCheck"
        severity = "warning">
        <config-properties>
            <config-property name = "tokens" value = "LITERAL_ELSE, LITERAL_IF, LITERAL_FOR" />
        </config-properties>
    </rule-configuration>

チェックサンプル

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

としたとき、以下のようになる。

OK!  if (isAvailable()) {
         someOperation();
     }
Boo! if (isAvailable())
         someOperation();

RightCurly

親モジュールTreeWalker
実装クラスcom.puppycrawl.tools.checkstyle.checks.RightCurlyCheck(≦3.1)
com.puppycrawl.tools.checkstyle.checks.blocks.RightCurlyCheck(3.2)

ブロックの終了文字である "}" の位置をチェックします。LITERAL_CATCH, LITERAL_TRY の場合は、(Try 節や Catch節の)次の Catch 節か Finally 節のチェックを、LITERAL_ELSE は、その Else文及び Else If 節のチェックを行います。

プロパティ名デフォルト概要
optionRight Curly Brace Policysame"}"をどこに置くかの規定
tokensLITERAL_CATCH, LITERAL_ELSE, LITERAL_TRYすべてチェックするブロックを指定

記述サンプル

  • Standard Checkstyle
    <module name = "RightCurly">
        <property name = "option" value = "alone" />
        <property name = "tokens" value = "LITERAL_CATCH, LITERAL_TRY" />
    </module>
  • Plug-in Checkstyle
    <rule-configuration
        classname = "com.puppycrawl.tools.checkstyle.checks.RightCurlyCheck"
        severity = "warning">
        <config-properties>
            <config-property name = "option" value = "alone" />
            <config-property name = "tokens" value = "LITERAL_CATCH, LITERAL_TRY" />
        </config-properties>
    </rule-configuration>

チェックサンプル

<module name = "RightCurly">
    <property name = "option" value = "alone" />
    <property name = "tokens" value = "LITERAL_ELSE" />
</module>

としたとき、以下のようになる。

OK!  }
     else {
Boo! } else {

AvoidNestedBlocks

親モジュールTreeWalker
実装クラスcom.puppycrawl.tools.checkstyle.checks.AvoidNestedBlockCheck(≦3.1)
com.puppycrawl.tools.checkstyle.checks.blocks.AvoidNestedBlockCheck(3.2)

無用にネストしたブロックをチェックします。

Rationale: ネストしたブロックは、デバッグの過程で残してしまうことがある。これは、読む側を混乱させてしまう。

プロパティ名デフォルト概要
allowInSwitchCaseBooleanfalse(Since 3.2)長いので後述

allowInSwitchCase とは、true にすると case 中のすべての文を含んだブロックの使用を許可することができます。case 節中は、ブロックのようになっていながら、暗黙的にブロックとして扱われるわけではありません。そのため、ブロックとして扱いたい処理をする場合は、明示的にブロックを作る必要があるためです。

記述サンプル

  • Standard Checkstyle
    <module name = "AvoidNestedBlock" />
  • Plug-in Checkstyle
    <rule-configuration
        classname = "com.puppycrawl.tools.checkstyle.checks.AvoidNestedBlockCheck"
        severity = "warning">
        <config-properties />
    </rule-configuration>

チェックサンプル

例えば、以下のようなものをチェックに引っかけることができます。

boolean failOnError = true;
{
    boolean failOnError = false;  // ここがだめ
}
if (failOnError) {


*1 option で nlow を選んだときに関係する