checkstyle emptylinesparator忽略自定义标记

wgx48brx  于 2021-07-08  发布在  Java
关注(0)|答案(1)|浏览(750)

我想要 EmptyLineSeparator 无代币 STATIC_INIT (我使用的是8.36.2版)。
我的简单java类:

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.

我错过什么了吗?我不希望有错误。

ql3eal8s

ql3eal8s1#

这里的问题是,您从tokens列表中排除了static_init,但其中包含变量_def。由于字段定义未分开,因此在现场检查期间会报告您的违规行为。请注意 allowNoEmptyLineBetweenFields 标志在这里不适用,因为它只适用于字段之间没有行,但这里有字段和静态初始化块。
当您从check中排除static_init token时,这意味着checkstyle不会检查这个token后面是否有内容,例如,这样的代码不会导致冲突

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
}

相关问题