From 4fe5db0172ba7df1b36954143cb77083e344f842 Mon Sep 17 00:00:00 2001 From: Andy Stewart Date: Fri, 13 May 2022 21:41:17 +0800 Subject: [PATCH] Support hover protocol now. --- core/fileaction.py | 11 +++++------ core/lspserver.py | 12 ++++++++++++ lsp-bridge.el | 4 ++++ lsp-bridge.py | 2 +- 4 files changed, 22 insertions(+), 7 deletions(-) diff --git a/core/fileaction.py b/core/fileaction.py index 55d6bf1953..612a4991cd 100755 --- a/core/fileaction.py +++ b/core/fileaction.py @@ -43,18 +43,13 @@ def __init__(self, filepath, project_path, lang_server): object.__init__(self) # Build request functions. - for name in ["find_define", "find_references", "prepare_rename", "rename", "completion"]: + for name in ["find_define", "find_references", "prepare_rename", "rename", "completion", "hover"]: self.build_request_function(name) # Init. self.filepath = filepath self.project_path = project_path self.request_dict = {} - self.completion_request_list = [] - self.find_define_request_list = [] - self.find_references_request_list = [] - self.prepare_rename_request_list = [] - self.rename_request_list = [] self.last_change_file_time = -1 self.last_change_file_before_cursor_text = "" self.last_change_cursor_time = -1 @@ -137,6 +132,10 @@ def _do(*args): args = (request_id, self.filepath, name) + args getattr(self.lsp_server, "send_{}_request".format(name))(*args) + # Init request list variable. + setattr(self, "{}_request_list".format(name), []) + + # Init request method. setattr(self, name, _do) def handle_server_response_message(self, request_id, request_type, response_result): diff --git a/core/lspserver.py b/core/lspserver.py index afc07556ee..9b76a7a1e6 100644 --- a/core/lspserver.py +++ b/core/lspserver.py @@ -417,6 +417,18 @@ def send_rename_request(self, request_id, filepath, type, position, new_name): "newName": new_name }, request_id) + + def send_hover_request(self, request_id, filepath, type, position): + self.record_request_id(request_id, filepath, type) + + self.send_to_request("textDocument/hover", + { + "textDocument": { + "uri": path_to_uri(filepath) + }, + "position": position + }, + request_id) def send_shutdown_request(self): self.shutdown_id = generate_request_id() diff --git a/lsp-bridge.el b/lsp-bridge.el index e040ccd90c..6fc3b501c4 100644 --- a/lsp-bridge.el +++ b/lsp-bridge.el @@ -538,6 +538,10 @@ Then LSP-Bridge will start by gdb, please send new issue with `*lsp-bridge*' buf (pulse-delay lsp-bridge-flash-line-delay)) (pulse-momentary-highlight-region start-pos end-pos 'lsp-bridge-font-lock-flash))))) +(defun lsp-bridge-hover () + (interactive) + (lsp-bridge-call-async "hover" lsp-bridge-filepath (lsp-bridge--position))) + (defun lsp-bridge-get-pos (buf line column) (with-current-buffer buf (save-excursion diff --git a/lsp-bridge.py b/lsp-bridge.py index 4252d38420..f37358f1f1 100755 --- a/lsp-bridge.py +++ b/lsp-bridge.py @@ -41,7 +41,7 @@ def __init__(self, args): self.action_cache_dict = {} # use for contain file action cache # Build EPC interfaces. - for name in ["change_file", "find_define", "find_references", "prepare_rename", "rename", "change_cursor", "save_file"]: + for name in ["change_file", "find_define", "find_references", "prepare_rename", "rename", "change_cursor", "save_file", "hover"]: self.build_file_action_function(name) # Init EPC client port.