Checkstyle 不同文件的不同规则

Posted

技术标签:

【中文标题】Checkstyle 不同文件的不同规则【英文标题】:Checkstyle different rules for different files 【发布时间】:2014-11-11 17:13:26 【问题描述】:

我有一个包含项目规则的文件。 我希望允许我的单元测试方法在其名称中带有下划线。 喜欢myMethod_should_call_someClass_someMehod。目前我有一个配置,适用于项目中的所有文件。

我的问题是有可能以某种方式配置 checkstyle,因此,例如,我为所有以 *Test.java 结尾的文件指定特定规则。

目前我找到的唯一解决方案是提供SuppressionFilter 并排除所有以*Test.java 结尾的文件。但是有没有办法可以为测试文件提供不同格式的 MethodNameCheck 模块?

【问题讨论】:

【参考方案1】:

您必须定义MethodName 检查两次,一个实例检查常规方法,另一个检查测试方法。请注意 id 属性,我们将使用它来将检查限制在各自的域中:

<module name="MethodName">
    <property name="id" value="MethodNameRegular"/>
    <property name="format" value="^[a-z][a-zA-Z0-9]*$"/>
</module>
<module name="MethodName">
    <property name="id" value="MethodNameTest"/>
    <property name="format" value="^[a-z][a-zA-Z0-9_]*$"/>
</module>

接下来,必须禁止对测试方法进行常规检查,反之亦然。只有当你有一个标准来区分这两种类时,这才有效。我使用Maven directory convention,它将常规类放在src/main 下,将测试类放在src/test 下。这是抑制过滤器文件:

<!DOCTYPE suppressions PUBLIC "-//Puppy Crawl//DTD Suppressions 1.1//EN"
    "http://www.puppycrawl.com/dtds/suppressions_1_1.dtd">
<suppressions>
    <suppress files="[\\/]src[\\/]test[\\/].*" id="MethodNameRegular" />
    <suppress files="[\\/]src[\\/]main[\\/].*" id="MethodNameTest" />
</suppressions>

【讨论】:

我只想添加,为了让 suppress.xml 文件在 maven 和 intellij idea 中工作,我必须在 maven 插件配置中添加 suppresssLocation,将模块 SuppressionFilter 中的文件属性设置为值 $checkstyle .suppressions.file 在 checkstyle 配置中,然后在 intellij IDEA 中通过单击插件配置屏幕上 checkstyle 配置文件上的“pen”按钮将 checkstyle.suppressions.file 属性设置为 checkstyle 配置中的 suppresss.xml。另一种选择是在 checkstyle 配置中提供到 suppresss.xml 的相对路径。然后不需要在 intellij idea 中进行额外配置 我建议使用[/\\] 作为通配符而不是[//\],以确保跨系统兼容性。这是the docs 遵循的模式。【参考方案2】:

在barfuin's answer 的基础上,我不希望(还)有另一个XML 文件在周围浮动。但是,可以直接在 CheckStyle XML 配置文件中配置抑制:

  <module name="SuppressionSingleFilter">
    <metadata name="net.sf.eclipsecs.core.comment" value="Suppress MethodNameMain check on unit tests"/>
    <property name="files" value=".*[\\/]src[\\/]test[\\/]"/>
    <property name="id" value="MethodNameRegular"/>
  </module>
  <module name="SuppressionSingleFilter">
    <metadata name="net.sf.eclipsecs.core.comment" value="Suppress MethodNameTest check except on unit tests"/>
    <property name="files" value=".*[\\/]src[\\/](?!test[\\/])"/>
    <property name="id" value="MethodNameTest"/>
  </module>

(这将是两个 MethodName 检查的补充。)

【讨论】:

以上是关于Checkstyle 不同文件的不同规则的主要内容,如果未能解决你的问题,请参考以下文章

SonarQube配置自定义的CheckStyle代码规则

如何配置eclipse的checkstyle和findbugs两个插件

是否有符合 Checkstyle 格式规则的 Eclipse“清理”配置文件?

CheckStyle插件安装及说明

xml Gradle 4.5.1的Checkstyle配置。将'google_checks_old.xml'添加到'config / checkstyle / checksty

关于checkStyle检查代码的问题