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)}");