为什么Checkstyle无法将import
语句之后但class
声明之前的空行识别为违规?
package b.pi.persistence.hibernate;
import java.lang.String;
// ^^^ much space! Why is the above not a violation of EmptyLineSeparator
public class CheckstyleExample {
...
}
已声明以下检查:
<module name="EmptyLineSeparator">
<property name="allowNoEmptyLineBetweenFields" value="true"/>
<property name="allowMultipleEmptyLines" value="false"/>
</module>
这是因为缺乏测试和代码中的问题。
通常,此检查将验证是否有不多于一个空行上方一些令牌。当import
或package
上方有多个多余的空格时,此功能会很好地工作。当检查到达class
声明时,它还将验证上面的行,但是...
class
令牌获得了下一个同级,并且为null
,因为在文件中该类与其他类处于同一级别null
,所以在行EmptyLineSeparatorCheck.java#L216处跳过了整个验证此错误已作为checkstyle/checkstyle#2067提交,希望可以在Checkstyle 6.11中实现。
即使与此问题有关的Checkstyle v8.20上的另一个错误修复,仍然无法正常工作:https://github.com/checkstyle/checkstyle/issues/5981
我现在将使用简单的RegexpMultiline来确保没有多个空行:
<module name="RegexpMultiline">
<property name="message" value="Multiple empty lines after this line."/>
<property name="format" value="[\r]?\n\s*[\r]?\n\s*[\r]?\n"/>
<property name="fileExtensions" value="java"/>
</module>