public override async Task AddDocumentFixesAsync(Document document, ImmutableArray <Diagnostic> diagnostics, Action <CodeAction> addFix, FixAllContext fixAllContext) { var pragmaActionsBuilder = ImmutableArray.CreateBuilder <IPragmaBasedCodeAction>(); var pragmaDiagnosticsBuilder = ImmutableArray.CreateBuilder <Diagnostic>(); foreach (var diagnostic in diagnostics.Where(d => d.Location.IsInSource && !d.IsSuppressed)) { var span = diagnostic.Location.SourceSpan; var pragmaSuppressions = await _suppressionFixProvider.GetPragmaSuppressionsAsync(document, span, SpecializedCollections.SingletonEnumerable(diagnostic), fixAllContext.CancellationToken).ConfigureAwait(false); var pragmaSuppression = pragmaSuppressions.SingleOrDefault(); if (pragmaSuppression != null) { if (fixAllContext.IsFixMultiple) { pragmaSuppression = pragmaSuppression.CloneForFixMultipleContext(); } pragmaActionsBuilder.Add(pragmaSuppression); pragmaDiagnosticsBuilder.Add(diagnostic); } } // Get the pragma batch fix. if (pragmaActionsBuilder.Count > 0) { var pragmaBatchFix = PragmaBatchFixHelpers.CreateBatchPragmaFix(_suppressionFixProvider, document, pragmaActionsBuilder.ToImmutable(), pragmaDiagnosticsBuilder.ToImmutable(), fixAllContext); addFix(pragmaBatchFix); } }
public override async Task AddDocumentFixesAsync( Document document, ImmutableArray <Diagnostic> diagnostics, Action <CodeAction> addFix, FixAllState fixAllState, CancellationToken cancellationToken) { // Batch all the pragma remove suppression fixes by executing them sequentially for the document. var pragmaActionsBuilder = ArrayBuilder <IPragmaBasedCodeAction> .GetInstance(); var pragmaDiagnosticsBuilder = ArrayBuilder <Diagnostic> .GetInstance(); foreach (var diagnostic in diagnostics.Where(d => d.Location.IsInSource && d.IsSuppressed)) { var span = diagnostic.Location.SourceSpan; var removeSuppressionFixes = await _suppressionFixProvider.GetSuppressionsAsync( document, span, SpecializedCollections.SingletonEnumerable(diagnostic), cancellationToken).ConfigureAwait(false); var removeSuppressionFix = removeSuppressionFixes.SingleOrDefault(); if (removeSuppressionFix != null) { var codeAction = removeSuppressionFix.Action as RemoveSuppressionCodeAction; if (codeAction != null) { if (fixAllState.IsFixMultiple) { codeAction = codeAction.CloneForFixMultipleContext(); } var pragmaRemoveAction = codeAction as PragmaRemoveAction; if (pragmaRemoveAction != null) { pragmaActionsBuilder.Add(pragmaRemoveAction); pragmaDiagnosticsBuilder.Add(diagnostic); } else { addFix(codeAction); } } } } // Get the pragma batch fix. if (pragmaActionsBuilder.Count > 0) { var pragmaBatchFix = PragmaBatchFixHelpers.CreateBatchPragmaFix( _suppressionFixProvider, document, pragmaActionsBuilder.ToImmutableAndFree(), pragmaDiagnosticsBuilder.ToImmutableAndFree(), fixAllState, cancellationToken); addFix(pragmaBatchFix); } }