fix file updates

This commit is contained in:
Matt Parker
2025-10-19 13:41:21 +10:00
parent 302ee8edd2
commit 13e0db3dbc
2 changed files with 9 additions and 11 deletions

View File

@@ -33,12 +33,6 @@ public class IdeOpenTabsFileManager(RoslynAnalysis roslynAnalysis)
var newLazyTask = new Lazy<Task<string>>(() => Task.FromResult(newText)); var newLazyTask = new Lazy<Task<string>>(() => Task.FromResult(newText));
_openFiles[file] = newLazyTask; _openFiles[file] = newLazyTask;
// Potentially should be event based?
if (file.IsRoslynWorkspaceFile)
{
await _roslynAnalysis.UpdateDocument(file, newText);
GlobalEvents.Instance.SolutionAltered.InvokeParallelFireAndForget();
}
} }
public async Task ReloadFileFromDisk(SharpIdeFile file) public async Task ReloadFileFromDisk(SharpIdeFile file)

View File

@@ -65,17 +65,21 @@ public partial class SharpIdeCodeEdit : CodeEdit
GlobalEvents.Instance.SolutionAltered.Subscribe(OnSolutionAltered); GlobalEvents.Instance.SolutionAltered.Subscribe(OnSolutionAltered);
} }
private CancellationTokenSource _solutionAlteredCts = new();
private async Task OnSolutionAltered() private async Task OnSolutionAltered()
{ {
if (_currentFile is null) return; if (_currentFile is null) return;
GD.Print("Solution altered, updating project diagnostics for current file"); GD.Print($"[{_currentFile.Name}] Solution altered, updating project diagnostics for file");
var documentSyntaxHighlighting = _roslynAnalysis.GetDocumentSyntaxHighlighting(_currentFile); await _solutionAlteredCts.CancelAsync();
var razorSyntaxHighlighting = _roslynAnalysis.GetRazorDocumentSyntaxHighlighting(_currentFile); _solutionAlteredCts = new CancellationTokenSource();
var ct = _solutionAlteredCts.Token;
var documentSyntaxHighlighting = _roslynAnalysis.GetDocumentSyntaxHighlighting(_currentFile, ct);
var razorSyntaxHighlighting = _roslynAnalysis.GetRazorDocumentSyntaxHighlighting(_currentFile, ct);
await Task.WhenAll(documentSyntaxHighlighting, razorSyntaxHighlighting); await Task.WhenAll(documentSyntaxHighlighting, razorSyntaxHighlighting);
await this.InvokeAsync(async () => SetSyntaxHighlightingModel(await documentSyntaxHighlighting, await razorSyntaxHighlighting)); await this.InvokeAsync(async () => SetSyntaxHighlightingModel(await documentSyntaxHighlighting, await razorSyntaxHighlighting));
var documentDiagnostics = await _roslynAnalysis.GetDocumentDiagnostics(_currentFile); var documentDiagnostics = await _roslynAnalysis.GetDocumentDiagnostics(_currentFile, ct);
await this.InvokeAsync(() => SetDiagnostics(documentDiagnostics)); await this.InvokeAsync(() => SetDiagnostics(documentDiagnostics));
var projectDiagnostics = await _roslynAnalysis.GetProjectDiagnosticsForFile(_currentFile); var projectDiagnostics = await _roslynAnalysis.GetProjectDiagnosticsForFile(_currentFile, ct);
await this.InvokeAsync(() => SetProjectDiagnostics(projectDiagnostics)); await this.InvokeAsync(() => SetProjectDiagnostics(projectDiagnostics));
} }