public async Task <Document> CleanupAsync( Document document, EnabledDiagnosticOptions enabledDiagnostics, IProgressTracker progressTracker, CancellationToken cancellationToken ) { // add one item for the 'format' action we'll do last if (enabledDiagnostics.FormatDocument) { progressTracker.AddItems(1); } // and one for 'remove/sort usings' if we're going to run that. var organizeUsings = enabledDiagnostics.OrganizeUsings.IsRemoveUnusedImportEnabled || enabledDiagnostics.OrganizeUsings.IsSortImportsEnabled; if (organizeUsings) { progressTracker.AddItems(1); } document = await ApplyCodeFixesAsync( document, enabledDiagnostics.Diagnostics, progressTracker, cancellationToken ) .ConfigureAwait(false); // do the remove usings after code fix, as code fix might remove some code which can results in unused usings. if (organizeUsings) { progressTracker.Description = this.OrganizeImportsDescription; document = await RemoveSortUsingsAsync( document, enabledDiagnostics.OrganizeUsings, cancellationToken ) .ConfigureAwait(false); progressTracker.ItemCompleted(); } if (enabledDiagnostics.FormatDocument) { progressTracker.Description = FeaturesResources.Formatting_document; using (Logger.LogBlock(FunctionId.CodeCleanup_Format, cancellationToken)) { document = await Formatter .FormatAsync(document, cancellationToken : cancellationToken) .ConfigureAwait(false); progressTracker.ItemCompleted(); } } return(document); }
public async Task <Document> CleanupAsync( Document document, EnabledDiagnosticOptions enabledDiagnostics, IProgressTracker progressTracker, CodeActionOptionsProvider fallbackOptions, CancellationToken cancellationToken) { // add one item for the code fixers we get from nuget, we'll do last var thirdPartyDiagnosticIdsAndTitles = ImmutableArray <(string diagnosticId, string?title)> .Empty; if (enabledDiagnostics.RunThirdPartyFixers) { thirdPartyDiagnosticIdsAndTitles = await GetThirdPartyDiagnosticIdsAndTitlesAsync(document, cancellationToken).ConfigureAwait(false); progressTracker.AddItems(thirdPartyDiagnosticIdsAndTitles.Length); } // add one item for the 'format' action if (enabledDiagnostics.FormatDocument) { progressTracker.AddItems(1); } // and one for 'remove/sort usings' if we're going to run that. var organizeUsings = enabledDiagnostics.OrganizeUsings.IsRemoveUnusedImportEnabled || enabledDiagnostics.OrganizeUsings.IsSortImportsEnabled; if (organizeUsings) { progressTracker.AddItems(1); } if (enabledDiagnostics.Diagnostics.Any()) { progressTracker.AddItems(enabledDiagnostics.Diagnostics.Length); } document = await ApplyCodeFixesAsync( document, enabledDiagnostics.Diagnostics, progressTracker, fallbackOptions, cancellationToken).ConfigureAwait(false); if (enabledDiagnostics.RunThirdPartyFixers) { document = await ApplyThirdPartyCodeFixesAsync( document, thirdPartyDiagnosticIdsAndTitles, progressTracker, fallbackOptions, cancellationToken).ConfigureAwait(false); } // do the remove usings after code fix, as code fix might remove some code which can results in unused usings. if (organizeUsings) { progressTracker.Description = this.OrganizeImportsDescription; document = await RemoveSortUsingsAsync( document, enabledDiagnostics.OrganizeUsings, fallbackOptions, cancellationToken).ConfigureAwait(false); progressTracker.ItemCompleted(); } if (enabledDiagnostics.FormatDocument) { var formattingOptions = await document.GetSyntaxFormattingOptionsAsync(fallbackOptions, cancellationToken).ConfigureAwait(false); progressTracker.Description = FeaturesResources.Formatting_document; using (Logger.LogBlock(FunctionId.CodeCleanup_Format, cancellationToken)) { document = await Formatter.FormatAsync(document, formattingOptions, cancellationToken).ConfigureAwait(false); progressTracker.ItemCompleted(); } } if (enabledDiagnostics.RunThirdPartyFixers) { document = await ApplyThirdPartyCodeFixesAsync( document, thirdPartyDiagnosticIdsAndTitles, progressTracker, fallbackOptions, cancellationToken).ConfigureAwait(false); } return(document); }