是否可以配置三元运算符不应嵌套(squid:S3358)

2023-12-29

当我有以下带有 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(使用前将#替换为@)

是否可以配置三元运算符不应嵌套(squid:S3358) 的相关文章

随机推荐