display completions more frequently

This commit is contained in:
Matt Parker
2025-10-27 23:41:48 +10:00
parent ee3213b4e4
commit bf053ed580
2 changed files with 19 additions and 0 deletions

View File

@@ -589,6 +589,19 @@ public class RoslynAnalysis(ILogger<RoslynAnalysis> logger, BuildService buildSe
return completions;
}
// Currently unused
private async Task<bool> 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();

View File

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