在两个相同的CompilationUnit上的GetDiagnostics具有不同的结果

时间:2019-06-06 16:51:31

标签: roslyn-code-analysis

我正在尝试创建一个分析器/代码修复程序,以根据需要打开或关闭Option Strict。为此,我计划使用GetDiagnostics,以查看原始版本和修改版本之间的计数是否不同。但是我遇到了一个问题-当我添加该选项时,它总是表示存在另一个错误(BC30024)。

var singleNewLineTrivia = SyntaxFactory.ParseTrailingTrivia(Environment.NewLine);
var orgRoot = (CompilationUnitSyntax) context.Node.SyntaxTree.GetRoot();
var option = SyntaxFactory.ParseExecutableStatement("Option Strict On") as OptionStatementSyntax;
option = option.WithTrailingTrivia(singleNewLineTrivia);

var strictOptions = (new[] { option }).ToList();
var identicalRoot = orgRoot.WithOptions(new SyntaxList<OptionStatementSyntax>(strictOptions));

我正在测试的代码是:

Option Strict On
Imports System

Public class BeforeTestOptionStrict

    Private Sub TestTestOptionStrict()
    '==========================================
        Dim s as String = string.empty

    End Sub
End Class

orgRoot.ToString == identicalRoot.ToString()identicalRoot.IsEquivalentTo(orgRoot)都是正确的。但是identicalRoot.GetDiagnostics().Count()是1,而orgRoot.GetDiagnostics().Count()是0。

一个可能的提示是,由于此特定示例不需要严格的选项,因此如果我为WithOptions使用空列表,则计数为0。

0 个答案:

没有答案