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

时间:2008-12-22 18:43:57

标签: java regex coding-style checkstyle

根据this question,CheckStyle的默认模板似乎允许其他梯子将ifelse与换行符分开。

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

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

是否有CheckStyle规则来阻止这种情况?查看文档,我没有看到一个,如果我不需要,我宁愿不使用通用正则表达式规则。

另外,如果我使用 GenericIllegalRegexp 模块,多行正则表达式似乎不起作用。这有什么补救措施吗?

1 个答案:

答案 0 :(得分:2)

我不确定您是否可以轻松编写Checkstyle扩展,因为Checkstyle SDK Gui的AST浏览代码之间没有任何区别:

else if

else
  if

在每种情况下,else都是LITERAL_ELSE,其中if ...

因此,通用正则表达式else[ \t]*[\r\n]+[ \t]*if确实是检测这种代码的快速方法。


修复regexp以包含案例:

  • 在换行符之前/之后没有空格而不是标签
  • 是多个换行符。

当然,您不想使用\s空白regexp表达式,因为它包含自己的换行符。将空格与返回字符分开会更清楚。


注意:在Checkstyle 5.0beta中,不要使用“Generic Illegal Regexp”,而应使用Regexp" module
你可以将RegExp模块配置为'illegalPattern'(关联严重性为'Warning'),并且你不必使用任何类型af'多行'标志:正则表达式就足够了。

  

<强>正则表达式
  描述

     

确保指定模式存在的检查,存在的次数少于设定次数,或者文件中不存在。

     

此检查结合了RegexpHeader,GenericIllegalRegexp和RequiredRegexp提供的所有功能,但从文件中提供正则表达式除外。

     

它与它们的不同之处在于它适用于多线模式。它的正则表达式可以跨越多行,并且它会立即对整个文件进行检查。其他人在单线模式下工作。它们的单个或多个正则表达式只能跨越一行。他们依次针对文件中的每一行检查每一行。


Thomas提及in the comments

  

checkstyle AST确实有行号信息。

请参阅“Is there any Checkstyle/PMD/Findbugs rule to force “else if” to be on the same line?
(其中一个必须使用custom check,而不是regex match)。