- Replace legacy LSPManagerClient + LSPManagerUI with ClientManager and UIManager - Remove WebsocketClient in favor of unified Websocket implementation - Move LSP initialization config loading into centralized config module - Update LSPClient to support dynamic socket, improved init params, and doc version tracking - Introduce range-based didChange notifications and add implementation + references requests - Expand LSPClientEvents to support implementation/references and structured range edits - Simplify websocket response handling and normalize LSP response parsing flow - Decouple UI from LSP manager core; UI now emits address/port for client creation - Refactor completion provider pipeline: - Split TextChangedEvent into TextInsertedEvent and DeleteRangeEvent - Update ProviderResponseCacheBase and controller dispatch paths accordingly - Improve SourceBuffer and SourceFile event tracking with delete-range support - Update plugin system: - Centralize command/provider registration via helper methods - Add LSP commands: definition, references, implementation, toggle UI - Enhance response handlers to support references and implementation hooks - Improve Python LSP config (jedi completion, signatures, references enabled) - Fix minor GTK lifecycle and buffer signal handling issues - Clean up unused imports, dead code, and outdated JSON server configs
72 lines
2.0 KiB
Python
72 lines
2.0 KiB
Python
# Python imports
|
|
from os import path
|
|
|
|
# Lib imports
|
|
import gi
|
|
gi.require_version('GtkSource', '4')
|
|
|
|
from gi.repository import GLib
|
|
from gi.repository import GtkSource
|
|
|
|
# Application imports
|
|
from libs.event_factory import Code_Event_Types
|
|
|
|
from core.widgets.code.completion_providers.provider_response_cache_base import ProviderResponseCacheBase
|
|
|
|
from . import cson
|
|
|
|
|
|
|
|
class ProviderResponseCache(ProviderResponseCacheBase):
|
|
def __init__(self):
|
|
super(ProviderResponseCache, self).__init__()
|
|
|
|
self.matchers: dict = {}
|
|
|
|
self.load_snippets()
|
|
|
|
|
|
def load_snippets(self):
|
|
fpath = path.join(path.dirname(path.realpath(__file__)), "snippets.cson")
|
|
with open(fpath, 'rb') as f:
|
|
self.snippets = cson.load(f)
|
|
for group in self.snippets:
|
|
self.snippets[group]
|
|
for entry in self.snippets[group]:
|
|
data = self.snippets[group][entry]
|
|
self.matchers[ data["prefix"] ] = {
|
|
"label": entry,
|
|
"text": data["body"],
|
|
"info": GLib.markup_escape_text( data["body"] )
|
|
}
|
|
|
|
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_text_inserted(self, event: Code_Event_Types.TextInsertedEvent):
|
|
...
|
|
|
|
def process_file_delete_range(self, event: Code_Event_Types.DeleteRangeEvent):
|
|
...
|
|
|
|
def filter(self, word: str) -> list[dict]:
|
|
response: list[dict] = []
|
|
|
|
for entry in self.matchers:
|
|
if not word in entry: continue
|
|
data = self.matchers[entry]
|
|
response.append(data)
|
|
|
|
return response
|
|
|
|
def filter_with_context(self, context: GtkSource.CompletionContext) -> list[dict]:
|
|
response: list[dict] = []
|
|
|
|
return response
|