メンチカツには醤油でしょ!!

AWS/Java/Node.js/Spreadsheets/Docker/Jenkins/コミュニティ・勉強会レポを主とした技術系ブログ

Checkstyleで規約無視を警告に出さない方法

ニーズあるかと思います。

>|java|
public class SampleClass {
    private static final SampleClass instance = new SampleClass();
<||

たとえばSingletonパターンで実装する場合、インスタンスの定数名などはデザパタの役割上の命名に基づいて命名することが多いと思います。
でもCheckstyleを使用していると、警告出ちゃうんですよね。
staticな変数は大文字で命名しろって・・・(´・ω・`)

解決策はいくつかあって
・このルールの適用範囲からprivateを外す
・下記のように大文字で命名する

>|java|
public class SampleClass {
private static final SampleClass INSTANCE = new SampleClass();
<||

 

とあるんですが、どーもしっくりこない。

ということで次に紹介するのは、部分的に警告を出さない(無視する)方法です。

Checkstyle.xmlを直接編集します。

・<module name="TreeWalker"> 配下に
<module name="FileContentsHolder"/>を追記。
・<module name="Checker"> 配下に(最下部が良いかと)
<module name="SuppressionCommentFilter"/>
    <module name="SuppressWithNearbyCommentFilter">
    <property name="commentFormat" value="Checkstyle ignores this line because "/>
    <property name="messageFormat" value="Checkstyle ignores this line because "/>
</module>
を追記。

こうすると、
>|java|
public class SampleClass {
    private static final SampleClass instance = new SampleClass(); // Checkstyle ignores this line because
<||
のように無視したい行にコメントを書けば、チェックが無視されます。

 

調べたところではcommentFormatのみxml定義でCHECKSTYLE IGNORE THIS LINEがキーワードになっているパターンだったのですが、無視する理由まで書かせた方が良いと思いますので、messageFormatまで指定して無視するためのキーワードをアレンジしています。
becauseの後に理由を書く想定です。
英文法的にはbecauseの後に文を書くか、
because of 名詞にするか。
(まぁ通常は日本語でコメント書くと思うので、設定値も日本語で書いても良いかも。)
<property name="commentFormat" value="Checkstyle警告スキップ。理由⇒"/>
<property name="messageFormat" value="Checkstyle警告スキップ。理由⇒"/>

こういう系は乱発禁止だと思いますので、
ちゃんと理由を併記しておくと良いかと思います。