autoload/handlers.vim | 19 ++++++++++++++----- autoload/lsp.vim | 2 +- diff --git a/autoload/handlers.vim b/autoload/handlers.vim index 8132c88adbbdbbedfc679ed5876f0b55053fa52f..53f265ef21dca1b1107b4f18b71824f3aff88b09 100644 --- a/autoload/handlers.vim +++ b/autoload/handlers.vim @@ -72,6 +72,10 @@ # process the 'textDocument/signatureHelp' reply from the LSP server # Result: SignatureHelp | null def s:processSignaturehelpReply(lspserver: dict, req: dict, reply: dict): void + if reply.result->empty() + return + endif + var result: dict = reply.result if result.signatures->len() <= 0 WarnMsg('No signature help available') @@ -135,6 +139,9 @@ # process the 'textDocument/completion' reply from the LSP server # Result: CompletionItem[] | CompletionList | null def s:processCompletionReply(lspserver: dict, req: dict, reply: dict): void + if reply.result->empty() + return + endif var items: list> if type(reply.result) == v:t_list @@ -178,7 +185,7 @@ # process the 'textDocument/hover' reply from the LSP server # Result: Hover | null def s:processHoverReply(lspserver: dict, req: dict, reply: dict): void - if type(reply.result) == v:t_none + if reply.result->empty() return endif @@ -226,7 +233,7 @@ # process the 'textDocument/references' reply from the LSP server # Result: Location[] | null def s:processReferencesReply(lspserver: dict, req: dict, reply: dict): void - if type(reply.result) == v:t_none || reply.result->empty() + if reply.result->empty() WarnMsg('Error: No references found') return endif @@ -749,10 +756,12 @@ var last_lnum: number = line('$') for foldRange in reply.result end_lnum = foldRange.endLine + 1 if end_lnum < foldRange.startLine + 2 - end_lnum = foldRange.startLine + 2 + end_lnum = foldRange.startLine + 2 endif exe ':' .. (foldRange.startLine + 2) .. ',' .. end_lnum .. 'fold' - :foldopen! + # Open all the folds, otherwise the subsequently created folds are not + # correct. + :silent! foldopen! endfor if &foldcolumn == 0 @@ -830,7 +839,7 @@ col: r.start.character + 1}) endfor symbols->setwinvar(lspserver.workspaceSymbolPopup, 'LspSymbolTable') lspserver.workspaceSymbolPopup->popup_settext( - symbols->copy()->map('v:val.name')) + symbols->copy()->mapnew('v:val.name')) enddef # Process various reply messages from the LSP server diff --git a/autoload/lsp.vim b/autoload/lsp.vim index d7652047e3df013dedd15a544ed8b715d69e52d2..8408ed506cc6c382e5d2115af3a1b07cd837fb9c 100644 --- a/autoload/lsp.vim +++ b/autoload/lsp.vim @@ -450,7 +450,7 @@ # sort the diaganostics messages for a buffer by line number def s:getSortedDiagLines(lspserver: dict, bnr: number): list var lnums: list = - lspserver.diagsMap[bnr]->keys()->map((_, v) => str2nr(v)) + lspserver.diagsMap[bnr]->keys()->mapnew((_, v) => str2nr(v)) return lnums->sort((a, b) => a - b) enddef