2010-10-26 453 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

相關問題