private async Task <Project> FixProjectAsync(Project project, FixIdContainer enabledFixIds, ProgressTracker progressTracker, bool addProgressItemsForDocuments, CancellationToken cancellationToken) { if (!CanCleanupProject(project)) { return(project); } if (addProgressItemsForDocuments) { progressTracker.AddItems(project.DocumentIds.Count); } foreach (var documentId in project.DocumentIds) { cancellationToken.ThrowIfCancellationRequested(); var document = project.GetDocument(documentId); progressTracker.Description = document.Name; // FixDocumentAsync reports progress within a document, but we limit progress reporting for a project // to the current document. var documentProgressTracker = new ProgressTracker(); var fixedDocument = await FixDocumentAsync(document, enabledFixIds, documentProgressTracker, cancellationToken).ConfigureAwait(false); project = fixedDocument.Project; progressTracker.ItemCompleted(); } return(project); }
private async Task <Document> FixDocumentAsync(Document document, FixIdContainer enabledFixIds, ProgressTracker progressTracker, CancellationToken cancellationToken) { if (document.IsGeneratedCode(cancellationToken)) { return(document); } var codeCleanupService = document.GetLanguageService <ICodeCleanupService>(); var allDiagnostics = codeCleanupService.GetAllDiagnostics(); var enabedDiagnosticSets = ArrayBuilder <DiagnosticSet> .GetInstance(); foreach (var diagnostic in allDiagnostics.Diagnostics) { foreach (var diagnosticId in diagnostic.DiagnosticIds) { if (enabledFixIds.IsFixIdEnabled(diagnosticId)) { enabedDiagnosticSets.Add(diagnostic); break; } } } var isRemoveUnusedUsingsEnabled = enabledFixIds.IsFixIdEnabled(RemoveUnusedImportsFixId); var isSortUsingsEnabled = enabledFixIds.IsFixIdEnabled(SortImportsFixId); var enabledDiagnostics = new EnabledDiagnosticOptions(enabedDiagnosticSets.ToImmutableArray(), new OrganizeUsingsSet(isRemoveUnusedUsingsEnabled, isSortUsingsEnabled)); return(await codeCleanupService.CleanupAsync( document, enabledDiagnostics, progressTracker, cancellationToken).ConfigureAwait(false)); }
private async Task <Solution> FixSolutionAsync(Solution solution, FixIdContainer enabledFixIds, ProgressTracker progressTracker, CancellationToken cancellationToken) { // Prepopulate the solution progress tracker with the total number of documents to process foreach (var projectId in solution.ProjectIds) { var project = solution.GetProject(projectId); if (!CanCleanupProject(project)) { continue; } progressTracker.AddItems(project.DocumentIds.Count); } foreach (var projectId in solution.ProjectIds) { cancellationToken.ThrowIfCancellationRequested(); var project = solution.GetProject(projectId); var newProject = await FixProjectAsync(project, enabledFixIds, progressTracker, addProgressItemsForDocuments : false, cancellationToken).ConfigureAwait(false); solution = newProject.Solution; } return(solution); }