StyleCop自定义规则:方法参数和变量

时间:2011-06-28 14:08:09

标签: c# parameters stylecop identifier

我是StyleCop的新手,我需要为我工作的地方实施自己的编码标准。我正在使用VS2005,无法调试它。现在升级到VS2008 / 2010不是我们的选择。

我想知道很多事情:

1)如何识别方法参数?我尝试了以下但不知道去哪里,SDK文档并没有真正帮助。

  private bool VisitElement(CsElement element, CsElement parentElement, object context)
        {
            if (element.ElementType == ElementType.Method)
            {
               ...

2)我怎样才能发现声明不遵循作业? Ex.given。

  int i;  // Wrong, give warning
  int i = 0; // True usage

3)我怎样才能发现文档中不仅包含1个命名空间或只包含1个类,如何获取其标识符(名称)?

真:

 namespace Hello 
  {
     class P{

     }
  } 

- 错误:

namespace Hi {
  class C {

  } 
  class E {

  }
}  
namespace Ho {
  class D {

  }
}

4)我怎样才能找到函数调用并找出去哪里? (即阻止对特定功能的呼叫)

1 个答案:

答案 0 :(得分:4)

对于#1,请查看Microsoft.StyleCop.CSharp.ReadabilityRules.CheckMethodParameters方法实现(在Reflector或http://stylecop.codeplex.com/SourceControl/changeset/view/64d44becb157#Project%2fSrc%2fAddIns%2fCSharp%2fAnalyzers%2fReadabilityRules.MethodParameters.cs中)。

对于#2,类似下面的内容应该可以解决问题:

private bool VisitExpression(Expression expression, Expression parentExpression, Statement parentStatement, CsElement parentElement, object context)
{
    if (expression.ExpressionType == ExpressionType.VariableDeclarator)
    {
        VariableDeclaratorExpression declaratorExpression = (VariableDeclaratorExpression)expression;
        if (declaratorExpression.Initializer == null)
        {
            this.AddViolation(parentElement, expression.LineNumber, "YourRule", declaratorExpression.Identifier.Text);
        }
    }

    return true;
}

现有的SA1402(FileMayOnlyContainASingleClass)和SA1403(FileMayOnlyContainASingleNamespace)规则应该处理#3。如果它们不适用于您的方案,请指定您希望自定义规则以不同方式执行的操作。

#4应该是FxCop规则,而不是StyleCop规则,因为它与源代码样式无关。