Checkstyle:尾部空格regexp问题



我正在将Checkstyle添加到我的项目中,但检测空白的规则不够好(RegexpSingleline):

(?<=S)s+$

它只检测尾随空格并忽略带有空格的行(应该允许缩进的空行)。它在大多数情况下都工作得很好,但它抱怨javadoc/多行注释使用空行:

/**
 * Some text
 * 
 * More text
 */

两行之间的空行是"星号空白"(默认的Eclipse格式),因此触发了规则,到目前为止,我无法让它忽略这种特殊情况。如何修复这种情况下的正则表达式?

谢谢!

注意:它不需要是一个多行检查,并验证该行是否确实是注释的一部分,它作为单行就足够了。


正在总结所需的规则。。。

正则表达式应该匹配带有尾随空格的行:

x = y;     
void function() { 

除非行上只有空格(在这个例外中,最后一个空格之前只允许有一个星号,但只有当星号是唯一的非空格字符时):

(only whitespaces here, all ok)
/**
 * (this text is not here, and this line is ok - this case is my uncovered situation)
 */

替换原始表达式

s+$

(?<!*)s+$|*ss+$

如果管道以*开头,则管道的左侧会在该行的开头查找空白。管道的右侧在管线末端寻找双空白。

编辑:

同时,Eclipse代码格式化程序修复了空JavaDoc行中尾随空格的问题。希望我们再也不用在这里调整Checkstyle regexp了;)

这个怎么样:

(?<=S)(?<!^s**)s+$

匹配行末尾的空白,前提是该行前面有一个非空白字符,该字符也不是行上唯一的星号。

该正则表达式需要可变长度的lookbacking断言,而大多数正则表达式引擎不支持这种断言。因此,如果这不起作用,你需要匹配整个行:

^(?!s*(?:*s+)?$)(.*?)s+$

并且用CCD_ 1替换匹配以去除行末尾的空白。

对不起,我忘了这个问题。

最后,我的最后一个正则表达式是:

(?<!A[ t]**?)[ t]$

我们的Checkstyle(旧版-5.7)版本使用xml文件来声明规则,并拒绝'<'在@crasp在增强规则中找到的xml值属性(lookbacking令牌)中。我提出了这个替代方案来忽略行注释、块注释和空行中的尾随空白。我们的初级开发人员无法定期使用Eclipse格式化程序,他们通常会怀疑后面的空白。这个规则指示Checkstyle忽略大部分垃圾:

^(?!(?:[ t]*?(?:/?**?|//)[S t]+?|[ t]+$))[S t]+[ t]+$

最新更新