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

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

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

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

【问题讨论】:

    标签: checkstyle filefilter


    【解决方案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 检查的补充。)

    【讨论】:

      猜你喜欢
      • 2011-08-17
      • 2019-10-21
      • 2011-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-15
      • 2016-08-31
      相关资源
      最近更新 更多