【问题标题】:How can I ignore a CheckStyle rule for a line matching a pattern "if (log.isDebugEnabled()) {"如何忽略与模式“if (log.isDebugEnabled()) {”匹配的行的 CheckStyle 规则
【发布时间】:2021-01-28 20:37:27
【问题描述】:

我正在使用 CheckStyle 来检查大括号的位置,并且通常希望强制左大括号位于行尾并在其后缩进。我有这个工作。例如

if (something_is_true) {
  ...

但是,在非常具体的记录语句的情况下,我想保持紧凑,我想允许

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

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

有没有办法通过 checkstyle 配置文件来抑制与给定模式匹配的行的警告?

谢谢。

【问题讨论】:

  • if (log.isDebugEnabled()) { log.debug("my logging statement."); } ← 永远不要那样做。 第一件事 log.debug 方法所做的就是检查。所有的日志框架都是这样工作的。你让你的代码比它需要的更长,并且你通过将日志记录作为代码的重要部分而不是仅仅是装饰而损害了可读性。
  • 有时我需要使用字符串连接从代码中构造更长的字符串,并且我仍在 log4j 1.2(供应商平台)上,所以没有格式字符串的奢侈。我宁愿预先支付 isDebugEnabled 检查,也不愿在检查之前构造不必要的字符串。根据stackoverflow.com/questions/963492/…

标签: java checkstyle


【解决方案1】:

我认为这是 How to disable a particular checkstyle rule for a particular line of code? 的副本。

其实你有3个选择:

  • 使用@SuppressWarning("checkstyle:rule")
  • 抑制checkstyle-suppressions.xml 中的规则
  • 使用来自 java 注释的@checkstyle rule (N lines)(也适用于 javadoc)

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

【讨论】:

  • 我非常不想使用 SuppressWarnings,因为我试图避免添加更多行。不过,您的 checkstyle-suppressions.xml 恰到好处。
【解决方案2】:

回答了我自己的问题。我在我的 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>

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-15
    • 1970-01-01
    • 2011-08-11
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 2014-08-06
    相关资源
    最近更新 更多