From bf053ed5801df75870349bd9d152787c39c67220 Mon Sep 17 00:00:00 2001 From: Matt Parker <61717342+MattParkerDev@users.noreply.github.com> Date: Mon, 27 Oct 2025 23:41:48 +1000 Subject: [PATCH] display completions more frequently --- .../Features/Analysis/RoslynAnalysis.cs | 13 +++++++++++++ .../Features/CodeEditor/SharpIdeCodeEdit.cs | 6 ++++++ 2 files changed, 19 insertions(+) diff --git a/src/SharpIDE.Application/Features/Analysis/RoslynAnalysis.cs b/src/SharpIDE.Application/Features/Analysis/RoslynAnalysis.cs index 779f806..49702e5 100644 --- a/src/SharpIDE.Application/Features/Analysis/RoslynAnalysis.cs +++ b/src/SharpIDE.Application/Features/Analysis/RoslynAnalysis.cs @@ -589,6 +589,19 @@ public class RoslynAnalysis(ILogger logger, BuildService buildSe return completions; } + // Currently unused + private async Task ShouldTriggerCompletionAsync(SharpIdeFile file, LinePosition linePosition, CompletionTrigger completionTrigger, CancellationToken cancellationToken = default) + { + var document = await GetDocumentForSharpIdeFile(file, cancellationToken); + var completionService = CompletionService.GetService(document); + if (completionService is null) throw new InvalidOperationException("Completion service is not available for the document."); + + var sourceText = await document.GetTextAsync(cancellationToken); + var position = sourceText.Lines.GetPosition(linePosition); + var shouldTrigger = completionService.ShouldTriggerCompletion(sourceText, position, completionTrigger); + return shouldTrigger; + } + public async Task<(string updatedText, SharpIdeFileLinePosition sharpIdeFileLinePosition)> GetCompletionApplyChanges(SharpIdeFile file, CompletionItem completionItem, CancellationToken cancellationToken = default) { var documentId = _workspace!.CurrentSolution.GetDocumentIdsWithFilePath(file.Path).Single(); diff --git a/src/SharpIDE.Godot/Features/CodeEditor/SharpIdeCodeEdit.cs b/src/SharpIDE.Godot/Features/CodeEditor/SharpIdeCodeEdit.cs index 9229334..b2a0d07 100644 --- a/src/SharpIDE.Godot/Features/CodeEditor/SharpIdeCodeEdit.cs +++ b/src/SharpIDE.Godot/Features/CodeEditor/SharpIdeCodeEdit.cs @@ -174,6 +174,12 @@ public partial class SharpIdeCodeEdit : CodeEdit private void OnTextChanged() { + var codeCompletionPopupClosed = GetCodeCompletionSelectedIndex() is -1; + var shouldShowCodeCompletion = codeCompletionPopupClosed && HasFocus(); // This is a bad solution - it will be triggered on copy paste, undo redo, applying code fixes etc + if (codeCompletionPopupClosed) + { + EmitSignalCodeCompletionRequested(); + } _ = Task.GodotRun(async () => { var __ = SharpIdeOtel.Source.StartActivity($"{nameof(SharpIdeCodeEdit)}.{nameof(OnTextChanged)}");