如何禁用特定的代码行的特定检查式规则?

我在我的项目中configuration了checkstylevalidation规则,禁止使用多于3个input参数定义类方法。 这个规则适用于我的课程,但是有时我需要扩展不遵守这个特定规则的第三方课程。

有没有可能指示“checkstyle”某个方法应该被忽略?

顺便说一下,我结束了自己的checkstyle包装: qulice.com (请参阅Java代码质量的严格控制 )

http://checkstyle.sourceforge.net/config_filters.html#SuppressionCommentFilter查看supressionCommentFilter的用法。; 您需要将模块添加到您的checkstyle.xml

<module name="SuppressionCommentFilter"/> 

它是可configuration的。 因此,您可以在代码中添加注释以closurescheckstyle(在各个级别),然后通过在代码中使用注释再次注释。 例如

 //CHECKSTYLE:OFF public void someMethod(String arg1, String arg2, String arg3, String arg4) { //CHECKSTYLE:ON 

甚至更好,使用这个更多的调整版本:

 <module name="SuppressionCommentFilter"> <property name="offCommentFormat" value="CHECKSTYLE.OFF\: ([\w\|]+)"/> <property name="onCommentFormat" value="CHECKSTYLE.ON\: ([\w\|]+)"/> <property name="checkFormat" value="$1"/> </module> 

这使您可以closures对特定代码行的特定检查:

 //CHECKSTYLE.OFF: IllegalCatch - Much more readable than catching 7 exceptions catch (Exception e) //CHECKSTYLE.ON: IllegalCatch 

也可以看看

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

在相同页面上的SuppressionFilter部分下,可以closures对模式匹配资源的单独检查。

所以,如果你有你的checkstyle.xml:

 <module name="ParameterNumber"> <property name="id" value="maxParameterNumber"/> <property name="max" value="3"/> <property name="tokens" value="METHOD_DEF"/> </module> 

你可以在你的抑制XML文件中closures它:

 <suppress id="maxParameterNumber" files="YourCode.java"/> 

Checkstyle 5.7现在提供的另一种方法是通过@SuppressWarnigns java注释来抑制违规。 为此,您需要在configuration文件中添加新的模块(SuppressWarningsFilter和SuppressWarningsHolder):

 <module name="Checker"> ... <module name="SuppressWarningsFilter" /> <module name="TreeWalker"> ... <module name="SuppressWarningsHolder" /> </module> </module> 

然后,在您的代码中,您可以执行以下操作:

 @SuppressWarnings("checkstyle:methodlength") public void someLongMethod() throws Exception { 

或者,对于多重抑制:

 @SuppressWarnings({"checkstyle:executablestatementcount", "checkstyle:methodlength"}) public void someLongMethod() throws Exception { 

注意:checkstyle: ”前缀是可选的(但推荐),参数名必须全部小写

如果您更愿意使用注释select性地使规则@SuppressWarnings ,那么现在可以使用@SuppressWarnings注释,从Checkstyle 5.7开始(并由Checkstyle Maven Plugin 2.12+支持)。

首先,在您的checkstyle.xml ,将SuppressWarningsHolder模块添加到TreeWalker

 <module name="TreeWalker"> <!-- Make the @SuppressWarnings annotations available to Checkstyle --> <module name="SuppressWarningsHolder" /> </module> 

接下来,启用SuppressWarningsFilter

 <!-- Filter out Checkstyle warnings that have been suppressed with the @SuppressWarnings annotation --> <module name="SuppressWarningsFilter" /> 

现在,您可以注释例如您想要从某个Checkstyle规则中排除的方法:

 @SuppressWarnings("checkstyle:methodlength") @Override public boolean equals(Object obj) { // very long auto-generated equals() method } 

@SuppressWarnings的参数中的checkstyle:前缀是可选的,但是我喜欢它作为提醒来警告这个地方。

最后,如果你使用Eclipse,它会抱怨这个参数是未知的:

不受支持的@SuppressWarnings(“checkstyle:methodlength”)

如果您喜欢,可以在首选项中禁用此Eclipse警告:

 Preferences: Java --> Compiler --> Errors/Warnings --> Annotations --> Unhandled token in '@SuppressWarnings': set to 'Ignore' 

SuppressWithNebybyCommentFilter也适用于使用单独注释来抑制审计事件。

例如

 // CHECKSTYLE IGNORE check FOR NEXT 1 LINES public void onClick(View view) { ... } 

configuration一个filter,使CHECKSTYLE IGNORE检查FOR NEXT var LINES避免触发对当前行和下一个var行(对于总共var + 1行)的检查的任何审计:

 <module name="SuppressWithNearbyCommentFilter"> <property name="commentFormat" value="CHECKSTYLE IGNORE (\w+) FOR NEXT (\d+) LINES"/> <property name="checkFormat" value="$1"/> <property name="influenceFormat" value="$2"/> </module> 

http://checkstyle.sourceforge.net/config.html

我有上面的答案有困难,可能是因为我把checkStyle警告设置为错误。 什么工作是SuppressionFilter: http : //checkstyle.sourceforge.net/config_filters.html#SuppressionFilter

这样做的缺点是行范围存储在一个单独的suppresssions.xml文件中,所以陌生的开发人员可能不会立即build立连接。

 <module name="Checker"> <module name="SuppressionCommentFilter"/> <module name="TreeWalker"> <module name="FileContentsHolder"/> </module> </module> 

configurationfilter以在包含BEGIN GENERATED CODE行的注释和包含行的注释之间禁止审核事件END GENERATED CODE:

 <module name="SuppressionCommentFilter"> <property name="offCommentFormat" value="BEGIN GENERATED CODE"/> <property name="onCommentFormat" value="END GENERATED CODE"/> </module> //BEGIN GENERATED CODE @Override public boolean equals(Object obj) { ... } // No violation events will be reported @Override public int hashCode() { ... } // No violation events will be reported //END GENERATED CODE 

查看更多

每一个引用SuppressWarningsFilter的答案都缺less一个重要的细节。 你只能使用全小写的ID,如果它在你的checkstyle-config.xml中定义的话。 如果不是,则必须使用原始模块名称。

例如,如果在我的checkstyle-config.xml中有:

 <module name="NoWhitespaceBefore"/> 

我不能使用:

 @SuppressWarnings({"nowhitespacebefore"}) 

但是,我必须使用:

 @SuppressWarnings({"NoWhitespaceBefore"}) 

为了使第一个语法工作,checkstyle-config.xml应该有:

 <module name="NoWhitespaceBefore"> <property name="id" value="nowhitespacebefore"/> </module> 

这对我来说是至关重要的,至less在CheckStyle 6.17版本中是这样的。