From 2b49a1659f5785dd8a1962b5dc600a8515a94f66 Mon Sep 17 00:00:00 2001 From: Yegappan Lakshmanan Date: Fri, 26 Feb 2021 08:52:35 -0800 Subject: [PATCH] Fix a problem with extending a dict with different types --- autoload/handlers.vim | 29 ++++++++++++++++------------- autoload/lspserver.vim | 20 ++++++++++---------- 2 files changed, 26 insertions(+), 23 deletions(-) diff --git a/autoload/handlers.vim b/autoload/handlers.vim index ae7fef0..a81ed71 100644 --- a/autoload/handlers.vim +++ b/autoload/handlers.vim @@ -1119,20 +1119,23 @@ export def ProcessMessages(lspserver: dict): void if msg->has_key('result') || msg->has_key('error') # response message from the server - var req = lspserver.requests->get(msg.id->string()) - # Remove the corresponding stored request message - lspserver.requests->remove(msg.id->string()) - - if msg->has_key('result') - lspserver.processReply(req, msg) - else - # request failed - var emsg: string = msg.error.message - emsg ..= ', code = ' .. msg.error.code - if msg.error->has_key('data') - emsg = emsg .. ', data = ' .. msg.error.data->string() + var req = lspserver.requests->get(msg.id->string(), {}) + if !req->empty() + # Remove the corresponding stored request message + lspserver.requests->remove(msg.id->string()) + + if msg->has_key('result') + lspserver.processReply(req, msg) + else + # request failed + var emsg: string = msg.error.message + emsg ..= ', code = ' .. msg.error.code + if msg.error->has_key('data') + emsg = emsg .. ', data = ' .. msg.error.data->string() + endif + ErrMsg("Error: request " .. req.method .. " failed (" + .. emsg .. ")") endif - ErrMsg("Error: request " .. req.method .. " failed (" .. emsg .. ")") endif elseif msg->has_key('id') # request message from the server diff --git a/autoload/lspserver.vim b/autoload/lspserver.vim index 02f70ac..1ae9c2d 100644 --- a/autoload/lspserver.vim +++ b/autoload/lspserver.vim @@ -367,9 +367,9 @@ def s:getCompletion(lspserver: dict, triggerKind_arg: number): void # interface CompletionParams # interface TextDocumentPositionParams - req.params->extend(s:getLspTextDocPosition()) + req.params = s:getLspTextDocPosition() # interface CompletionContext - req.params->extend({context: {triggerKind: triggerKind_arg}}) + req.params.context = {triggerKind: triggerKind_arg} lspserver.sendMessage(req) enddef @@ -591,7 +591,6 @@ def s:textDocFormat(lspserver: dict, fname: string, rangeFormat: bool, # interface DocumentFormattingParams # interface TextDocumentIdentifier - req.params->extend({textDocument: {uri: LspFileToUri(fname)}}) var tabsz: number if &sts > 0 tabsz = &sts @@ -605,7 +604,8 @@ def s:textDocFormat(lspserver: dict, fname: string, rangeFormat: bool, tabSize: tabsz, insertSpaces: &expandtab ? true : false, } - req.params->extend({options: fmtopts}) + req.params->extend({textDocument: {uri: LspFileToUri(fname)}, + options: fmtopts}) if rangeFormat var r: dict> = { start: {line: start_lnum - 1, character: 0}, @@ -647,8 +647,9 @@ def s:renameSymbol(lspserver: dict, newName: string) var req = lspserver.createRequest('textDocument/rename') # interface RenameParams # interface TextDocumentPositionParams - req.params->extend(s:getLspTextDocPosition()) - req.params->extend({newName: newName}) + req.params = s:getLspTextDocPosition() + req.params.newName = newName + #req.params->extend({newName: newName}) lspserver.sendMessage(req) enddef @@ -676,11 +677,10 @@ def s:codeAction(lspserver: dict, fname_arg: string) # interface CodeActionParams var fname: string = fnamemodify(fname_arg, ':p') var bnr: number = fname_arg->bufnr() - req.params->extend({textDocument: {uri: LspFileToUri(fname)}}) var r: dict> = { start: {line: line('.') - 1, character: charcol('.') - 1}, end: {line: line('.') - 1, character: charcol('.') - 1}} - req.params->extend({range: r}) + req.params->extend({textDocument: {uri: LspFileToUri(fname)}, range: r}) var diag: list> = [] var lnum = line('.') var diagInfo: dict = lspserver.getDiagByLine(bnr, lnum) @@ -777,8 +777,8 @@ def s:selectionRange(lspserver: dict, fname: string) var req = lspserver.createRequest('textDocument/selectionRange') # interface SelectionRangeParams # interface TextDocumentIdentifier - req.params->extend({textDocument: {uri: LspFileToUri(fname)}}) - req.params->extend({positions: [s:getLspPosition()]}) + req.params->extend({textDocument: {uri: LspFileToUri(fname)}, + positions: [s:getLspPosition()]}) lspserver.sendMessage(req) enddef -- 2.48.1