【问题标题】:Can individual rule violations be suppressed during code-analysis in Sonar?在 Sonar 中的代码分析期间,是否可以抑制个别违反规则的行为?
【发布时间】:2016-01-07 02:28:18
【问题描述】:

Sonar 中的 C# 插件标记圈复杂度大于 10 的方法(CSharpsquid:S1541 - 方法不应太复杂)。 这对于“真实”代码非常有用,但是当仅包含一个简单的“switch”语句和 5 个案例(用于将一种枚举类型转换为另一种枚举类型)的方法被标记为太复杂时,我的团队发现它很烦人。

是否可以在代码库中抑制单个方法的标志/规则?如果有,怎么做?

【问题讨论】:

    标签: c# sonarqube


    【解决方案1】:

    您不能自动执行此操作。

    也许您可以使用IMap 而不是抑制规则。您可以创建可以翻译枚举的简单类:

    public class Enum1ToEnum2Translator {
    
       private static IMap<Enum1, Enum2> MAP = new Map<Enum1, Enum2>();
    
       static {
          MAP.add(Enum1.VAL1, Enum2.VAL1);
          MAP.add(Enum1.VAL2, Enum2.VAL2);
          MAP.add(Enum1.VAL3, Enum3.VAL3);
       }
    
       public Enum2 translate(Enum1 enum) {
          return MAP.get(enum1);
       }
    }
    

    【讨论】:

    【解决方案2】:

    当然,您甚至可以添加名为 GlobalSuppressions.cs 的全局文件并添加一行

    [assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Maintainability", "S1541:Methods should not be too complex", Justification = "<Pending>", Scope = "member", Target = "~M:Test.Checkout.Checkout.SetCurrentState(System.Int32)~System.Nullable{System.Boolean}")]
    

    【讨论】:

    • 如何生成这种抑制?很难手工制作一堆这些,但我找不到以编程方式生成它们的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-11
    相关资源
    最近更新 更多