checkstyle规则,用于强制类节的空行分隔

vmpqdwk3  于 2021-08-20  发布在  Java
关注(0)|答案(2)|浏览(357)

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

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() {
        ...
    }
    ...
}

如何强制guys在类节之间(常量、变量、方法等之间)添加一条空行?

bzzcjhmw

bzzcjhmw1#

好吧,你最好的选择是空瓶分离器检查。根据其文件,它:
检查头、包、所有导入声明、字段、构造函数、方法、嵌套类、静态初始值设定项和示例初始值设定项之后是否有空行分隔符。
配置如下:

<module name="EmptyLineSeparator"/>

这个 tokens 属性控制要在何处放置空行(至少您可以从位置列表中进行选择。)
您至少需要checkstyle 5.8、更好的6.18或更高版本。

blpfk2vs

blpfk2vs2#

我没有发现任何已经实现的东西,所以我为此检查编写了一个正则表达式。
使用多行正则表达式的快速解决方案(代码应格式良好):

<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>

关于这一点有很多线索和讨论:
https://github.com/checkstyle/checkstyle/issues/5313
https://github.com/checkstyle/checkstyle/issues/3379
https://github.com/checkstyle/checkstyle/issues/3923

相关问题