提问者:小点点

如何忽略匹配模式“if(log. isDebugEnable()){”的行的CheckStyle规则


我正在使用CheckStyle检查花括号的位置,通常希望强制左花括号位于行尾,并在其后面缩进。

if (something_is_true) {
  ...

但是,在日志语句的非常特殊的情况下,我想保持紧凑,我想允许

if (log.isDebugEnabled()) { log.debug("my logging statement."); }

记录器的名称可能会更改,但通常该行将包含“isDebugEn的”。我不想使用SuppressWarnings或以其他方式在调试行周围添加额外的行-我希望它们不干扰视图和代码流程。

是否有办法通过checkstyle配置文件对匹配给定模式的行抑制警告?

谢谢。


共2个答案

匿名用户

我认为这是如何为特定代码行禁用特定检查样式规则的重复?。

事实上,你有3个选择:

  • 使用@SuppressWarning("checkstyle:规则")
  • checkstyle-抑制. xml
  • 中抑制规则
  • 使用@checkstyle规则(N行)java注释(也适用于javadoc)

这些选项完全取决于您的checkstyle插件版本,因此最好从已经提出的问题开始研究:

  • 如何抑制枚举常量/值上缺少javadoc检查样式警告?
  • 如何在CheckStyle中禁止警告?
  • 如何在Checkstyle中取消对文件的所有检查?
  • 忽略带有注释的Checkstyle警告@SuppressWarnings

匿名用户

回答了我自己的问题。我在我的checkstyle配置文件中添加了一个抑制文件,其中抑制文件包含以下内容:

<?xml version="1.0"?>

<!DOCTYPE suppressions PUBLIC
"-//Checkstyle//DTD SuppressionXpathFilter Experimental Configuration 1.2//EN"
"https://checkstyle.org/dtds/suppressions_1_2_xpath_experimental.dtd">

<suppressions>
  <suppress-xpath checks="LeftCurly"
    query="//LITERAL_IF[.//METHOD_CALL/DOT/IDENT[@text='isDebugEnabled']]/SLIST"/>
</suppressions>

这将查找包含对isDebugEn的调用的引用的所有if语句,并匹配以下以左大括号开头的“语句列表”。