我正在尝试创建一个分析器/代码修复程序,以根据需要打开或关闭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。