gpt4 book ai didi

c# - EditorConfig - 如何在自定义分析器中访问 editorconfig 规则设置

转载 作者:行者123 更新时间:2023-12-03 19:20:59 24 4
gpt4 key购买 nike

我想知道是否有一种本地方式来存储和访问自定义 roslyn 分析器的其他设置。
假设我有诊断 ID 为“XA0001”的规则,在编辑器配置中我将设置

dotnet_diagnostic.XA0001.severity = error

到目前为止,一切正常。现在我想添加类似这样的内容来为该新规则创 build 置:
dotnet_diagnostic.XA0001.scope = class, enum, interface
dotnet_diagnostic.XA0001.level = toplevel

其中范围和级别是我需要可配置的规则的附加属性(通常是字符串或某种枚举),因为它们可以变化。每次都会有该规则的默认设置可以被 editorconfig 覆盖。

是否有可能,如果有的话,是否有任何超短示例 ev。指向帖子的链接如何访问分析器类中的其他编辑器配置设置或仅从该项目级别访问?
[DiagnosticAnalyzer(LanguageNames.CSharp)]
public class RuleXA0001Analyzer : DiagnosticAnalyzer
{
public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics { get; } = ImmutableArray.Create(RuleXA0001.Descriptor);

public override void Initialize(AnalysisContext context)
{
context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.None);
context.EnableConcurrentExecution();

//TODO access editorconfig settings for this rule
//Perform analysis & report diagnostics
}
}
}

无需访问其他规则设置,即使它在其他情况下可能是有益的。

谢谢

最佳答案

AnalyzerOptions类有一个属性 AnalyzerConfigOptionsProvider ,可用于访问 .editorconfig 设置。
例如,如果您正在分析代码块,则可以执行以下操作:

public override void Initialize(AnalysisContext context)
{
context.RegisterCompilationStartAction(RegisterCompilationStart);
}

private static void RegisterCompilationStart(CompilationStartAnalysisContext startContext)
{
var optionsProvider = startContext.Options.AnalyzerConfigOptionsProvider;
startContext.RegisterCodeBlockAction(actionContext => AnalyzeCodeBlock(actionContext, optionsProvider));
}

private static void AnalyzeCodeBlock(CodeBlockAnalysisContext context, AnalyzerConfigOptionsProvider optionsProvider)
{
// The options contains the .editorconfig settings
var options = optionsProvider.GetOptions(context.CodeBlock.SyntaxTree);
var isFound = options.TryGetValue("dotnet_diagnostic.XA0001.level", out var value);
}

关于c# - EditorConfig - 如何在自定义分析器中访问 editorconfig 规则设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59286215/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com