首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Roslyn Analyzer未清除上次诊断

Roslyn Analyzer未清除上次诊断
EN

Stack Overflow用户
提问于 2021-05-05 20:27:06
回答 1查看 52关注 0票数 0

我已经创建了一个Roslyn Analyzer,它根据一组规则验证文本文件,并注意到当我修复最后一个问题时,诊断结果并没有消失。我已经创建了一个简单的示例来复制下面的问题。

代码语言:javascript
复制
[DiagnosticAnalyzer(LanguageNames.CSharp)]
public class Analyzer1Analyzer : DiagnosticAnalyzer
{
    public const string DiagnosticId = "TestCompilationAnalyzer";

    private static readonly LocalizableString Title = "TestAnalyzer";
    private static readonly LocalizableString MessageFormat = "This message should always appear {0}";
    private static readonly DiagnosticDescriptor Rule = new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, "Test", DiagnosticSeverity.Warning, isEnabledByDefault: true);
    public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics { get { return ImmutableArray.Create(Rule); } }

    public override void Initialize(AnalysisContext context)
    {
        context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.Analyze | GeneratedCodeAnalysisFlags.ReportDiagnostics);
        context.EnableConcurrentExecution();
        context.RegisterAdditionalFileAction(AdditionalFileAction);
    }

    private void AdditionalFileAction(AdditionalFileAnalysisContext cxt)
    {
        var text = File.ReadAllText(cxt.AdditionalFile.Path);

        if (text.Contains("help"))
        {
            cxt.ReportDiagnostic(Diagnostic.Create(Rule, Location.None, $"help"));
        }

        if (text.Contains("test"))
        {
            cxt.ReportDiagnostic(Diagnostic.Create(Rule, Location.None, $"test"));
        }
    }
}

如果我将help和test这两个词添加到我的附加文件中,这两个诊断程序都会出现,但是如果我删除了这两个词,最后显示的内容就不会消失。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-07 22:03:24

我找到了一种替代使用代码生成器的解决方法。

代码语言:javascript
复制
    [Generator]
    public class SchemaTestAnalyzer : ISourceGenerator
    {

        public const string DiagnosticId = "TestCompilationAnalyzer";

        private static readonly LocalizableString Title = "TestAnalyzer";
        private static readonly LocalizableString MessageFormat = "This message should always appear {0}";
        private static readonly DiagnosticDescriptor Rule = new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, "Test", DiagnosticSeverity.Warning, isEnabledByDefault: true);

        public void Execute(GeneratorExecutionContext context)
        {
            var additionalFile = context.AdditionalFiles.FirstOrDefault();
            if (additionalFile != null)
            {
                var text = File.ReadAllText(additionalFile.Path);
                if (text.Contains("help"))
                {
                    context.ReportDiagnostic(Diagnostic.Create(Rule, Location.None, "help"));
                }

                if (text.Contains("test"))
                {
                    context.ReportDiagnostic(Diagnostic.Create(Rule, Location.None, "test"));
                }
            }
        }

        public void Initialize(GeneratorInitializationContext context) { }
    }

这些工作符合预期,当解决并重新分析最后一个问题时,最后一个问题就消失了

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67401282

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档