Checkstyleのカスタムルール作成と共有

導入しても反発が少なそうなCheckstyleのゆるいカスタムルールを考えてみた。
それとEclipseでのカスタムルール共有方法をメモ。

カスタムルール作成

雛形は既存(プラグイン付属?)の「Sun Checks (Eclipse)」のコピーを使用する(「Sun Checks」よりゆるいルールなのでこちらを選択)。

Javadoc Comments - Method Javadoc - scope をpackageに

privateメソッドはJavaDoc無くてもおk

Javadoc Comments - Method Javadoc - allowUndeclaredRTE をチェック

「RuntimeExceptionのサブクラスに対する@throws節の記述を許可するかどうか」
これがデフォルトで許可されていない理由は何だろ?

Javadoc Comments - Package Html チェック外す

「各パッケージにpackage.htmlがあるかどうかチェック」
package-info.javaには5.0から対応みたい
Checkstyle自体は5.0出てるけどEclipseプラグインがまだ未対応だわ
http://stackoverflow.com/questions/173897/checkstyles-packagehtml-rule-ignores-package-info-java

Javadoc Comments - Style Javadoc - checkFirstSentence チェック外す

「最初の一文はピリオドで終わらなければならない」
説明文が必要ってことかな?日本語は丸で終わるので無効化
つかこれだとこう書かなきゃダメじゃん

/**hoge class.
 * @author souta-bot
 */
Javadoc Comments - Variable Javadoc チェック外す

変数のJavaDocも無くておk

Size Violations - Maximum Line Length - max を80から100に

@seeとか書くと長くなるだろうから少し伸ばす

Size Violations - Maximum Parameters チェック外す

クラスにまとめるとかした方がいいんだろうけど、「ゆるく」だから外す

Whitespace - Empty For Iterator Pad チェック外す

「forループの初期化部分が空の場合、スペースありか無しか」
読みやすさどっちでもあんま変わらんでしょということで外す

Whitespace - Whitespace After - Type-cast チェック外す

個人的にキャストの後はスペース開けない派なので

Whitespace - Operator Wrap チェック外す

「一文が複数行に渡る場合の演算子の位置」
個人的には「次の行に続きますよ」と示すために行末派だけど行頭でもおk

Coding Problems - Avoid Inline Conditionals チェック外す

条件(3項)演算子許可

Coding Problems - Convariant Equals を追加

「共変なequalsをチェック」

Coding Problems - Default Comes Last を追加

「switch文でdefault節が最後に来るかチェック」

Coding Problems - Fall Through を追加

「switch文でのbreak忘れをチェック」

Coding Problems - Hidden Field - Parameter declaration チェック外す

コンストラクタ、セッター等の引数は同じ名前でええやんってことで

Coding Problems - Magic Number チェック外す

いちいち例外ルールを追加するのはめんどいので

Coding Problems - Modified Control Variable を追加

↓のようなのはwhileで

for (int i = 0; i < length; i++) {
    i++;
}
Coding Problems - Parameter Assignment を追加

「引数への代入をチェック」

Coding Problems - String Literal Equality を追加

「str == "hoge"としている箇所をチェック」

Coding Problems - SuperClone を追加

「clone()でsuper.clone()を呼んでるかチェック」

Class Design - Design For Extension チェック外す

「継承可能なクラスの'privateでない'もしくは'staticでない'メソッドはabstractかfinalか空実装でなければならない」
ゆるくするために外す

Miscellaneous - Final Parameters チェック外す

いちいち引数全部にfinal付ける人いないよね

カスタムルールの共有

  1. 作成したカスタムルールをエクスポート(custom.checkstyle.xml)する
  2. custom.checkstyle.xmlをプロジェクトにインポートする
  3. プロジェクトのローカルルールにcustom.checkstyle.xmlを設定する
    1. プロジェクトのプロパティ - Checkstyle - Local Check Configurations - New
    2. Typeは「Project Relative Configuration」を選択
    3. Browseでインポートしたcustom.checkstyle.xmlを選択
    4. Nameを適当に入力してOK
    5. プロジェクトのプロパティ - Checkstyle - Main - Checkstyle active for this project をチェック
    6. 作成したローカルルールを選択してOK

テストケースをチェック対象から外す

  1. プロジェクトのプロパティ - Checkstyle - Use simple configuration チェック外す
  2. テストケースが含まれないようなファイルセットを追加
    1. Addボタンで新規ファイルセット編集画面へ
    2. Nameに「excludeTest」、Check Configurationに↑のローカルルールを選択
    3. Newボタンで新規パターン編集画面へ
    4. (testフォルダ以下を全てチェック対象から外す場合)パターンを「^test\.*」、Pattern includes filesのチェック外してOK
  3. 既存のallファイルセットのEnabledチェックを外して無効化