# Python imports # Lib imports import gi from gi.repository import GLib # Application imports from libs.event_factory import Event_Factory, Code_Event_Types from libs.dto.states import SourceViewStates from plugins.plugin_types import PluginCode from .lsp_manager import LSPManager lsp_manager = LSPManager() class Plugin(PluginCode): def __init__(self): super(Plugin, self).__init__() def _controller_message(self, event: Code_Event_Types.CodeEvent): ... def load(self): window = self.request_ui_element("main-window") lsp_manager.lsp_manager_ui.map_parent_resize_event(window) event = Event_Factory.create_event("register_command", command_name = "LSP Manager", command = Handler, binding_mode = "released", binding = ["l", "g", "i"] ) self.emit_to("source_views", event) event = Event_Factory.create_event( "register_provider", provider_name = "LSP Completer", provider = lsp_manager.provider, language_ids = [] ) self.emit_to("completion", event) event = Event_Factory.create_event( "create_source_view", state = SourceViewStates.INDEPENDENT ) self.emit_to("source_views", event) source_view = event.response lsp_manager.lsp_manager_ui.load_lsp_servers_config() lsp_manager.lsp_manager_ui.set_source_view(source_view) lsp_manager.lsp_manager_ui.load_lsp_servers_config_placeholders() lsp_manager.handler_registry.emit = self.emit lsp_manager.handler_registry.emit_to = self.emit_to lsp_manager.handler_registry._prompt_goto_request = self._prompt_goto_request lsp_manager.handler_registry._prompt_completion_request = self._prompt_completion_request def run(self): ... def generate_plugin_element(self): ... def _prompt_goto_request(self, uri: str, pointer_pos: dict): event = Event_Factory.create_event( "get_active_view", ) self.emit_to("source_views", event) view = event.response view._on_uri_data_received( [uri] ) buffer = view.get_buffer() def move_cursor(buffer, pointer_pos): itr = buffer.get_iter_at_line( pointer_pos["end"]["line"] ) itr.forward_chars( pointer_pos["end"]["character"] ) buffer.place_cursor(itr) view.scroll_to_iter(itr, 0.2, False, 0, 0) GLib.idle_add( move_cursor, buffer, pointer_pos ) def _prompt_completion_request(self): event = Event_Factory.create_event( "get_active_view", ) self.emit_to("source_views", event) view = event.response event = Event_Factory.create_event( "request_completion", view = view, provider = lsp_manager.provider ) self.emit_to("completion", event) class Handler: @staticmethod def execute( view: any, *args, **kwargs ): logger.debug("Command: LSP Manager") char_str = args[0] if char_str in ["g", "i"]: file = view.command.exec("get_current_file") buffer = view.get_buffer() iter = buffer.get_iter_at_mark( buffer.get_insert() ) line = iter.get_line() column = iter.get_line_offset() if char_str == "g": lsp_manager.lsp_manager_client.process_goto_definition( file.ftype, file.fpath, line, column ) return if char_str == "i": return lsp_manager.lsp_manager_ui.hide() if lsp_manager.lsp_manager_ui.is_visible() else lsp_manager.lsp_manager_ui.show()