2010-10-26 457 views

回答

211

退房利用supressionCommentFilter在http://checkstyle.sourceforge.net/config_filters.html#SuppressionCommentFilter。您需要将模块添加到您的checkstyle.xml

<module name="SuppressionCommentFilter"/> 

并且它是可配置的。因此,您可以向代码添加注释以关闭checkstyle(在各个级别),然后通过在代码中使用注释再次注释。例如。

//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> 

它允许你关闭特定检查的特定代码行:

//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部分,允许您关闭对模式匹配资源的单独检查。

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

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

你可以关闭它在抑制xml文件:

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

另一种方法,现在市面上的Checkstyle 5.7是通过@SuppressWarnigns java注释来抑制违规行为。要做到这一点,你需要新的模块(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:” 前缀是可选的(但建议)和参数名必须全部小写

+5

记住添加FileContentsHolder在TreeWalter 。如果您使用'// CHECKSTYLE.OFF:',请参阅http://stackoverflow.com/a/5764666/480483 – djjeck 2014-01-16 22:23:39

+1

,然后忘记再次打开它,它是否仅在包含“// CHECKSTYLE”的文件中保持关闭状态。 OFF:还是所有随后处理的文件? – Roland 2014-09-30 17:58:02

+0

@Roland,它只是在测试课期间关闭。 – 2014-09-30 22:12:48

28

还有效的是SuppressWithNearbyCommentFilter,它使用单独的注释来抑制审计事件。

例如

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

要配置的过滤器,使得CHECKSTYLE IGNORE检查NEXT变种LINES避免触发任何审计用于当前行和下一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

+0

我会将正则表达式更改为'CHECKSTYLE IGNORE(\ w +)FOR NEXT(\ d +)LINES?',这将使ignore命令更具可读性。 (您可以使用“CHECKSTYLE IGNORE check for NEXT 1 LINE”和“CHECKSTYLE IGNORE check for NEXT 3 LINES”)。 – Matt3o12 2014-05-28 17:10:43

+0

@ matt3o12'CHECKSTYLE IGNORE(\ w +)FOR NEXT(\ d +)LINE'也适用于我(它匹配'line'和'lines')。 – 2015-07-22 08:10:32

45

如果你喜欢使用注解来选择性沉默的规则,这是现在可以使用@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 
} 

checkstyle:前缀的参数@SuppressWarnings是可选的,但我喜欢它看作是这个警告是从哪里来的提醒。

最后,如果你使用Eclipse,它会抱怨参数暂时未知到它:

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

可以禁用此在Eclipse中的喜好警告,如果你喜欢:

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

每一个答案,指的SuppressWarningsFilter缺少的重要DET AIL。如果您的checkstyle-config.xml中定义了这样的名称,那么只能使用全小写的ID。如果不是,则必须使用原始模块名称。

举例来说,如果在我的CheckStyle-config.xml中我有:

<module name="NoWhitespaceBefore"/> 

我不能使用:

@SuppressWarnings({"nowhitespacebefore"}) 

我但是,必须使用:

@SuppressWarnings({"NoWhitespaceBefore"}) 

为了使第一种语法起作用,checkstyle-config.xml应该有:

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

这是至少在CheckStyle的版本6.17为我工作。

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

要配置滤波器来抑制含行开始生成的代码和含线END评论评论之间的审计事件生成代码:

<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 

See more

+0

这只能省略警报,但问题仍然出现在审计中...... – viruskimera 2017-09-28 16:49:55

相关问题