重用checkstyle检查以定义基于xml的自定义模块

时间:2016-04-11 13:46:11

标签: checkstyle

在我正在开发的项目中,我们有很多自定义Checkstyle检查。例如,我们使用RegexpSingleline模块排除所有类型的事物。我们的checkstyle规则如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC
      "-//Puppy Crawl//DTD Check Configuration 1.3//EN"
      "http://www.puppycrawl.com/dtds/configuration_1_3.dtd">
<module name="Checker">

    <!-- Disable this -->
    <module name="RegexpSingleline">
        ...
    </module>

    <!-- Disable that -->
    <module name="RegexpSingleline">
        ...
    </module>

    ...
</module>

不幸的是,这意味着当我们要对一个文件禁用一次检查时,我们通常最终会禁用 lot 检查,例如所有基于RegexpSingleline的检查。

我希望,但似乎无法找到,定义“复合”检查的可能性,如:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC
      "-//Puppy Crawl//DTD Check Configuration 1.3//EN"
      "http://www.puppycrawl.com/dtds/configuration_1_3.dtd">
<module name="Checker">

    <!-- Disable this -->
    <myCheck name="DisableNastyThing1">
        <module name="RegexpSingleline">
            ...
        </module>
    </myCheck>

    <!-- Disable that -->
    <myCheck name="DisableNastyThing2">
        <module name="RegexpSingleline">
            ...
        </module>
    </myCheck>

    ...
</module>

抑制 DisableNastyThing1 DisableNastyThing2 与抑制模块完全一样。换句话说, myCheck XML元素名称将表示检查未映射到实现AbstractCheck左右的实际Java类,而是映射到执行嵌套检查的某些通用检查。进入它。

Checkstyle中是否已存在这样的概念,但我找不到它或者什么?

1 个答案:

答案 0 :(得分:0)

您可以为每个支票添加id属性,如下所示:

<!-- Disable this -->
<module name="RegexpSingleline">
    <property name="id" value="DisableNastyThing1"/>
    ...
</module>

<!-- Disable that -->
<module name="RegexpSingleline">
    <property name="id" value="DisableNastyThing2"/>
    ...
</module>

然后在 suppressions.xml 中,您可以参考ID:

<suppress files="some/files/" id="DisableNastyThing1" />
<suppress files="some/other/files/" id="DisableNastyThing2" />

通过这种方式,您只能抑制一些 RegexpSingleLine 实例,而不是所有实例。

但是,无法定义检查实例组。换句话说,没有语法将 DisableNastyThing1 DisableNastyThing2 分组到 DisableNastyThings 中,并在抑制中引用它。