2

この質問に基づいて、CheckStyle のデフォルト テンプレートでは、if else はしごでifandelseを改行で区切ることができるようです。

つまり、このコードに違反としてフラグを立ててほしい:

if (true)
{
    System.out.println("20");   
}
else
    if (true)
    {
        System.out.println("30");
    }

これを防ぐための CheckStyle ルールはありますか? ドキュメントを見てみると、1つも表示されません。必要がなければ、一般的な正規表現ルールを使用しないことをお勧めします。

また、GenericIllegalRegexpモジュールを使用すると、複数行の正規表現が機能しないようです。これに対する救済策はありますか?

4

1 に答える 1

2

Checkstyle SDK Guiの AST ブラウジング コードは、

else if

else
  if

いずれの場合elseLITERAL_ELSEif...

したがって、一般的な正規表現else[ \t]*[\r\n]+[ \t]*ifは、実際にその種のコードを検出するための迅速な方法です。


次の場合を含むように正規表現を修正します。

  • 改行の前後にタブではなくスペースはありません
  • これは複数の改行です。

もちろん、\s空白の正規表現には改行文字が含まれているため、使用したくありません。改行文字からスペースを分離する方が明確です。


注: Checkstyle 5.0beta では、「Generic Illegal Regexp」ではなく、Regexp」モジュールを使用してください。
その RegExp モジュールを「illegalPattern」(関連する重大度「警告」) として構成できます。任意の種類の「複数行」フラグを使用するには: 正規表現で十分です。

正規表現の
説明

指定されたパターンが存在すること、存在する回数が設定された回数未満であること、またはファイルに存在しないことを確認するチェック。

このチェックは、ファイルから正規表現を提供することを除いて、RegexpHeader、GenericIllegalRegexp、および RequiredRegexp によって提供されるすべての機能を結合します。

複数行モードで動作するという点で、それらとは異なります。正規表現は複数の行にまたがることができ、一度にファイル全体に対してこれをチェックします。その他はシングルライン モードで動作します。それらの 1 つまたは複数の正規表現は、1 行だけにまたがることができます。これらをファイルの各行に対して順番にチェックします。


Thomasはコメントで次のように述べています。

checkstyle AST には行番号情報があります。

“<code>else if” を同じ行に強制する Checkstyle/PMD/Findbugs ルールはありますか?」を参照してください (ここでは、正規表現の一致ではなく、カスタム チェック
を使用する必要があります)。

于 2008-12-22T22:13:28.287 に答える