在 StyleCop 分析器中配置排序规则以强制执行用户定义的成员顺序
Configure ordering rule in StyleCop Analyzers to enforce user-defined member order
是否可以配置 StyleCop 分析器,以便检查 class 中成员的 "my" 顺序(与 SA1201 描述的不同)?也就是说,我希望我的属性位于构造函数之上,而 SA1201 要求它们位于构造函数之下。我不想禁用排序规则,因为我确实想坚持检查订单。
下面只是介绍了基本的想法,但真正应该考虑看看 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);
}
}
}
}
是否可以配置 StyleCop 分析器,以便检查 class 中成员的 "my" 顺序(与 SA1201 描述的不同)?也就是说,我希望我的属性位于构造函数之上,而 SA1201 要求它们位于构造函数之下。我不想禁用排序规则,因为我确实想坚持检查订单。
下面只是介绍了基本的想法,但真正应该考虑看看 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);
}
}
}
}