Checkstyle チェック項目ーMiscellaneous

Checkstyleチェック項目:Miscellaneous

CheckStyle公式ドキュメント

ver 10.3.1

ArrayTypeStyle

配列の型定義のスタイルをチェックする。
JavaスタイルとCスタイルから選択可能。

  • Javaスタイル(デフォルト):public static void main(String args)
  • Cスタイル:public static void main(String args)

プロパティ

プロパティ デフォルト値 説明
javaStyle boolean true Javaスタイル(true)とCスタイル(false)のどちらを強制するか

チェック設定例

プロパティ設定なし

<module name="ArrayTypeStyle"/>

プロパティ設定あり

<module name="ArrayTypeStyle">
    <property name="javaStyle" value="false"/>
</module>

チェック実行例

プロパティ設定なし

public class MyClass {
    // OK
    int[] nums;
    
    // NG Cスタイル
    String strings[];

    // OK
    char[] toCharArray() {
        return null;
    }

    // NG Cスタイル
    byte getData()[] {
        return null;
    }
}

プロパティ設定あり

public class MyClass {
    // NG Javaスタイル
    int[] nums;
    
    // OK
    String strings[];

    // NG Javaスタイル
    char[] toCharArray() {
        return null;
    }

    // OK
    byte getData()[] {
        return null;
    }
}

AvoidEscapedUnicodeCharacters

Unicodeエスケープ(ex. \u221e)の使用を制限する。

プロパティ

プロパティ デフォルト値 説明
allowEscapesForControlCharacters boolean false 印字不可能な制御文字にエスケープを使用できるようにするかどうか
allowByTailComment boolean false トレイルコメント(コードと同行のコメント)が存在する場合、エスケープを使用できるようにするかどうか
allowIfAllCharactersEscaped boolean false リテラル内のすべての文字がエスケープされている場合にエスケープを使用できるようにするかどうか
allowNonPrintableEscapes boolean false 印字不可能な空白文字にエスケープを使用できるようにするかどうか

チェック設定例

プロパティ設定なし

<module name="AvoidEscapedUnicodeCharacters"/>

プロパティ設定あり

<module name="AvoidEscapedUnicodeCharacters">
    <property name="allowByTailComment" value="true"/>
</module>

チェック実行例

プロパティ設定なし

// OK
String unitAbbrev = "μs";
// NG
String unitAbbrev = "\u03bcs";
// OK
return '\ufeff' + content; 

プロパティ設定あり

String unitAbbrev = "μs";      // OK, a normal String
String unitAbbrev = "\u03bcs"; // OK, Greek letter mu, "s"
return '\ufeff' + content;
// -----^--------------------- NG, comment is not used within same line.

CommentsIndentation

コメントと周囲のコードとの間のインデントを制御する。
コメントは周囲のコードと同じレベルでインデントされる。

プロパティ

プロパティ デフォルト値 説明
tokens トークンの サブセット SINGLE_LINE_COMMENT, BLOCK_COMMENT_BEGIN チェック対象のトーク

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

説明
SINGLE_LINE_COMMENT //
BLOCK_COMMENT_BEGIN /*

チェック設定例

プロパティ設定なし

<module name="CommentsIndentation"/>

プロパティ設定あり

<module name="CommentsIndentation">
    <property name="tokens" value="SINGLE_LINE_COMMENT"/>
</module>

チェック実行例

プロパティ設定なし

/*
 * OK
 */
boolean bool = true;

  /* NG
   * doubleと同じインデントにするべき
   */
double d = 3.14;

プロパティ設定あり

/*
 * OK
 */
boolean bool = true;

  /* OK
   * ブロックコメントはチェック対象外
   */
double d = 3.14;

DescendantToken

他のトークンの下に制限されたトークンがあるかどうかをチェックする。

プロパティ

プロパティ デフォルト値 説明
limitedTokens トークンの サブセット {} 出現回数が制限されているトークンのサブセット
minimumDepth int 0 子孫カウントの最小深度
maximumDepth int 2147483647 子孫カウントの最大深度
minimumNumber int 0 子孫の最小数を指定
maximumNumber int 2147483647 子孫の最大数を指定
sumTokenCounts boolean false 検出されたトークンの数を個々のトークン数の合計から計算するかどうか
minimumMessage String null 最小カウントに達しない場合の違反メッセージ
maximumMessage String null 最大カウントに達しない場合の違反メッセージ
tokens トークンの サブセット empty チェック対象のトーク

チェック設定例

プロパティ設定なし

<module name="CommentsIndentation"/>

プロパティ設定あり

<module name="DescendantToken">
    <property name="tokens" value="LITERAL_SWITCH"/>
    <property name="maximumDepth" value="2"/>
    <property name="limitedTokens" value="LITERAL_DEFAULT"/>
    <property name="minimumNumber" value="1"/>
