当前位置: 首页 > 面试题库 >

如何禁用特定代码行的特定checkstyle规则?

微生曾琪
2023-03-14
问题内容

我在项目中配置了一个checkstyle验证规则,该规则禁止使用超过3个输入参数来定义类方法。该规则适用于我的类,但有时我必须扩展第三方类,而第三方类则不遵守此特定规则。

是否有可能指示“ checkstyle”某种方法应以静默方式忽略?


问题答案:

在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注释抑制冲突。为此,你将需要在配置文件中添加两个新模块(SuppressWarningsFilterSuppressWarningsHolder):

<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:”前缀是可选的(但建议使用)。根据文档,参数名称必须全部小写,但实践表明任何大小写都可行。



 类似资料:
  • 我试图使用抑制过滤器,但发生意外错误。 以下是一条错误消息。 无法初始化模块SuppressionFilter-无法将模块SuppressionFilter中的属性“file”设置为“checkstyle suppressions.xml”:无法找到checkstyle-suppressions.xml-文档根元素“suppressions”,必须与DOCTYPE root“module”匹配 你

  • 问题内容: 我正在使用无状态Spring Security,但是如果要注册,我想禁用Spring Security。我禁用了 但它不起作用,我在下面收到错误消息: 我认为这意味着弹簧安全过滤器正在工作 我的网址顺序始终为“ / api / v1” 我的spring配置是 我的身份验证过滤器是 我的控制器是 我怎么做? 问题答案: 使用它意味着每个经过身份验证的用户,但是你禁用了匿名访问,因此将无法

  • 问题内容: 我试图禁用pickerView中的特定行。 我有一个用于pickerView的字符串数组。当用户选择特定的行时,我将值追加到array1中。 之后,如果array1具有array的值,则当用户再次打开pickerView时,我想这样做,应该禁用pickerView的值。 我怎样才能做到这一点? 问题答案: 选项1:禁用元素 您可以使用pickerView:attributedTitle

  • 使用ESLint是否可以忽略整个目录的一个特定规则? 在我的例子中,我想忽略为一个名为的目录

  • 我有一个微服务,它主要使用与其他微服务对话。使用Eureka的服务发现机制,这项工作非常出色。 现在我迫切需要使用连接到外部系统,并且仍然使用如下所示的配置执行负载平衡。 : : 从我看过的许多文档中,建议禁用eureka以允许从可用的服务器列表中获取负载平衡。我做了跟进,并使用以下配置禁用它。 : 这使我能够为针对外部系统的外部客户端执行负载平衡,但需要使用服务发现的所有其他外部客户端都已中断。

  • 为了关闭JSHint中特定行的林分规则,我们使用以下规则: 我一直在尝试为Eslint找到与上述相同的产品。