小编典典

禁用特定代码行的特定 Checkstyle 规则?

all

我在我的项目中配置了一个Checkstyle验证规则,该规则禁止定义具有 3
个以上输入参数的类方法。该规则适用于 我的 课程,但有时我必须扩展不遵守此特定规则的第三方课程。

是否有可能指示 Checkstyle 应该默默地忽略某个方法?

顺便说一句,我最终得到了我自己的 Checkstyle 包装器:qulice.com(请参阅严格控制
Java 代码质量


阅读 121

收藏
2022-06-27

共1个答案

小编典典

在http://checkstyle.sourceforge.net/config_filters.html#SuppressionCommentFilter查看
supressionCommentFilter 的使用。您需要将该模块添加到您的 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

*注意:您还必须添加FileContentsHolder

<module name="FileContentsHolder"/>

也可以看看

<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 现在提供的另一种方法是通过@SuppressWarningsjava 注释抑制违规。为此,您需要在配置文件中添加两个新模块
(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:”前缀是可选的(但推荐)。根据文档,参数名称必须全部小写,但实践表明任何大小写都有效。

2022-06-27