From db045fd2569213c947ccee9c3c52dce2c881e7e9 Mon Sep 17 00:00:00 2001 From: Yegappan Lakshmanan Date: Sun, 20 Dec 2020 12:58:28 -0800 Subject: [PATCH] Handle hover reply from python LSP server properly --- autoload/lsp.vim | 42 +++++++++++++++++++++++++++++++++++++----- 1 file changed, 37 insertions(+), 5 deletions(-) diff --git a/autoload/lsp.vim b/autoload/lsp.vim index 8f0bb14..dca23ab 100644 --- a/autoload/lsp.vim +++ b/autoload/lsp.vim @@ -155,11 +155,41 @@ def LSP_processHoverReply(ftype: string, req: dict, reply: dict): void return endif - if reply.result.contents.kind == 'plaintext' - reply.result.contents.value->split("\n")->popup_atcursor({'moved': 'word'}) + var hoverText: list + + if type(reply.result.contents) == v:t_dict + if reply.result.contents->has_key('kind') + # MarkupContent + if reply.result.contents.kind == 'plaintext' + hoverText = reply.result.contents.value->split("\n") + else + echomsg 'Error: Unsupported hover contents type (' .. reply.result.contents.kind .. ')' + return + endif + elseif reply.result.contents->has_key('value') + hoverText = reply.result.contents.value + else + echomsg 'Error: Unsupported hover contents (' .. reply.result.contents .. ')' + return + endif + elseif type(reply.result.contents) == v:t_list + for e in reply.result.contents + if type(e) == v:t_string + hoverText->extend(e->split("\n")) + else + hoverText->extend(e.value->split("\n")) + endif + endfor + elseif type(reply.result.contents) == v:t_string + if reply.result.contents->empty() + return + endif + hoverText->add(reply.result.contents) else - echomsg 'Error: Unsupported hover contents type (' .. reply.result.contents.kind .. ')' + echomsg 'Error: Unsupported hover contents (' .. reply.result.contents .. ')' + return endif + hoverText->popup_atcursor({'moved': 'word'}) enddef # process the 'textDocument/references' reply from the LSP server @@ -883,6 +913,7 @@ enddef def lsp#addServer(serverList: list>) var sinfo: dict for server in serverList + sinfo = {} if !server->has_key('filetype') || !server->has_key('path') || !server->has_key('args') echomsg 'Error: LSP server information is missing filetype or path or args' continue @@ -906,7 +937,7 @@ def lsp#addServer(serverList: list>) sinfo.requests = {} sinfo.diags = {} sinfo.completePending = v:false - lsp_servers->extend({[sinfo.ftype]: sinfo}) + lsp_servers[sinfo.ftype] = sinfo endfor enddef @@ -1030,10 +1061,11 @@ def lsp#completeFunc(findstart: number, base: string): any else var count: number = 0 while !complete_check() && lsp_servers[ftype].completePending - && count < 15 + && count < 500 sleep 2m count += 1 endwhile + var res: list> = [] for item in lsp_servers[ftype].completeItems res->add(item) -- 2.48.1