有没有办法设置 checkstyle 以防止方法体中出现前导、多个或尾随空行:
例如
private void a() {
-
int a = 1;
doStuff(a);
-
-
doMoreStuff(a);
-
}
在上面的示例中,我用
-
字符表示空行。
我希望能够防止方法主体中出现前导行、尾随行和多于一行。
为了防止方法体中出现空行,您可以使用:
<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>
我们可以通过括号找到方法。
要强制在任何块的开头和结尾都没有空行,您可以使用 多行正则表达式 检查:
<module name="RegexpMultiline">
<property name="message" value="Blank line at start of block should be removed" />
<property name="format" value="(?<=\{\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="(?<!\{\s{0,99}$)^$(?=^\s{0,99}\})" />
<property name="fileExtensions" value="groovy,java" />
</module>
“^$”表示空行。
EmptyLineSeparator
检查。它的主要目的是确保文件中的成员之间有一个空行,但它还有一个 allowMultipleEmptyLines
属性,您可以将其设置为“false”以禁止它们。
然而,当前检查存在一个bug,这意味着它无法正确检测方法之间有注释(包括JavaDoc)的多个空行。我目前正在为此解决修复。
至于检查块开头或结尾处的新行,我认为
RegexpMultiline
检查将是 Pankaj 的答案中提到的唯一选择。
可以使用:
<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>
这是我在方法开头检查空行的建议
<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>
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"/>
此处的答案讨论了防止方法块开头和结尾处的前导行和尾随行,但没有回答问题中询问如何防止多个重复空行(非前导或尾随)within方法的部分块。
为了防止这种情况,我们可以使用:
<module name="EmptyLineSeparator">
<property name="allowMultipleEmptyLinesInsideClassMembers" value="false"/>
</module>
https://checkstyle.sourceforge.io/version/8.40/config_whitespace.html