improve completion auto triggering

This commit is contained in:
Matt Parker
2025-10-28 18:52:31 +10:00
parent d55ad72b08
commit bab31a8227
3 changed files with 63 additions and 2 deletions

View File

@@ -54,10 +54,19 @@ public partial class SharpIdeCodeEdit : CodeEdit
[Inject] private readonly IdeCodeActionService _ideCodeActionService = null!;
[Inject] private readonly FileChangedService _fileChangedService = null!;
[Inject] private readonly IdeApplyCompletionService _ideApplyCompletionService = null!;
private readonly List<string> _codeCompletionTriggers =
[
"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z",
"_", "<", ".", "#"
];
public override void _Ready()
{
CodeCompletionPrefixes = ["."];
// _filter_code_completion_candidates_impl uses these prefixes to determine where the completions menu is allowed to show.
// It is quite annoying as we cannot override it via _FilterCodeCompletionCandidates, as we would lose the filtering as well.
// Currently, it is not possible to show completions on a new line at col 0
CodeCompletionPrefixes = [.._codeCompletionTriggers, "(", ",", "=", "\t"];
SyntaxHighlighter = _syntaxHighlighter;
_popupMenu = GetNode<PopupMenu>("CodeFixesMenu");
_popupMenu.IdPressed += OnCodeFixSelected;
@@ -319,6 +328,22 @@ public partial class SharpIdeCodeEdit : CodeEdit
}
}
// public override Array<Dictionary> _FilterCodeCompletionCandidates(Array<Dictionary> candidates)
// {
// return base._FilterCodeCompletionCandidates(candidates);
// }
// public override void _GuiInput(InputEvent @event)
// {
// if (@event.IsActionPressed("ui_text_completion_query"))
// {
// GD.Print("Entering CompletionQueryBuiltin _GuiInput");
// AcceptEvent();
// //GetViewport().SetInputAsHandled();
// Callable.From(() => RequestCodeCompletion(true)).CallDeferred();
// }
// }
public override void _UnhandledKeyInput(InputEvent @event)
{
CloseSymbolHoverWindow();

View File

@@ -0,0 +1,35 @@
using Godot;
namespace SharpIDE.Godot.Features.CodeEditor;
public partial class SharpIdeCodeEdit
{
// public override void _Backspace(int caretIndex)
// {
// //base._Backspace(caretIndex);
// var caretLine = GetCaretLine(caretIndex);
// var caretCol = GetCaretColumn(caretIndex);
// RemoveText(caretLine, caretCol - 1, caretLine, caretCol);
// }
public override void _HandleUnicodeInput(int unicodeChar, int caretIndex)
{
StartAction(EditAction.Typing);
string charStr = char.ConvertFromUtf32(unicodeChar);
InsertTextAtCaret(charStr, caretIndex);
var codeCompletionSelectedIndex = GetCodeCompletionSelectedIndex();
var isCodeCompletionPopupOpen = codeCompletionSelectedIndex is not -1;
if (isCodeCompletionPopupOpen && charStr == " ")
{
//CancelCodeCompletion();
Callable.From(() => CancelCodeCompletion()).CallDeferred();
}
else if (isCodeCompletionPopupOpen is false && _codeCompletionTriggers.Contains(charStr, StringComparer.OrdinalIgnoreCase))
{
// This is hopes and prayers that OnTextChanged has finished updating the document in the workspace...
//Callable.From(() => EmitSignalCodeCompletionRequested()).CallDeferred();
Callable.From(() => RequestCodeCompletion(true)).CallDeferred();
}
EndAction();
}

View File

@@ -0,0 +1 @@
uid://b4g2e2ug7fr7g