From fa1a6413eee50045f0241fd1bf0d98b55c9c08c9 Mon Sep 17 00:00:00 2001 From: Matt Parker <61717342+MattParkerDev@users.noreply.github.com> Date: Sun, 23 Nov 2025 01:21:55 +1000 Subject: [PATCH] Refactor remove document --- .../Features/Analysis/RoslynAnalysis.cs | 26 +++++++++---------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/src/SharpIDE.Application/Features/Analysis/RoslynAnalysis.cs b/src/SharpIDE.Application/Features/Analysis/RoslynAnalysis.cs index 9f075e1..0c4f229 100644 --- a/src/SharpIDE.Application/Features/Analysis/RoslynAnalysis.cs +++ b/src/SharpIDE.Application/Features/Analysis/RoslynAnalysis.cs @@ -975,23 +975,21 @@ public class RoslynAnalysis(ILogger logger, BuildService buildSe await _solutionLoadedTcs.Task; Guard.Against.Null(fileModel, nameof(fileModel)); - var project = GetProjectForSharpIdeFile(fileModel); - - var document = fileModel switch + var documentId = _workspace!.CurrentSolution.GetDocumentIdsWithFilePath(fileModel.Path).Single(); + var documentKind = _workspace.CurrentSolution.GetDocumentKind(documentId); + if (documentKind is null) { - { IsRazorFile: true } => project.AdditionalDocuments.Single(s => s.FilePath == fileModel.Path), - { IsCsharpFile: true } => project.Documents.Single(s => s.FilePath == fileModel.Path), - _ => throw new InvalidOperationException("UpdateDocument failed: File is not in workspace") - }; + _logger.LogError("Attempted to remove document not in workspace: '{DocumentPath}'", fileModel.Path); + return; + } - var newSolution = fileModel switch + switch (documentKind) { - { IsRazorFile: true } => _workspace.CurrentSolution.RemoveAdditionalDocument(document.Id), - { IsCsharpFile: true } => _workspace.CurrentSolution.RemoveDocument(document.Id), - _ => throw new InvalidOperationException("AddDocument failed: File is not in workspace") - }; - - _workspace.TryApplyChanges(newSolution); + case TextDocumentKind.Document: _workspace.OnDocumentRemoved(documentId); break; + case TextDocumentKind.AdditionalDocument: _workspace.OnAdditionalDocumentRemoved(documentId); break; + case TextDocumentKind.AnalyzerConfigDocument: _workspace.OnAnalyzerConfigDocumentRemoved(documentId); break; + default: throw new ArgumentOutOfRangeException(nameof(documentKind)); + } } public async Task MoveDocument(SharpIdeFile sharpIdeFile, string oldFilePath)