[英]Dealing with Error in Analyized code during CodeFix using Roslyn
我發現似乎需要在FixProvider中進行處理。 我已經開始了所需的通用代碼。 似乎您需要查看整個表達式中的錯誤,而不僅僅是問題的上下文。 使用上下文可以找到要在其中查找錯誤的整個表達式,行或塊。將塊中的每個錯誤與要處理的錯誤進行比較。 如果找到會影響您的修補程序的產品,則可以在注冊修補程序提供者之前退出。 我願意學習一種更簡單的方法,但是下面的代碼可以工作。 可以將其縮短,但為清楚起見,當我保持簡潔時,調試起來會更容易。
Public NotOverridable Overrides ReadOnly Property FixableDiagnosticIds As ImmutableArray(Of String) = ImmutableArray.Create(DiagnosticId.ERR_StrictDisallowsImplicitProc.ToDiagnosticId, DiagnosticId.ERR_StrictDisallowImplicitObject.ToDiagnosticId, DiagnosticId.ERR_NameNotDeclared1.ToDiagnosticId)
Public NotOverridable Overrides Async Function RegisterCodeFixesAsync(context As CodeFixContext) As Task
Dim root As SyntaxNode = Await context.Document.GetSyntaxRootAsync(context.CancellationToken).ConfigureAwait(False)
Dim Model As SemanticModel = Await context.Document.GetSemanticModelAsync(context.CancellationToken)
Dim firstDiagnostic As Diagnostic = context.Diagnostics.First()
Dim diagnosticSpanStart As Integer = firstDiagnostic.Location.SourceSpan.Start
Dim declarationSyntax As SyntaxNode = root.FindToken(diagnosticSpanStart).Parent.FirstAncestorOrSelfOfType(GetType(VariableDeclaratorSyntax))
If declarationSyntax IsNot Nothing Then
For Each DiagnosticEntry As Diagnostic In Model.GetDiagnostics(declarationSyntax.Span)
' Does Diagnostic contain any of the errors I care about?
If FixableDiagnosticIds.Any(Function(m) m.ToString = DiagnosticEntry.Id.ToString) Then
Continue For
End If
Exit Function
Next
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.