如何禁止在 Checkstyle 中对文件进行所有检查?

IT小君   2022-01-11T01:05:00

我正在为第三方类进行覆盖,并且我想禁止对其进行所有检查(因为我只保留它直到补丁被接受)。

有没有办法禁止对文件的所有检查?

我尝试使用“*”,但失败了。

评论(7)
IT小君

不知道您是在使用命令行还是在 IDE 中,但您基本上需要一个抑制文件。如果您正在手动编辑 Checkstyle 配置文件,请向其中添加一个新模块:

<module name="SuppressionFilter">
    <property name="file" value="mysuppressions.xml" />
</module>

mysuppression.xml可以是这样的:

<?xml version="1.0"?>

<!DOCTYPE suppressions PUBLIC
    "-//Puppy Crawl//DTD Suppressions 1.1//EN"
    "http://www.puppycrawl.com/dtds/suppressions_1_1.dtd">

<suppressions>
    <suppress files="TheClassToIgnore\.java" checks="[a-zA-Z0-9]*"/>
</suppressions>

" files" 属性的值基本上是源文件的正则表达式,而 " checks" 属性的值是要跳过的检查的正则表达式(" [a-zA-Z0-9]*" 基本上意味着跳过所有内容)。我猜这就是你要找的模式?

2022-01-11T01:05:00   回复
IT小君

我可以通过在我的 checks.xml 中添加 SuppressionCommentFilter 标记来抑制文件中的检查:

首先,我添加了FileContentHolder标签作为TreeWalker标签的孩子(这一步是没有必要的,因为com.puppycrawl.tools:checkstyle版本8.1):

<module name="TreeWalker">
    ...
    <module name="FileContentsHolder"/>
    ...
</module>

然后我在 checks.xml 中添加了 SuppressionCommentFilter(因为 com.puppycrawl.tools:checkstyle 的 8.1 版 - 在“TreeWalker”节点下):

<module name="SuppressionCommentFilter"/>

在我想禁止检查的每个文件中,我在文件的第一行中插入了以下注释:

// CHECKSTYLE:OFF
2022-01-11T01:05:01   回复
IT小君

aberrant80 的回答很有帮助。在他的提示的帮助下 - 使用正则表达式模式匹配,我还能够通过将其添加到 checkstyle-suppressions.xml 文件来抑制整个包的 checkstyle。例如。跳过对 jaxb 包下所有自动生成的 java 文件的 checkstyle 检查,

    <suppressions>
        <suppress checks="[a-zA-Z0-9]*" files="[\\/]jaxb[\\/]" />
    </suppressions>
2022-01-11T01:05:01   回复
IT小君

如果您为 Checkstyle 使用 Checkclipse Eclipse 插件,您可以通过转到项目属性下的 Checkclipse > File Filter 选项卡来包含或排除文件模式(包括目录)。例如,我的项目在顶层包含srctest目录。我希望 Checkstyle 仅应用于src目录中的文件(省略test),所以我添加了一个包含模式,如下所示:

src/.+java$

如您所见,它使用正则表达式样式的语法进行模式规范。

2022-01-11T01:05:01   回复
IT小君

@aberrant80 的回答非常鼓舞人心,尽管它在我的项目中不起作用。为了抑制 checkstyle 在 Foo.java 中查找的任何警告,根据link,如果使用了 maven:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-checkstyle-plugin</artifactId>
    ...
        <configuration>
            ...
            <configLocation>checkstyle.xml</configLocation>
            <suppressionsLocation>checkstyle-suppressions.xml</suppressionsLocation>
            ...
        </configuration>                
    ...
</plugin>

checkstyle-suppressions.xml

<!DOCTYPE suppressions PUBLIC "-//Puppy Crawl//DTD Suppressions 1.1//EN" "http://www.puppycrawl.com/dtds/suppressions_1_1.dtd">
<suppressions>
    <suppress files="Foo.java" checks="[a-zA-Z0-9]*" />
</suppressions>

目前最高版本是1.1(1.2不存在)。

2022-01-11T01:05:01   回复
IT小君

有一个选项可以忽略写保护文件。或包中的文件。

2022-01-11T01:05:02   回复
IT小君

如果您不希望检查项目中的一组文件,您可以过滤掉这些文件,以便通过创建文件过滤器不检查它们

文件过滤器使用正则表达式来确定要排除的文件。正则表达式对完整的文件名进行操作 - 因此,您还可以排除整个文件夹。在这种情况下,您可以根据需要排除整个包。

如果你用谷歌搜索一下——你可能会找到一些 Checkstyle 配置属性文件,其中包含你正在寻找的示例。我建议您这样做后 - 将其保存为一个模板,以便您在将来的情况下参考它

2022-01-11T01:05:02   回复