为某些代码关闭声纳
Posted
技术标签:
【中文标题】为某些代码关闭声纳【英文标题】:Turning Sonar off for certain code 【发布时间】:2012-06-13 21:04:05 【问题描述】:是否可以关闭不希望测量的特定代码块的声纳 (www.sonarsource.org) 测量?
Findbugs 输出的“保留堆栈跟踪”警告就是一个例子。离开服务器时,我可能只想将消息传递回客户端,不包括我刚刚捕获的实际异常,如果客户端不知道该异常(因为客户端没有其中的 JAR例如包含异常)。
【问题讨论】:
【参考方案1】:您可以使用 SuppressWarnings 注释类或方法
@java.lang.SuppressWarnings("squid:S00112")
squid:S00112 在这种情况下是 Sonar 问题 ID。您可以在 Sonar UI 中找到此 ID。转到问题钻取。找到一个你想禁止警告的问题。在代码中的红色问题框中,有一个带有给定问题定义的规则链接。单击该按钮后,您将在页面顶部看到 ID。
【讨论】:
我可以确认这也适用于特定的 FindBugs 规则 ID,例如@SuppressWarnings("findbugs:UI_INHERITANCE_UNSAFE_GETRESOURCE")
.
问题是Eclipse显示警告Unsupported @SuppressWarnings("squid:S00112")
。您可以将 Eclipse 配置为忽略这一点,但不会检测到诸如 @SuppressWarnings("uncheckedd")
中的拼写错误。
有关@SuppressWarnings 和 Sonar 的文档,请参阅 docs.codescan.io/hc/en-us/articles/…。
我们压制的时候如何添加cmets/justification?
看起来这个答案应该被标记为接受。【参考方案2】:
我建议您尝试使用 @SuppressWarnings("squid:S2078")
来抑制特定警告。
要抑制多个警告,您可以这样做 @SuppressWarnings("squid:S2078", "squid:S2076")
还有 //NOSONAR
注释告诉 SonarQube 忽略特定行的所有错误。
最后,如果您对用户界面拥有适当的权限,您可以直接从界面发出一个误报标志。
我建议禁止特定警告的原因是,最好阻止特定问题,而不是使用 //NOSONAR
并冒着意外在您的代码中出现 Sonar 问题的风险。
您可以在FAQ 中阅读更多相关信息
编辑:2016 年 6 月 30 日 SonarQube 现在称为 SonarLint
如果您想知道如何找到鱿鱼编号。只需点击 Sonar 消息(例如Remove this method to simply inherit it.
),Sonar 问题就会展开。
在左下角,它将显示 squid 编号(例如 squid:S1185
可维护性 > 可理解性)
那么你可以通过@SuppressWarnings("squid:S1185")
压制它
【讨论】:
感谢您提示 ingnoe 多个声纳立方体警告 在界面上将其标记为误报的另一个问题是,如果出于某种原因删除并再次添加项目,您设置的所有标志都将消失。 @annedroiid - 如果可以在 pom.xml 文件中完成相同的操作,有什么办法吗?我在这里提出问题:***.com/questions/57789832/…【参考方案3】:这是FAQ。您可以将//NOSONAR
放在触发警告的行尾。
//NOSONAR
对于大多数语言,SonarQube 支持使用通用机制:
//NOSONAR
在问题行的末尾。这将抑制现在和将来可能在线提出的所有问题。
我更喜欢使用 FindBugs 机制,它包括添加 @SuppressFBWarnings 注释:
@edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
value = "NAME_OF_THE_FINDBUGS_RULE_TO_IGNORE",
justification = "Why you choose to ignore it")
【讨论】:
同意。但是,我不确定 Sonar 是否正确解释@SuppressFBWarnings
(添加以避免与 java.lang.SuppressWarnings
冲突)并且也忽略它。
AFAIK,Sonar 使用 FindBugs。因此,如果 FindBugs 处理这些注释,我不明白为什么它们在通过 Sonar 运行 FindBugs 时不起作用。无论如何应该不难测试。
常见问题解答链接已过时。这是新的FAQ
您能否提供其他指向 SonarQube 常见问题解答的链接?我看到的是登录表单而不是常见问题解答
docs.sonarqube.org/latest/faq/#header-1【参考方案4】:
如果您无法帮助您的代码,请在收到警告的行上使用 //NOSONAR。有效!
【讨论】:
【参考方案5】:我无法在声纳 5.6 中找到 squid 编号,使用此注释也可以:
@SuppressWarnings("pmd:AvoidCatchingGenericException", "checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.IllegalCatchCheck")
【讨论】:
squid
用于声纳来源的 Java 数据库 (SonarAnalyzer Java)。 pmd
和 checkstyle
位于其他规则存储库中。【参考方案6】:
实际上很难理解哪个是问题的 ID,所以我使用了 @SuppressWarnings("all") 注释,它基本上适用于所有规则,但更准确地说,最好使用 ID。点击查看图片-> Sonar Issue ID
所以当点击“为什么这是一个问题?”在红色框中,您将进入一个带有解释的屏幕。在左侧的屏幕顶部,您可以看到规则名称,左侧是该规则的 ID。 因此,要申请此规则,您只需将此注释添加到您的类或方法中。
@SuppressWarnings("common-java:DuplicatedBlocks")
【讨论】:
以上是关于为某些代码关闭声纳的主要内容,如果未能解决你的问题,请参考以下文章