我花了一天时间将所有 PMD 和 Checkstyle 规则迁移到新的 Squid 规则,因为 PMD/Checkstyle 规则被标记为已弃用。
但是,Squid 中不存在我习惯使用 PMD/CS 的一些微调选项。
因此,Sonar 中充斥着数千个问题,而这些问题没有报告任何真正有值(value)的内容。
示例 1
规则: BadConstantName_S00115_Check/S00115
我们所有的枚举都是用驼峰命名法而不是 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
我想确保接口(interface)(包括类和方法)和类(而不是方法/字段)的 javadoc。 就目前情况而言,这是不可能的。 再次,我想禁用对方法和字段的检查
挑战
有人知道如何实现这种抑制吗? 我查看了 SonarQube 上的设置/排除,但是使用排除设置似乎很难甚至不可能实现这一点。
所以我们真正需要的是能够调整规则来抑制对某些类型和方法的检查,使规则更加灵活。 理想情况下,这应该作为通用功能来实现,可以轻松应用于有意义的规则。
目前我必须禁用这些规则(很可能还有其他规则),因为规则的配置不是细粒度的。
我可以在哪里将此作为功能请求提交?
我已经从 Github 查看了源代码,因此目前正在研究以编程方式修复这些问题。然而,这不是一个可行的长期解决方案。
最佳答案
Dag 是正确的,这些规则没有配置。经过 SonarSource 的内部讨论后,不会添加配置。
适合您情况的最佳想法是在 Java 中实现自定义规则,如所述 here
关于squid - Sonarqube:Squid 规则定制/抑制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23219636/