private async Task <ImmutableArray <Diagnostic> > TryPerformCodeFixesAsync( Workspace workspace, ImmutableArray <Diagnostic> diagnostics) { var currentDiagnostics = diagnostics; foreach (var _ in Enumerable.Range(0, diagnostics.Length)) { var diagnostic = currentDiagnostics .Where(d => CodeFixProvider.FixableDiagnosticIds.Contains(d.Id)) .FirstOrDefault(); if (diagnostic is null) { break; } var document = workspace.CurrentSolution.GetDocument(diagnostic.Location.SourceTree); if (document is null) { continue; } var codeActions = new List <CodeAction>(); var context = new CodeFixContext( document, diagnostic, (codeAction, applicableDiagnostics) => codeActions.Add(codeAction), CancellationToken.None); await CodeFixProvider.RegisterCodeFixesAsync(context); if (codeActions.Count == 0) { break; } var operations = await codeActions[0].GetOperationsAsync(CancellationToken.None); foreach (var operation in operations) { operation.Apply(workspace, CancellationToken.None); } currentDiagnostics = await workspace.AnalyzeAsync(Analyzer); } return(currentDiagnostics); }