【发布时间】: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 视为常量。