</module>

チェック実行例

プロパティ設定なし

プロパティ設定がない場合チェックは行われない

プロパティ設定あり

// defaultがないのでNG
switch(num){
  case 1:
    System.out.println("Aクラス");
    break;
  case 2:
    System.out.println("Bクラス");
    break;
  case 3:
    System.out.println("Cクラス");
}

FinalParameters

メソッド、コンストラクタ、catch、for-each ブロックのパラメータが final であるかどうかをチェックする。

プロパティ

プロパティ デフォルト値 説明
ignorePrimitiveTypes boolean false プリミティブ型のパラメータをチェック対象外にするかどうか
tokens トークンの サブセット METHOD_DEF, CTOR_DEF チェック対象のトーク

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

説明
METHOD_DEF メソッド宣言
CTOR_DEF コンストラクタ宣言
LITERAL_CATCH catch
FOR_EACH_CLAUSE 拡張for文

チェック設定例

プロパティ設定なし

<module name="FinalParameters"/>

プロパティ設定あり

<module name="FinalParameters">
    <property name="tokens" value="CTOR_DEF"/>
</module>

チェック実行例

プロパティ設定なし

public class Point {
    // OK
    public Point() {
    }
    
    // OK
    public Point(final int m) {  
    }
  
    // NG パラメータはfinalで宣言する
    public Point(final int m, int n) {
    }
    
    // OK
    public void methodOne(final int x) {
    }
    
    // NG パラメータはfinalで宣言する
    public void methodTwo(int x) { 
    }
    
    // NG パラメータはfinalで宣言する
    public static void main(String[] args) {
    }
}

プロパティ設定あり

public class Point {
    // OK
    public Point() {
    }
    
    // OK
    public Point(final int m) {  
    }
  
    // NG パラメータはfinalで宣言する
    public Point(final int m, int n) {
    }
    
    // OK
    public void methodOne(final int x) {
    }
    
    // OK メソッドはチェック対象外
    public void methodTwo(int x) { 
    }
    
    // OK メソッドはチェック対象外
    public static void main(String[] args) {
    }
}

Indentation

Javaコードのインデントが正しいかどうかをチェックする。

プロパティ

プロパティ デフォルト値 説明
basicOffset int 4 新しいインデントレベルを次の行でどの程度インデントさせるか
braceAdjustment int 0 次の行に移動するときに、中括弧をどの程度インデントさせるか
caseIndent int 4 次の行に移動するときに、caseをどの程度インデントさせるか
throwsIndent int 4 throws節が次の行に来たときに、どの程度インデントさせるか
arrayInitIndent int 4 配列の初期化を次の行で行う際のインデント幅
lineWrappingIndentation int 4 改行がある場合、継続行をどの程度インデントするか
forceStrictCondition boolean false 行の折り返しがある場合、厳密なインデントレベルを強制するかどうか

チェック設定例

プロパティ設定なし

<module name="Indentation"/>

プロパティ設定あり

<module name="Indentation">
    <property name="caseIndent" value="0"/>
</module>

チェック実行例

プロパティ設定なし

// OK
void foo() {
    switch (field) {
        case "value" : bar();
    }
}

プロパティ設定あり

// OK
void foo() {
    switch (field) {
    case "value" : bar();
    }
}

NewlineAtEndOfFile

ファイルの末尾がラインセパレータであるかどうかをチェックする。

プロパティ

プロパティ デフォルト値 説明
lineSeparator LineSeparatorOption lf_cr_crlf ラインセパレーターの種類を指定
fileExtensions String[] all files チェックするファイルの拡張子を指定

〇LineSeparatorOptionには以下の値が設定可能

  • crlf
  • cr
  • lf
  • lf_cr_crlf
  • system

チェック設定例

プロパティ設定なし

<module name="NewlineAtEndOfFile"/>

プロパティ設定あり

<module name="NewlineAtEndOfFile">
    <property name="lineSeparator" value="lf"/>
</module>

チェック実行例

// NG
public class Test1 {⤶
⤶
}

// OK
public class Test {⤶
⤶
}⤶ 

NoCodeInFile

ファイルがコードを含んでいるかどうかをチェックする。

プロパティ

なし

チェック設定例

<module name="NoCodeInFile"/>

チェック実行例

// NG コメントのみでコードが含まれていない
// single-line comment

OrderedProperties

プロパティファイルのキーが正しい順番で並んでいるかどうかをチェックする。

プロパティ

プロパティ デフォルト値 説明
fileExtensions String[] .properties チェック対象のファイルの拡張子

チェック設定例

プロパティ設定なし

<module name="OrderedProperties"/>

プロパティ設定あり

<module name="OrderedProperties">
    <property name="fileExtensions" value=".properties"/>
</module>

チェック実行例

