Checkstyle EmptyLineSeparator 忽略自定义标记
Checkstyle EmptyLineSeparator ignores custom tokens
我想要 EmptyLineSeparator
没有令牌 STATIC_INIT
(我使用的是 8.36.2 版本)。
我的简单java-class:
package com.test;
public class Test {
private static final int[] FIELD = new int[5];
static {
FIELD[0] = 16;
FIELD[1] = 8;
FIELD[2] = 6;
FIELD[3] = 10;
FIELD[4] = 10;
}
}
我的checkstyle.xml:
<?xml version="1.0"?>
<!DOCTYPE module PUBLIC
"-//Checkstyle//DTD Checkstyle Configuration 1.3//EN"
"https://checkstyle.org/dtds/configuration_1_3.dtd">
<module name="Checker">
<module name="TreeWalker">
<module name="EmptyLineSeparator">
<property name="tokens"
value="PACKAGE_DEF, IMPORT, STATIC_IMPORT, CLASS_DEF, INTERFACE_DEF, ENUM_DEF, INSTANCE_INIT,
METHOD_DEF, CTOR_DEF, VARIABLE_DEF, RECORD_DEF, COMPACT_CTOR_DEF"/>
<property name="allowNoEmptyLineBetweenFields" value="true"/>
<property name="allowMultipleEmptyLines" value="false"/>
</module>
</module>
</module>
但仍然看到我的构建失败,因为:
/var/tmp $ java -jar checkstyle-8.36.2-all.jar -c config.xml Test.java
Starting audit...
[ERROR] /dev/tmp/Test.java:5:5:
'STATIC_INIT' should be separated from previous statement. [EmptyLineSeparator]
Audit done.
Checkstyle ends with 1 errors.
我错过了什么吗?
我预计没有错误。
这里的问题是您从令牌列表中排除了 STATIC_INIT,但其中有 VARIABLE_DEF。
你的违规在现场检查时被报告是因为字段定义没有被分开。请注意,allowNoEmptyLineBetweenFields
标志在这里不适用,因为它仅适用于 字段之间的任何行,但这里有字段和静态初始化块。
当您从检查中排除 STATIC_INIT 标记时,这意味着 checkstyle 将不会检查此标记之后是否有内容,例如这样的代码不会造成违规
public class Test {
private static final int[] FIELD = new int[5];
static {
FIELD[0] = 16;
FIELD[1] = 8;
FIELD[2] = 6;
FIELD[3] = 10;
FIELD[4] = 10;
}
private int myOtherField; // no violation
}
我想要 EmptyLineSeparator
没有令牌 STATIC_INIT
(我使用的是 8.36.2 版本)。
我的简单java-class:
package com.test;
public class Test {
private static final int[] FIELD = new int[5];
static {
FIELD[0] = 16;
FIELD[1] = 8;
FIELD[2] = 6;
FIELD[3] = 10;
FIELD[4] = 10;
}
}
我的checkstyle.xml:
<?xml version="1.0"?>
<!DOCTYPE module PUBLIC
"-//Checkstyle//DTD Checkstyle Configuration 1.3//EN"
"https://checkstyle.org/dtds/configuration_1_3.dtd">
<module name="Checker">
<module name="TreeWalker">
<module name="EmptyLineSeparator">
<property name="tokens"
value="PACKAGE_DEF, IMPORT, STATIC_IMPORT, CLASS_DEF, INTERFACE_DEF, ENUM_DEF, INSTANCE_INIT,
METHOD_DEF, CTOR_DEF, VARIABLE_DEF, RECORD_DEF, COMPACT_CTOR_DEF"/>
<property name="allowNoEmptyLineBetweenFields" value="true"/>
<property name="allowMultipleEmptyLines" value="false"/>
</module>
</module>
</module>
但仍然看到我的构建失败,因为:
/var/tmp $ java -jar checkstyle-8.36.2-all.jar -c config.xml Test.java
Starting audit...
[ERROR] /dev/tmp/Test.java:5:5:
'STATIC_INIT' should be separated from previous statement. [EmptyLineSeparator]
Audit done.
Checkstyle ends with 1 errors.
我错过了什么吗? 我预计没有错误。
这里的问题是您从令牌列表中排除了 STATIC_INIT,但其中有 VARIABLE_DEF。
你的违规在现场检查时被报告是因为字段定义没有被分开。请注意,allowNoEmptyLineBetweenFields
标志在这里不适用,因为它仅适用于 字段之间的任何行,但这里有字段和静态初始化块。
当您从检查中排除 STATIC_INIT 标记时,这意味着 checkstyle 将不会检查此标记之后是否有内容,例如这样的代码不会造成违规
public class Test {
private static final int[] FIELD = new int[5];
static {
FIELD[0] = 16;
FIELD[1] = 8;
FIELD[2] = 6;
FIELD[3] = 10;
FIELD[4] = 10;
}
private int myOtherField; // no violation
}