敢えて規約を破るケース(Checkstyleの警告抑制)
先日の日経ソフトウエア記事で、「規約は大事だが、可読性や保守性を高めるためにあえて例外的に規約を破るケースもある」ということを説明しました。
しかし、Checkstyleは情け容赦なく、違反を摘発します。
数が少ないうちは良いのですが、多くなってくると「無視すると決めた警告」に「大事な警告」が埋もれて、気づくべき違反に気づかなくなってきます。
そこで、checkstye.xml を少し編集してみましょう。TreeWalkerモジュールの子にFileContentsHolderモジュールを追加します。
… <module name="Checker"> <property name="severity" value="warning"/> <module name="TreeWalker"> <!-- 追加ここから… --> <module name="FileContentsHolder"/> <!-- …追加ここまで --> <module name="JavadocMethod"> …
そしてファイルの最後の方に以下のモジュールを追加します。
… <module name="Translation"/> <!-- 追加ここから… --> <module name="SuppressionCommentFilter"/> <module name="SuppressWithNearbyCommentFilter"> <property name="commentFormat" value="CHECKSTYLE IGNORE THIS LINE"/> <property name="checkFormat" value=".*"/> <property name="influenceFormat" value="0"/> </module> <!-- …追加ここまで --> </module> <!-- [EOF] -->
これにより、コード内にコメントを書くことによってCheckstyleの警告を抑制できます。以下のコードは、通常であれば「'123' はマジックナンバーです。」というお叱りを受けるところですが、Checkstyleの警告がこの行だけ抑制されます。
System.out.println(123); // CHECKSTYLE IGNORE THIS LINE
さらに、数行の範囲にわたって抑制したい場合は、以下のように書くこともできます。
// CHECKSTYLE:OFF System.out.println(123); System.out.println(456); System.out.println(789); // CHECKSTYLE:ON
まぁ、乱用厳禁な訳ですが、上手く付き合っていけば有用な機能だと思います。