在Sonar的代码分析过程中,是否可以抑制个别规则违规?

时间:2015-09-23 09:34:28

标签: c# sonarqube

Sonar中的C#插件标记了圈复杂度大于10的方法(CSharpsquid:S1541 - 方法不应该太复杂)。 这对于“真正的”代码来说非常棒,但是当一个只包含一个带有5个案例的简单“switch”语句(用于将一个枚举类型翻译成另一个枚举类型)的方法标记为过于复杂时,我的团队发现这很烦人。

是否可以取消代码库中各个方法的标志/规则?如果是这样,怎么样?

2 个答案:

答案 0 :(得分:3)

您无法自动执行此操作。

也许您可以使用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);
   }
}

答案 1 :(得分:0)

当然,您甚至可以添加名为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}")]