2

是否可以配置 StyleCop 分析器,以便可以检查类中成员的“我的”顺序(与SA1201描述的不同)?也就是说,我希望将我的属性放在构造函数之上,而 SA1201 要求将它们放在构造函数之下。我不想禁用排序规则,因为我确实想坚持检查订单。

4

1 回答 1

0

以下只是介绍基本概念,但应该真正考虑查看 StyleCop-Analyzers 的作用。

使用Analyzer with Code Fix (NuGet + VSIX)项目模板,我想出了一个分析器的初稿,它能够检测属性何时放置在方法之后。在 DiagnosticAnalyzer.cs 文件中实现的静态AnalyzeSymbol方法(在项目创建时生成)的实现是:

private static void AnalyzeSymbol(SymbolAnalysisContext context)
{
  var members = namedTypeSymbol.GetMembers();
  var methods = from m in members
                where (m.Kind == SymbolKind.Method && 
                  !m.IsImplicitlyDeclared && m.CanBeReferencedByName)
                select m;

  var properties = from m in members
                   where m.Kind == SymbolKind.Property
                   select m;

  foreach (var p in properties)
  {
    foreach (var m in methods)
    {
      if (p.Locations.First().SourceSpan.Start > m.Locations.First().SourceSpan.Start)
      {
         // For all such symbols, produce a diagnostic.
         var diagnostic = Diagnostic.Create(Rule, m.Locations[0], m.Name);
         context.ReportDiagnostic(diagnostic);
      }
    }
  }
}
于 2016-04-18T14:01:47.483 回答