Checkstyleチェック項目:Miscellaneous
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; }