Checkstyle / Module / Whitespace



EmptyForIteratorPad

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

for 文のイテレーションの部分(3つめの要素のところ)がなにもない場合に空白を許可するかしないかをチェックします。

プロパティ名デフォルト概要
optionPad Policynospace空のイテレーション部分の規約

記述サンプル

  • Standard Checkstyle
    <module name = "EmptyForIteratorPad">
        <property name = "option" value = "space" />
    </module>
  • Plug-in Checkstyle
    <rule-configuration
        classname = "com.puppycrawl.tools.checkstyle.checks.EmptyForIteratorPadCheck"
        severity = "warning">
        <config-properties>
            <config-property name = "option" value = "space" />
        </config-properties>
    </rule-configuration>

チェックサンプル

<module name = "EmptyForIteratorPad">
    <property name = "option" value = "space" />
</module>

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

OK!  for (; i < lists.max(); ) {
Boo! for (; i < lists.max();) {

NoWhitespaceAfter

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

トークンの後に余計な空白を入れていないかをチェックします。

プロパティ名デフォルト概要
allowLineBreaksBooleantrue改行は認めるか?
tokensARRAY_INIT, BNOT, DEC, DOT, INC, LNOT, UNARY_MINUS, UNARY_PLUSすべてチェック対象を選択

記述サンプル

  • Standard Checkstyle
    <module name = "NoWhitespaceAfter">
        <property name = "allowLineBreaks" value = "no" />
        <property name = "tokens" value = "DEC, DOT, INC" />
    </module>
  • Plug-in Checkstyle
    <rule-configuration
        classname = "com.puppycrawl.tools.checkstyle.checks.NoWhitespaceAfterCheck"
        severity = "warning">
        <config-properties>
            <config-property name = "allowLineBreaks" value = "no" />
            <config-property name = "tokens" value = "DEC, DOT, INC" />
        </config-properties>
    </rule-configuration>

チェックサンプル

<module name = "NoWhitespaceAfter">
    <property name = "allowLineBreaks" value = "no" />
    <property name = "tokens" value = "DOT" />
</module>

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

Boo! anObject.veryVeryVeryVeryVeryLongNameMethod().
         run();
OK!  anObject.veryVeryVeryVeryVeryLongNameMethod().run();

NoWhitespaceBefore

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

トークンの前に余計な空白を入れていないかをチェックします。

プロパティ名デフォルト概要
allowLineBreaksBooleanfalse改行は認めるか?
tokensSEMI, DOT, POST_DEC, POST_INCSEMI, POST_DEC, POST_INCチェック対象を選択

記述サンプル

  • Standard Checkstyle
    <module name = "NoWhitespaceBefore">
        <property name = "allowLineBreaks" value = "no" />
        <property name = "tokens" value = "DOT, POST_DEC, POST_INC" />
    </module>
  • Plug-in Checkstyle
    <rule-configuration
        classname = "com.puppycrawl.tools.checkstyle.checks.NoWhitespaceBeforeCheck"
        severity = "warning">
        <config-properties>
            <config-property name = "allowLineBreaks" value = "no" />
            <config-property name = "tokens" value = "DOT, POST_DEC, POST_INC" />
        </config-properties>
    </rule-configuration>

チェックサンプル

<module name = "NoWhitespaceBefore">
    <property name = "allowLineBreaks" value = "true" />
    <property name = "tokens" value = "SEMI, POST_INC" />
</module>

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

OK!  i
     ++
     ;
Boo! i++;
Boo! i ++;
Boo! i++ ;

OperatorWrap

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

一文が複数行に渡り、且つ行の区切りにオペレータがきた場合のオペレータの位置をチェックします。

プロパティ名デフォルト概要
optionOperator Wrap Policynlオペレータの位置の規定
tokensASSIGN, BAND, BAND_ASSIGN, BOR, BOR_ASSIGN, BSR, BSR_ASSIGN, BXOR, BXOR_ASSIGN, COLON, DIV, DIV_ASSIGN, EQUAL, GE, GT, LAND, LE, LITERAL_INSTANCEOF, LOR, LT, MINUS, MINUS_ASSIGN, MOD, MOD_ASSIGN, NOT_EQUAL, PLUS, PLUS_ASSIGN, QUESTION, SL, SL_ASSIGN, SR, SR_ASSIGN, STAR, STAR_ASSIGNBAND, BOR, BSR, BXOR, COLON, DIV, EQUAL, GE, GT, LAND, LE, LITERAL_INSTANCEOF, LOR, LT, MINUS, MOD, NOT_EQUAL, PLUS, QUESTION, SL, SR, STARチェック対象を選択

記述サンプル

  • Standard Checkstyle
    <module name = "OperatorWrap">
        <property name = "option" value = "eol" />
        <property name = "tokens"
                  value = "ASSIGN, DIV_ASSIGN, MINUS_ASSIGN, PLUS_ASSING, STAR_ASSIGN" />
    </module>
  • Plug-in Checkstyle
    <rule-configuration
        classname = "com.puppycrawl.tools.checkstyle.checks.OperatorWrapCheck"
        severity = "warning">
        <config-properties>
            <config-property name = "option" value = "eol" />
            <config-property name = "tokens"
                             value = "ASSIGN, DIV_ASSIGN, MINUS_ASSIGN, PLUS_ASSING, STAR_ASSIGN" />
        </config-properties>
    </rule-configuration>

チェックサンプル

<module name = "OperatorWrap">
    <property name = "option" value = "nl" />
    <property name = "tokens" value = "LOR" />
</module>

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

Boo! if (condition.isActive(arbitraryObject) ||
         condition.isWait(arbitraryObject)) {
OK!  if (condition.isActive(arbitraryObject)
         || condition.isWait(arbitraryObject)) {

ParenPad

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

丸括弧内のスペースによる整形をチェックします。

プロパティ名デフォルト概要
optionPad Policynospace空白を入れるか入れないか?
tokensCTOR_CALL, LPAREN, METHOD_CALL, RPAREN, SUPER_CTOR_CALL, TYPECASTすべてチェック対象を選択

記述サンプル

  • Standard Checkstyle
    <module name = "ParenPad">
        <property name = "option" value = "space" />
        <property name = "tokens" value = "TYPECAST" />
    </module>
  • Plug-in Checkstyle
    <rule-configuration
        classname = "com.puppycrawl.tools.checkstyle.checks.ParenPadCheck"
        severity = "warning">
        <config-properties>
            <config-property name = "option" value = "space" />
            <config-property name = "tokens" value = "TYPECAST" />
        </config-properties>
    </rule-configuration>

チェックサンプル

<module name = "ParenPad">
    <property name = "option" value = "space" />
    <property name = "tokens" value = "TYPECAST" />
</module>

とすると、以下のようになる。

Boo! Employee employee = (Employee)people.getPerson("Hoge");
OK!  Employee employee = ( Employee )people.getPerson("Hoge");
OK!  Employee employee = ( Employee)people.getPerson("Hoge");

3番目の例は、チェックに引っかかって欲しいはず。このときは、RPAREN も入れる必要がある。

<module name = "ParenPad">
    <property name = "option" value = "space" />
    <property name = "tokens" value = "TYPECAST, RPAREN" />
</module>

とすれば、先ほどの例の結果はこのように変わる。

Boo! Employee employee = (Employee)people.getPerson("Hoge");
OK!  Employee employee = ( Employee )people.getPerson("Hoge");
Boo! Employee employee = ( Employee)people.getPerson("Hoge");

TypecastParenPad

TabCharacter

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

タブ文字がないことをチェックします。

Rationale: 開発者が、ソースコードを読むためにエディタのタブの幅の設定をいじる必要がないようにすべきである。Apache Jakarta コーディング標準から抜粋: 分散している開発環境では、CVS の発するメッセージはメーリングリストを介して送られる。もしタブが使われていると、そのメールを読むのはほとんど不可能でしょう。

記述サンプル

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

WhitespaceAfter

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

トークンの直後に空白が存在するかをチェックします。

プロパティ名デフォルト概要
tokensCOMMA, SEMI, TYPECASTすべてチェック対象を選択

記述サンプル

  • Standard Checkstyle
    <module name = "WhitespaceAfter">
        <property name = "tokens" value = "COMMA, SEMI" />
    </module>
  • Plug-in Checkstyle
    <rule-configuration
        classname = "com.puppycrawl.tools.checkstyle.checks.WhitespaceAfterCheck"
        severity = "warning">
        <config-properties>
            <config-property name = "tokens" value = "COMMA, SEMI" />
        </config-properties>
    </rule-configuration>

チェックサンプル

<module name = "WhitespaceAfter">
    <property name = "tokens" value = "COMMA, SEMI, TYPECAST" />
</module>

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

OK!  String[] labels = new String[] {"Hoge", "Foo", "Bar", };
Boo! String[] lables = new String[] {"Hoge","Foo","Bar",};
OK!  for (int i = 0; i < labels.length; i++) {
Boo! for (int i = 0;i < lables.length;i++) {
OK!  Employee employee = (Employee) people.getPerson("Hoge");
Boo! Employee employee = (Employee)people.getPersion("Hoge");

WhitespaceAround

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

トークンの両脇に空白があることをチェックします。

プロパティ名デフォルト概要
tokensASSIGN, BAND, BAND_ASSIGN, BOR, BOR_ASSIGN, BSR, BSR_ASSIGN, BXOR, BXOR_ASSIGN, COLON, DIV, DIV_ASSIGN, EQUAL, GE, GT, LAND, LCURLY, LE, LITERAL_ASSERT, LITERAL_CATCH, LITERAL_DO, LITERAL_ELSE, LITERAL_FINALLY, LITERAL_FOR, LITERAL_IF, LITERAL_RETURN, LITERAL_SYNCHRONIZED, LITERAL_TRY, LITERAL_WHITE, LOR, LT, MINUS, MINUS_ASSIGN, MOD, MOD_ASSIGN, NOT_EQUAL, PLUS, PLUS_ASSIGN, QUESTION, RCURLY, SL, SLIST, SL_ASSIGN, SR, SR_ASSIGN, STAR, STAR_ASSIGNすべてチェック対象を選択

記述サンプル

  • Standard Checkstyle
    <module name = "WhitespaceAround">
        <property name = "tokens"
                  value = "ASSIGN, DIV_ASSIGN, MINUS_ASSIGN, PLUS_ASSING, STAR_ASSIGN" />
    </module>
  • Plug-in Checkstyle
    <rule-configuration
        classname = "com.puppycrawl.tools.checkstyle.checks.WhitespaceAroundCheck"
        severity = "warning">
        <config-properties>
            <config-property name = "tokens"
                             value = "ASSIGN, DIV_ASSIGN, MINUS_ASSIGN, PLUS_ASSING, STAR_ASSIGN" />
        </config-properties>
    </rule-configuration>

チェックサンプル

<module name = "WhitespaceAround">
    <property name = "tokens" value = "ASSIGN, STAR" />
</module>

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

OK!  String name = new String("hoge");
Boo! String name= new String("hoge");
Boo! String name =new String("hoge");
OK!  int amount = minute * SECOND_PER_MINUTE;
Boo! int amount = minute*SECOND_PER_MINUTE;