A =65
a =97
key =107 than nothing
key.sub =k is 107 and dot is 46
key.png =value
# NG key.pngはkey.subより上に記述するべき

OuterTypeFilename

外側の型名とファイル名が一致するかどうかをチェックする。

プロパティ

なし

チェック設定例

<module name="OuterTypeFilename"/>

チェック実行例

Test.java

// OK
public class Test {
}

// NG MyClass.javaであるべき
public class MyClass {
}

TodoComment

TODO:コメントに対するチェックを行う。

プロパティ

プロパティ デフォルト値 説明
format Pattern "TODO:" コメントのマッチングに使用する正規表現

チェック設定例

プロパティ設定なし

<module name="TodoComment"/>

プロパティ設定あり

<module name="TodoComment">
    <property name="format" value="(TODO)|(FIXME)"/>
</module>

チェック実行例

プロパティ設定なし

// NG
i++; // TODO: do differently in future
// OK
i++; // todo: do differently in future

プロパティ設定あり

// NG
i++;   // TODO: do differently in future
// OK
i++;   // todo: do differently in future
// NG
i=i/x; // FIXME: handle x = 0 case
// OK
i=i/x; // FIX :  handle x = 0 case 

TrailingComment

コードのある行がコメントで終わっていないことをチェックする。
//コメントの場合、その前に空白のみが存在することをチェックする。

プロパティ

プロパティ デフォルト値 説明
format Pattern "^[\s});]*$" コメントの前に許容される文字列のパターンを指定
legalComment Pattern null 末尾のコメントで許可されるテキストのパターンを指定

チェック設定例

プロパティ設定なし

<module name="TrailingComment"/>

プロパティ設定あり

<module name="TrailingComment">
    <property name="format" value="^\\s*$"/>
</module>

チェック実行例

int a; // Comment! NG

Translation

プロパティファイルのキーに関する一貫性をチェックすることにより、コードの正しい翻訳をチェックする。
1つの同じコンテキストを記述する2つのプロパティファイルは、同じキーを含んでいれば一貫性があると判断される。
多言語対応している場合などに、プロパティファイルに同一のキーがきちんと含まれていることをチェックするのに用いる。

プロパティ

プロパティ デフォルト値 説明
fileExtensions String[] .properties 翻訳ファイルを識別するためのファイルタイプ拡張子を指定
baseName Pattern "^messages.*$" メッセージリソースを含むリソースバンドルのベース名を指定
requiredTranslations String[] {} プロジェクトに存在する、必要な翻訳の言語コードを指定

チェック設定例

プロパティ設定なし

<module name="TrailingComment"/>

プロパティ設定あり

<module name="Translation">
    <property name="fileExtensions" value="properties, translations"/>
</module>

チェック実行例

#messages.properties
hello=Hello
cancel=Cancel

#messages_de.properties
hell=Hallo
ok=OK

上記の2ファイルが存在する場合、以下のようにそれぞれのファイルでのみ存在するキーがNGとなり検出される。

messages_de.properties: Key 'hello' missing.
messages_de.properties: Key 'cancel' missing.
messages.properties: Key 'hell' missing.
messages.properties: Key 'ok' missing.

UncommentedMain

コメントアウトされていないメインメソッドを検出する。

プロパティ

プロパティ デフォルト値 説明
excludedClasses Pattern "^$" mainメソッドを持つことが許されるクラスの修飾名のパターンを指定

チェック設定例

プロパティ設定なし

<module name="UncommentedMain"/>

プロパティ設定あり

<module name="UncommentedMain">
    <property name="excludedClasses" value="\.Main$"/>
</module>

チェック実行例

プロパティ設定なし

// NG
public class Main {
   public static void main(String[] args){}
}

// OK
public class Launch {
   //public static void main(String[] args){}
}

プロパティ設定あり

// OK 「excludedClasses」で指定のクラスなのでOK
public class Main {
   public static void main(String[] args){}
}

// OK
public class Launch {
   //public static void main(String[] args){}
}

UniqueProperties

プロパティファイルのキーの重複を検出する。

プロパティ

プロパティ デフォルト値 説明
fileExtensions String[] .properties チェックするファイルの拡張子を指定

チェック設定例

プロパティ設定なし

<module name="UniqueProperties"/>

プロパティ設定あり

<module name="UniqueProperties">
    <property name="fileExtensions" value="customProperties"/>
</module>

チェック実行例

key.one=44
key.two=32
key.one=54 // NG キーが重複している

UpperEll

longの変数に付与する「L」が大文字で記述されているかどうかをチェックする。

プロパティ

なし

チェック設定例

<module name="UpperEll"/>

チェック実行例

class MyClass {
    // OK
    long var1 = 508987;
    // NG 「L」が小文字
    long var2 = 508987l;
    // OK
    long var3 = 508987L;
}