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 不同文件的不同规则的主要内容,如果未能解决你的问题,请参考以下文章
如何配置eclipse的checkstyle和findbugs两个插件
是否有符合 Checkstyle 格式规则的 Eclipse“清理”配置文件?
xml Gradle 4.5.1的Checkstyle配置。将'google_checks_old.xml'添加到'config / checkstyle / checksty