【问题标题】:Sonarqube: Squid Rules customization/suppressionSonarqube:鱿鱼规则自定义/抑制
【发布时间】:2014-06-06 19:55:51
【问题描述】:

我花了一天时间将所有 PMD 和 Checkstyle 规则迁移到新的 Squid 规则中,因为 PMD/Checkstyle 被标记为已弃用。

但是,我习惯使用 PMD/CS 的一些微调选项在 Squid 中不存在。

因此,Sonar 中充斥着数千个问题,而这些问题并没有报告任何真正的价值。

示例 1

规则: BadConstantName_S00115_Check / S00115

我们所有的枚举都是用 camelCase 而不是 CONSTANT_NAME 实现的,例如:

public enum Classification {
    PoorMinus(1),
    Poor(2),
    PoorPlus(3),
    OrdinaryMinus(4),
    Ordinary(5),

比:

更容易阅读
public enum Classification {
    POOR_MINUS(1),
    POOR(2),
    POOR_PLUS(3),

这样做是为了提高代码中其他地方引用时的可读性(使用静态导入)

所以我正在寻找的是一种抑制枚举规则的方法,因为我们希望保留“真实”常量的规则。

示例 2

规则: 方法循环复杂度

迁移后,此规则会报告所有 equals 和 hashcode 方法的复杂性。 (这些方法很容易抑制弃用的 CS 规则)

衡量由 Eclipse/IntelliJ 自动生成的方法的复杂性是没有意义的(至少对我们而言)。重要的是衡量代码的“业务逻辑”部分的复杂性

在这里我们真的很想取消这些/特定方法的规则

示例 3

规则:UndocumentedApi

我想确保 javadoc 仅用于接口(包括类和方法)和类级别的类(而不是方法/字段)。 像现在这样,这是不可能的。 同样,我想禁用检查方法和字段

挑战

有人知道如何实现这种抑制吗? 我已经查看了 SonarQube 上的设置/排除项,但是使用排除项设置似乎很难甚至不可能实现这一点。

所以我们真正需要的是能够调整规则以抑制对某些类型和方法的检查,从而使规则更加灵活。 理想情况下,这应该作为通用特性来实现,可以很容易地应用于有意义的规则。

至于现在我必须禁用这些规则(很可能还有其他规则),因为规则的配置不是细粒度的。

我可以在哪里提交此功能请求?

我查看了 Github 的源代码,因此目前正在研究以编程方式解决这些问题。然而,这不是一个可行的长期解决方案。

【问题讨论】:

  • 我非常怀念“示例 1”的松散规则,它不会将 enum-s 视为常量。

标签: squid sonarqube


【解决方案1】:

我在其他规则上也看到了类似的需求,但我猜新哲学是另外一回事:

http://www.sonarqube.org/already-158-checkstyle-and-pmd-rules-deprecated-by-sonarqube-java-rules/

配置选项太多:在完美世界中,优质规则是没有任何配置选项的规则。

PS:不知何故,我对通过 SonarQubes 自己的规则引擎使 PMD、Checkstyle 和 Findbugs 过时的长期雄心感到不舒服,但这只是我的看法。

尤其是对于 PMD,这条路并不长。 Support for PMD 5 似乎没有出现,SonarQube 4.2 默认甚至没有 pmd-plugin。

【讨论】:

  • 我同意,在一个完美的世界里这一切都很好,然而,这个世界并不完美。我确实以前读过这篇文章,但显然没有足够注意那段。我也对 PDD/Checkstyle 支持感到满意,但进行切换的性能参数是可行的。通过迁移 PMD/Checkstyle 检查,我们几乎将 Sonar 构建时间减少了 50%,所以我想我们会尝试采用 sonarqube 引擎
【解决方案2】:

Dag 是正确的,这些规则没有配置。在 SonarSource 内部讨论之后,不会添加配置。

根据您的情况,最好的办法是在 Java 中实现自定义规则,如 here 所讨论的那样

【讨论】:

  • 在我看来这是一个非常严格的限制。因此,实际上无法为我们的特定需求配置规则,结果是规则被停用,因为它们太吵了。创建完全符合每个人需求的“完美”规则可能是一项不可能完成的任务。我的猜测是 SonarQube DO 的用户群有不同的要求。
  • 这是否也意味着jira.codehaus.org/browse/SONARJAVA-57这个功能不会实现?支持 SuppressWarnings 注释
  • 好的,sonarqube 的人没有更多的回应,关闭这个问题
猜你喜欢
  • 1970-01-01
  • 2016-08-03
  • 2016-04-23
  • 2019-06-30
  • 2016-09-03
  • 2017-04-08
  • 2014-04-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多