Пользовательские правила StyleCop: параметры метода и переменные - PullRequest
1 голос
/ 28 июня 2011

Я новичок в 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 класса внутри и как я могу получить их идентификаторы (имена)?

True:

 namespace Hello 
  {
     class P{

     }
  } 

- Неправильно:

namespace Hi {
  class C {

  } 
  class E {

  }
}  
namespace Ho {
  class D {

  }
}

4) Как я могу узнать вызовы функций и узнать, куда?(т.е. блокирование вызова определенной функции)

1 Ответ

4 голосов
/ 07 июля 2011

Для # 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, поскольку оно не имеет ничего общего со стилем исходного кода.

...