【发布时间】:2016-01-07 02:28:18
【问题描述】:
Sonar 中的 C# 插件标记圈复杂度大于 10 的方法(CSharpsquid:S1541 - 方法不应太复杂)。 这对于“真实”代码非常有用,但是当仅包含一个简单的“switch”语句和 5 个案例(用于将一种枚举类型转换为另一种枚举类型)的方法被标记为太复杂时,我的团队发现它很烦人。
是否可以在代码库中抑制单个方法的标志/规则?如果有,怎么做?
【问题讨论】:
Sonar 中的 C# 插件标记圈复杂度大于 10 的方法(CSharpsquid:S1541 - 方法不应太复杂)。 这对于“真实”代码非常有用,但是当仅包含一个简单的“switch”语句和 5 个案例(用于将一种枚举类型转换为另一种枚举类型)的方法被标记为太复杂时,我的团队发现它很烦人。
是否可以在代码库中抑制单个方法的标志/规则?如果有,怎么做?
【问题讨论】:
您不能自动执行此操作。
也许您可以使用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);
}
}
【讨论】:
pragma(请参阅 Is there a way to suppress warnings in C# similar to Java's @SuppressWarnings annotation?)
当然,您甚至可以添加名为 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}")]
【讨论】: