]> Sergey Matveev's repositories - vim-lsp.git/commitdiff
feat: make workspace/workspaceFolders really work and correct sendResponse func
authorshane.xb.qian <shane.qian@foxmail.com>
Thu, 17 Nov 2022 09:02:12 +0000 (17:02 +0800)
committershane.xb.qian <shane.qian@foxmail.com>
Thu, 17 Nov 2022 09:02:12 +0000 (17:02 +0800)
Signed-off-by: shane.xb.qian <shane.qian@foxmail.com>
autoload/lsp/handlers.vim
autoload/lsp/lspserver.vim

index cfa323975de6ebce9657e912a4ccdd017699d7b4..fd9c7b2751612e77da7595d129c6088ca919eb06 100644 (file)
@@ -120,7 +120,17 @@ enddef
 # Request: "workspace/workspaceFolders"
 # Param: none
 def ProcessWorkspaceFoldersReq(lspserver: dict<any>, request: dict<any>)
-  lspserver.sendResponse(request, {}, {})
+  if !lspserver->has_key('workspaceFolders')
+    lspserver.sendResponse(request, null, {})
+    return
+  endif
+  if empty(lspserver.workspaceFolders)
+    lspserver.sendResponse(request, [], {})
+  else
+    lspserver.sendResponse(request,
+         \ map(copy(lspserver.workspaceFolders), '{name: v:val->fnamemodify(":t"), uri: util.LspFileToUri(v:val)}'),
+         \ {})
+  endif
 enddef
 
 # process the client/registerCapability LSP server request
index fe4a7afb9881d81b8e18b66e65405a1575924d18..df4a047d0548b66b8f07e8878e72105a71dd38dc 100644 (file)
@@ -518,7 +518,7 @@ def CreateNotification(lspserver: dict<any>, notif: string): dict<any>
 enddef
 
 # send a response message to the server
-def SendResponse(lspserver: dict<any>, request: dict<any>, result: dict<any>, error: dict<any>)
+def SendResponse(lspserver: dict<any>, request: dict<any>, result: any, error: dict<any>)
   if (request.id->type() == v:t_string
        && (request.id->trim() =~ '[^[:digit:]]\+'
            || request.id->trim() == ''))
@@ -528,7 +528,7 @@ def SendResponse(lspserver: dict<any>, request: dict<any>, result: dict<any>, er
   endif
   var resp: dict<any> = lspserver.createResponse(
            request.id->type() == v:t_string ? request.id->str2nr() : request.id)
-  if result->type() != v:t_none
+  if empty(error)
     resp->extend({result: result})
   else
     resp->extend({error: error})