]> Sergey Matveev's repositories - vim-lsp.git/commitdiff
Fix a problem with extending a dict with different types
authorYegappan Lakshmanan <yegappan@yahoo.com>
Fri, 26 Feb 2021 16:52:35 +0000 (08:52 -0800)
committerYegappan Lakshmanan <yegappan@yahoo.com>
Fri, 26 Feb 2021 16:52:35 +0000 (08:52 -0800)
autoload/handlers.vim
autoload/lspserver.vim

index ae7fef08d49221e1424f564131c14288b0d7759d..a81ed7141c4111b357f7fa4607781617f2e62e91 100644 (file)
@@ -1119,20 +1119,23 @@ export def ProcessMessages(lspserver: dict<any>): 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
index 02f70ac029e6a409da5acf6eb7dc2a676894fe64..1ae9c2d77bc6c3e9d552aa97ce7c9edeb48cc026 100644 (file)
@@ -367,9 +367,9 @@ def s:getCompletion(lspserver: dict<any>, 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<any>, 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<any>, 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<dict<number>> = {
        start: {line: start_lnum - 1, character: 0},
@@ -647,8 +647,9 @@ def s:renameSymbol(lspserver: dict<any>, 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<any>, 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<dict<number>> = {
                  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<dict<any>> = []
   var lnum = line('.')
   var diagInfo: dict<any> = lspserver.getDiagByLine(bnr, lnum)
@@ -777,8 +777,8 @@ def s:selectionRange(lspserver: dict<any>, 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