Checkstyle规则为类部分强制执行空行分隔

时间:2017-10-31 16:18:40

标签: java checkstyle

我不时会在代码评论中看到这样的定义

public class EntityConverter {
    private static final int FIRST_VERSION = 1;
    @Autowired
    private EntityRepository repository;

    public void someMethod() {
        ...
    }
    ...
}

和/或

public class EntityConverter {
    private static final int FIRST_VERSION = 1;

    @Autowired
    private EntityRepository repository;
    public void someMethod() {
        ...
    }
    ...
}

如何强制人们在类部分之间添加1个空行(在常量,变量,方法等之间)?

2 个答案:

答案 0 :(得分:1)

嗯,最好的选择是EmptyLineSeparator检查。根据其文档,它:

  

检查标题,包,所有导入声明,字段,构造函数,方法,嵌套类,静态初始值设定项和实例初始值设定项之后的空行分隔符。

像这样配置:

<module name="EmptyLineSeparator"/>

tokens属性控制您想要空行的位置。 (至少你可以从一个地方列表中选择。)

至少需要Checkstyle 5.8,更好6.18或更高版本。

答案 1 :(得分:0)

我没有找到任何已实施的东西,所以我为此检查写了一个正则表达式。

使用多行正则表达式的快速解决方案(代码格式应正确):

<module name="RegexpMultiline">
    <property name="format" value="^([^\n ]+ )*(class|interface|enum) [^{]*\{\n[^\n}]"/>
    <property name="message" value="Leave empty row after class/interface/enum definition!"/>
    <property name="severity" value="error"/>
    <property name="fileExtensions" value="groovy,java"/>
</module>

<module name="RegexpMultiline">
    <property name="format" value="[^\n{]\n\}\n"/>
    <property name="message" value="Leave empty row before end of class/interface/enum!"/>
    <property name="severity" value="error"/>
    <property name="fileExtensions" value="groovy,java"/>
</module>

对此有很多主题和讨论: