是否有CheckStyle规则强制if else关键字在if / else梯形图中位于同一行?
基于这个问题 ,似乎CheckStyle的默认模板将允许if else梯子将if
和else
与换行符分开。
意思是我希望将此代码标记为违规:
if (true) { System.out.println("20"); } else if (true) { System.out.println("30"); }
是否有CheckStyle规则来阻止这种情况? 查看文档,我没有看到一个,如果我不需要,我宁愿不使用通用正则表达式规则。
此外,如果我使用GenericIllegalRegexp模块,多行正则表达式似乎不起作用。 这有什么补救措施吗?
我不确定您是否可以轻松编写Checkstyle扩展,因为Checkstyle SDK Gui的AST浏览代码之间没有任何区别:
else if
和
else if
在每种情况下, else
都是LITERAL_ELSE
,其中包含if
…
所以通用的regexp else[ \t]*[\r\n]+[ \t]*if
确实是检测那种代码的快速方法。
修复regexp以包括案例:
- 在换行之前/之后没有空格
- 这是多个换行符。
当然,您不想使用\s
空白regexp表达式,因为它包含自己的换行符。 将空格与返回字符分开更清楚。
注意:在Checkstyle 5.0beta中,不要使用“Generic Illegal Regexp”,而应使用“ Regexp”模块 :
你可以将RegExp模块配置为’illegalPattern’(关联严重性为’Warning’),并且你不必使用任何类型af’多行’标志:regexp就足够了。
正则表达式
描述确保存在指定模式的检查存在的次数少于设定次数,或者文件中不存在。
此检查结合了RegexpHeader,GenericIllegalRegexp和RequiredRegexp提供的所有function,但从文件提供正则表达式除外。
它与它们的不同之处在于它在多线模式下工作 。 它的正则表达式可以跨越多行,并且它会立即对整个文件进行检查。 其他人在单线模式下工作。 它们的单个或多个正则表达式只能跨越一行。 他们依次针对文件中的每一行检查每一行。
托马斯 在评论中提到:
checkstyle AST确实有行号信息。
else if
“要在同一条线上,请参阅” 是否有任何Checkstyle / PMD / Findbugs规则强制执行“ else if
”
(其中一个必须使用自定义检查 ,而不是正则表达式匹配 )。