From c06df187a6ab81f3f6331bbb28efc4b89290d5e3 Mon Sep 17 00:00:00 2001 From: itdominator <1itdominator@gmail.com> Date: Fri, 4 Oct 2024 00:08:20 -0500 Subject: [PATCH] removing completion items without text insertions --- .../base/notebook/editor_controller.py | 25 ++++++++++--- src/core/widgets/completion_item.py | 3 ++ src/core/widgets/completion_view.py | 37 ++++++++++++++++++- 3 files changed, 59 insertions(+), 6 deletions(-) diff --git a/src/core/widgets/base/notebook/editor_controller.py b/src/core/widgets/base/notebook/editor_controller.py index d3acba1..1df52ce 100644 --- a/src/core/widgets/base/notebook/editor_controller.py +++ b/src/core/widgets/base/notebook/editor_controller.py @@ -60,18 +60,21 @@ class EditorControllerMixin(KeyInputController, EditorEventsMixin): if source_view.completion_view.get_parent(): source_view.remove(source_view.completion_view) + if len( message.result["items"] ) == 0: + return + source_view.completion_view.clear_items() x, y = self._get_insert_line_xy(source_view) source_view.add_child_in_window(source_view.completion_view, Gtk.TextWindowType.WIDGET, x, y) + completion_list = self.filter_completion_list( message.result["items"] ) - for item in message.result["items"]: + for item in completion_list: ci = CompletionItem() ci.populate_completion_item(item) source_view.completion_view.add_completion_item(ci) - if len( message.result["items"] ) > 0: - source_view.completion_view.show_all() - GLib.idle_add( source_view.completion_view.select_first_row ) + source_view.completion_view.show_all() + GLib.idle_add( source_view.completion_view.select_first_row ) # completion = source_view.get_completion() # providers = completion.get_providers() @@ -137,4 +140,16 @@ class EditorControllerMixin(KeyInputController, EditorEventsMixin): xx = win_loc[0] + view_pos[0] yy = win_loc[1] + view_pos[1] + iter_loc.height - return xx, yy \ No newline at end of file + return xx, yy + + # Note: What I really need to do (long term) is keep all results and then just + # toggle show/hide of the CompletionItems relevent to the request context. + def filter_completion_list(self, completion_list: list) -> list: + filtered_list = [] + + for item in completion_list: + keys = item.keys() + if "insertText" in keys or "textEdit" in keys: + filtered_list.append(item) + + return filtered_list \ No newline at end of file diff --git a/src/core/widgets/completion_item.py b/src/core/widgets/completion_item.py index 0d29cc4..50e00e6 100644 --- a/src/core/widgets/completion_item.py +++ b/src/core/widgets/completion_item.py @@ -13,6 +13,7 @@ class CompletionItem(Gtk.Label): def __init__(self): super(CompletionItem, self).__init__() + self.kind: int = -1 self.newText: str = "" self.insertText: str = "" self.textEdit: [] = [] @@ -36,6 +37,8 @@ class CompletionItem(Gtk.Label): keys = item.keys() self.set_label(item["label"]) + if "kind" in keys: + self.kind = item["kind"] if "insertText" in keys: self.insertText = item["insertText"] diff --git a/src/core/widgets/completion_view.py b/src/core/widgets/completion_view.py index f40b97d..613b1eb 100644 --- a/src/core/widgets/completion_view.py +++ b/src/core/widgets/completion_view.py @@ -190,4 +190,39 @@ class CompletionView(Gtk.ScrolledWindow): pre_char = iter.get_char() iter.forward_char() - return pre_char \ No newline at end of file + return pre_char + + # export const Text = 1; + # export const Method = 2; + # export const Function = 3; + # export const Constructor = 4; + # export const Field = 5; + # export const Variable = 6; + # export const Class = 7; + # export const Interface = 8; + # export const Module = 9; + # export const Property = 10; + # export const Unit = 11; + # export const Value = 12; + # export const Enum = 13; + # export const Keyword = 14; + # export const Snippet = 15; + # export const Color = 16; + # export const File = 17; + # export const Reference = 18; + # export const Folder = 19; + # export const EnumMember = 20; + # export const Constant = 21; + # export const Struct = 22; + # export const Event = 23; + # export const Operator = 24; + # export const TypeParameter = 25; + def sort_completion_list(self, completion_list: list) -> list: + new_completion_list = [] + + for item in filtered_list: + keys = item.keys() + if "insertText" in keys or "textEdit" in keys: + new_completion_list.append(item) + + return new_completion_list