CheckStyle で改行コードが LF で統一されてることをチェックしたい。
ざっと探してみると NewlineAtEndOfFile
ってのがあったけど、
これがイマイチなので自前でもチェックすることにした。
NewlineAtEndOfFile
こんな使い方。
<module name="NewlineAtEndOfFile"> <property name="lineSeparator" value="lf" /> </module>
けど名前の通りファイル末尾の改行しかチェックしてくれない。
ファイルの途中に CR が入ってても、それはスルーしちゃう。
まーこれはファイル末尾が改行なことをチェックするのが
一番の目的だろうから、今回やりたいことと合わなくて仕方ないのかも。
ただ、ファイル末尾が CRLF でも通ってしまった。
CheckStyleのNewlineAtEndOfFileで、lineSeparator=lfでチェックするとcrlfでも通ってしまって悲しみ。信じられなくてコードまで見てしまったわ。 https://t.co/s6JagnQCj5
— Akihiro Kondo (@akihyro) October 20, 2014
確かに LF で終わってはいるけど...
それじゃ lineSeparator
で crlf
とか lf
とか選べる意味が薄いような...
何かポリシーあってこうしてるのかなぁ。
自前のチェックも追加!
NewlineAtEndOfFile
とは別で、
正規表現でのチェックも追加することにした。
<module name="RegexpMultiline"> <property name="format" value="\r[\s\S]*\z" /> <property name="message" value="改行コードに LF 以外が使われてる!" /> </module>
以下ポイント。
- CR (
\r
) を見つけたら違反にしてる。 - 同じエラーが行数分発生するのはうざいので、ファイルごとに出すようにしてる。
- =>
[\s\S]*\z
の部分でファイル末尾まで読み込んでる。 - => これで2つ目以降の CR があっても無視させてる。
- =>
出来たけど...
標準のチェックが用意されると嬉しいなぁ。