refactor updating documents

This commit is contained in:
Matt Parker
2025-11-23 00:38:07 +10:00
parent 3af11bd701
commit 502ba20b01

View File

@@ -920,14 +920,21 @@ public class RoslynAnalysis(ILogger<RoslynAnalysis> logger, BuildService buildSe
var newText = oldText.WithChanges(sourceText.GetTextChanges(oldText)); var newText = oldText.WithChanges(sourceText.GetTextChanges(oldText));
var newSolution = fileModel switch // We don't blow up if the document is not in the workspace - this would happen e.g. for files that are excluded.
// Roslyn implementations seem to handle this with a Misc Files workspace. TODO: Investigate
var currentSolution = _workspace!.CurrentSolution;
if (currentSolution.ContainsDocument(document.Id))
{ {
{ IsRazorFile: true } => _workspace.CurrentSolution.WithAdditionalDocumentText(document.Id, newText), _workspace.OnDocumentTextChanged(document.Id, newText, PreservationMode.PreserveIdentity, requireDocumentPresent: false);
{ IsCsharpFile: true } => _workspace.CurrentSolution.WithDocumentText(document.Id, newText), }
_ => throw new ArgumentOutOfRangeException() else if (currentSolution.ContainsAdditionalDocument(document.Id))
}; {
_workspace.OnAdditionalDocumentTextChanged(document.Id, newText, PreservationMode.PreserveIdentity);
_workspace.TryApplyChanges(newSolution); }
else if (currentSolution.ContainsAnalyzerConfigDocument(document.Id))
{
_workspace.OnAnalyzerConfigDocumentTextChanged(document.Id, newText, PreservationMode.PreserveIdentity);
}
} }
public async Task AddDocument(SharpIdeFile fileModel, string content) public async Task AddDocument(SharpIdeFile fileModel, string content)