我正在寻找一种方法来压缩StyleCop创建的方法或类级别的个别违规消息。
提供我正在寻找的简单示例..
// Attribute will suppress all occurrences of violation "SA1306"
// within the Testing1() method.
[SuppressMessage("StyleCop.CSharp.NamingRules",
"SA1306:FieldNamesMustBeginWithLowerCaseLetter",
Justification = "Reviewed. Suppression is OK here.")]
public void Testing1()
{
//Fires off SA1306
var Temp = "";
//Also fires off SA1306
var Temp2 = "";
}
有了上述内容,我想知道是否有方法可以抑制第一次违规,但仍有第二次违规。
我搜索过并发现了一些相关问题,但我想知道这是否可行。
感谢。
答案 0 :(得分:0)
规则SA1306用于以小写字母开头的字段名称。我会避免试图压制这一点,因为以大写字母开头的字段名称可能会被误认为对象的属性。
我不推荐这种编码方式,并且总是坚持以大写字母开头的属性和以小写字母开头的字段。这将有助于代码中的可读性和意图。
答案 1 :(得分:0)
在StyleCop记录规则违规之前,它会检查是否应该禁止违规。它通过检查是否在元素(导致违规)或其任何父项(例如,类将是方法的父类,方法将是变量声明元素的父元素)中指定抑制来执行此操作。方法)。 这意味着方法内部的两个不同违规将被方法本身的抑制所抑制。
这里的关键是如何搜索匹配元素以及搜索哪些元素。以下方法在CsParser.cs中,在源的CSharperParser项目中:
private static bool MatchElementWithPossibleElementsTraversingParents(CsElement element, IList<CsElement> possibleElements)
{
Param.AssertNotNull(element, "element");
Param.AssertNotNull(possibleElements, "possibleElements");
// Loop through each possible element using a for-style loop rather than a foreach, since this
// is faster and this method is called very often.
for (int i = 0; i < possibleElements.Count; ++i)
{
CsElement possibleMatch = possibleElements[i];
// Walk through the element and each of its parents to see if any is a match.
CsElement item = element;
while (item != null)
{
if (item == possibleMatch)
{
return true;
}
item = item.FindParentElement();
}
}
return false;
}
备份一点以理解上下文,参数CsElement元素将是已检测到违规的已解析标记的父元素,而possibleElements是与抑制规则关联的CsElements列表。 通过此方法的每个元素都将匹配stylecop使用的“ElementType”枚举。一些示例元素类型是class,field,constructor和using指令,其中一个元素类型将与所讨论的违规相关联。
在我的问题中列出的示例中,这实际上是会发生的事情;
因此,两个违规都被相同的抑制属性所抑制,所以我的问题的答案最终是否定的。