【问题标题】:Checkstyle rule to enforce empty line separation for class sectionsCheckstyle 规则对类部分强制执行空行分隔
【发布时间】:2017-10-31 16:18:39
【问题描述】:

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

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 个空行?

【问题讨论】:

  • 你的 IDE 是什么?
  • @Salman 没关系。此检查必须在 CI 服务器上。
  • 这是一个干净的代码测量。为什么 CI 服务器应该能够检测到它?您有任何解决方案来为 CI 定义它吗?
  • @Salman 因为我们有 Checkstyle 检查,例如 CI 的 GitHub PR 代码样式预检查。所有 PR 必须成功通过 Checkstyle 规则才能合并到主 brunch。

标签: java checkstyle


【解决方案1】:

好吧,您最好的选择是EmptyLineSeparator 支票。根据其文档,它:

检查标头、包、所有导入声明、字段、构造函数、方法、嵌套类、静态初始化器和实例初始化器之后的空行分隔符。

这样配置:

<module name="EmptyLineSeparator"/>

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

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

【讨论】:

  • 这与我需要的非常接近,但它不能区分 static final 常量和字段。
  • 我明白,但除非您愿意编写自己的自定义支票,否则您只能得到这些。
  • 除了编写自己的支票外,如果对其他人有意义,您可以要求 Checkstyle 将您的更改合并到其中,或者您可以自己扩展现有的支票。
【解决方案2】:

我没有发现任何已经实现的东西,所以我为此检查编写了一个正则表达式。

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

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

有很多关于这个的话题和讨论:

【讨论】:

    猜你喜欢
    • 2011-04-17
    • 2020-07-22
    • 2023-04-03
    • 2019-10-30
    • 2021-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多