在StyleCop Analyzers中配置排序规则以强制执行用户定义的成员顺序

时间:2016-03-23 13:47:06

标签: c# visual-studio-2015 roslyn analyzer roslyn-code-analysis

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

1 个答案:

答案 0 :(得分: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);
      }
    }
  }
}