是否有CheckStyle规则强制if else关键字在if / else梯形图中位于同一行?

基于这个问题 ,似乎CheckStyle的默认模板将允许if else梯子将ifelse与换行符分开。

意思是我希望将此代码标记为违规:

 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
(其中一个必须使用自定义检查 ,而不是正则表达式匹配 )。