Java Checkstyle规则限制方法空行

时间:2017-12-29 19:46:18

标签: checkstyle

有没有办法设置checkstyle以防止方法体中的前导,多行或尾随空行:

e.g。

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

在上面的例子中,我用-个字符表示空行。

我希望能够防止方法体中的前导线,尾随线和多行。

5 个答案:

答案 0 :(得分:1)

要防止方法主体中的前导空行,您可以使用:

<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 :(得分:0)

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

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

“^ $”表示空行。

答案 2 :(得分:0)

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

但是目前有一个bug带有检查,这意味着它无法正确检测方法之间存在注释(包括JavaDoc)的方法之间的多个空行。我目前正在为fix工作。

至于在块的开头或结尾检查新行,我认为RegexpMultiline检查是Pankaj答案中提到的唯一选项。

答案 3 :(得分: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>

答案 4 :(得分: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>