当我有以下带有 2 个三元运算级别的代码时
double amount = isValid ? (isTypeA ? vo.getTypeA() : vo.getTypeB()) : 0;
声纳发出警告
Ternary operators should not be nested (squid:S3358)
只因为你can做某事,并不意味着你应该做某事,嵌套三元运算就是这种情况。嵌套三元运算符会产生这样的代码,在您编写代码时可能看起来很清晰,但六个月后会让维护人员(或更糟 - 未来的您)摸不着头脑并咒骂。
相反,为了清晰起见,应使用另一行将嵌套操作表示为单独的语句。
我的同事建议这样的水平可以接受,而且比其他选择更清晰。
我想知道这个规则(或其他规则)是否可以配置为允许的级别限制?
如果不是,为什么声纳在处理代码约定时如此严格?
我不想ignore https://stackoverflow.com/questions/39109228/how-can-we-ignore-some-sonarqube-rules-in-java规则,只是自定义以允许最多 2 个级别而不是 1 个级别。
请问这个规则是否可以配置允许的级别限制?
The 无法配置规则。您只能启用或禁用它。
不知道是否可以配置其他规则来限制允许的级别?
我不知道任何现有规则可以做到这一点。幸运的是,您可以创建自定义分析器。原来的规则类在这里嵌套三元运算符检查 https://github.com/SonarSource/sonar-java/blob/d3eb9295131104fcda5871f919fd905534b15417/java-checks/src/main/java/org/sonar/java/checks/NestedTernaryOperatorsCheck.java。您只需复制它并根据您的需要进行调整即可。
为什么声纳在处理代码约定时如此严格?
SonarSource 为不同的语言提供了很多规则。每次定制都会使代码更难以维护。他们的能力有限,因此他们必须做出所有用户都无法接受(但大多数用户都接受)的决定。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)