Files
Newton-Editor/plugins/completers/python_completer/provider_response_cache.py

107 lines
2.8 KiB
Python
Raw Normal View History

# Python imports
# Lib imports
import gi
gi.require_version('GtkSource', '4')
from gi.repository import GObject
from gi.repository import GtkSource
import jedi
from jedi.api import Script
# Application imports
from libs.event_factory import Code_Event_Types
from core.widgets.code.completion_providers.provider_response_cache_base import ProviderResponseCacheBase
# FIXME: Find real icon names...
icon_names = {
'import': '',
'module': '',
'class': '',
'function': '',
'statement': '',
'param': ''
}
class Jedi:
def get_script(file, doc_text):
return Script(code = doc_text, path = file)
class ProviderResponseCache(ProviderResponseCacheBase):
def __init__(self):
super(ProviderResponseCache, self).__init__()
self._file = None
def process_file_load(self, event: Code_Event_Types.AddedNewFileEvent):
...
def process_file_close(self, event: Code_Event_Types.RemovedFileEvent):
...
def process_file_save(self, event: Code_Event_Types.SavedFileEvent):
...
def process_file_change(self, event: Code_Event_Types.TextChangedEvent):
...
def filter(self, word: str) -> list[dict]:
response: list[dict] = []
return response
def filter_with_context(self, context: GtkSource.CompletionContext) -> list[dict]:
response: list[dict] = []
if not self._file: return response
itr = self.get_iter_correctly(context)
buffer = itr.get_buffer()
doc_text = buffer.get_text(
buffer.get_start_iter(),
buffer.get_end_iter(),
False
)
iter_cursor = buffer.get_iter_at_mark( buffer.get_insert() )
linenum = iter_cursor.get_line() + 1
charnum = iter_cursor.get_line_index()
def create_generator():
if not self._file: return []
for completion in Jedi.get_script(self._file, doc_text).complete(
line = linenum,
column = None,
fuzzy = False
):
{
"label": completion.name,
"text": completion.name,
"info": completion.docstring()
"icon" self.get_icon_for_type(completion.type)
}
yield comp_item
for item in create_generator():
response.append(item)
return response
def get_icon_for_type(self, _type):
try:
return self._theme.load_icon(icon_names[_type.lower()], 16, 0)
except (KeyError, AttributeError, GObject.GError) as e:
return self._theme.load_icon(Gtk.STOCK_ADD, 16, 0)
except (GObject.GError, AttributeError) as e:
return None