Java Checkstyle 规则限制方法空行

问题描述 投票:0回答:7

有没有办法设置 checkstyle 以防止方法体中出现前导、多个或尾随空行:

例如

private void a() {
-
int a = 1;
doStuff(a);
-
-
doMoreStuff(a);
-
}

在上面的示例中,我用

-
字符表示空行。

我希望能够防止方法主体中出现前导行、尾随行和多于一行。

checkstyle
7个回答
3
投票

为了防止方法体中出现空行,您可以使用:

<module name="RegexpMultiline">
    <property name="message" value="Blank line at start of method should be removed"/>
    <property name="format" value="\(.*\)\s*\{\s*\n\s*\n"/>
</module>

我们可以通过括号找到方法。


1
投票

要强制在任何块的开头和结尾都没有空行,您可以使用 多行正则表达式 检查:

<module name="RegexpMultiline">
    <property name="message" value="Blank line at start of block should be removed" />
    <property name="format" value="(?&lt;=\{\s{0,99}$)^$" />
    <property name="fileExtensions" value="groovy,java" />
</module>
<module name="RegexpMultiline">
    <property name="message" value="Blank line at end of block should be removed" />
    <property name="format" value="(?&lt;!\{\s{0,99}$)^$(?=^\s{0,99}\})" />
    <property name="fileExtensions" value="groovy,java" />
</module>

“^$”表示空行。


0
投票

为了防止出现多个空行,您可以使用

EmptyLineSeparator
检查。它的主要目的是确保文件中的成员之间有一个空行,但它还有一个
allowMultipleEmptyLines
属性,您可以将其设置为“false”以禁止它们。

然而,当前检查存在一个bug,这意味着它无法正确检测方法之间有注释(包括JavaDoc)的多个空行。我目前正在为此解决修复

至于检查块开头或结尾处的新行,我认为

RegexpMultiline
检查将是 Pankaj 的答案中提到的唯一选择。


0
投票

可以使用:

<module name="Regexp">
    <property name="message" value="Blank line at start of block is not allowed"/>
    <property name="format" value="\{\s*$^\s*$"/>
    <property name="ignoreComments" value="true"/>
    <property name="illegalPattern" value="true"/>
</module>
<module name="Regexp">
    <property name="message" value="Blank line at end of block is not allowed"/>
    <property name="format" value="^\s*$^\s*\}"/>
    <property name="ignoreComments" value="true"/>
    <property name="illegalPattern" value="true"/>
</module>

0
投票

这是我在方法开头检查空行的建议

<module name="RegexpMultiline">
    <property name="id" value="RegexpMultilineEmptyRowBeforeStartOfMethod"/>
    <property name="message" value="Blank line at start of method or block should be removed"/>
    <property name="format" value="\)(\s)*\{\r?\n(\s)*\n"/>
    <property name="fileExtensions" value="java"/>
</module>

0
投票

check-tfij-style 包含一个 checkstyle 检查来限制方法或构造函数中的 any 空行。只需将 maven/gradle 依赖项添加到 checkstyle 插件即可:

plugins {
    java
    checkstyle
}

dependencies {
    checkstyle("pl.tfij:check-tfij-style:1.5.1")
}

然后将检查添加到您的 checkstyle 配置中:

<module name="MethodEmptyLines"/>

0
投票

此处的答案讨论了防止方法块开头和结尾处的前导行和尾随行,但没有回答问题中询问如何防止多个重复空行(非前导或尾随)within方法的部分块。

为了防止这种情况,我们可以使用:

<module name="EmptyLineSeparator">
  <property name="allowMultipleEmptyLinesInsideClassMembers" value="false"/>
</module>

https://checkstyle.sourceforge.io/version/8.40/config_whitespace.html

© www.soinside.com 2019 - 2024. All rights reserved.