From e40cc1d51d622b26f07bf2eaed4bdde969d287d5 Mon Sep 17 00:00:00 2001 From: "shane.xb.qian" Date: Thu, 17 Nov 2022 17:02:12 +0800 Subject: [PATCH] feat: make workspace/workspaceFolders really work and correct sendResponse func Signed-off-by: shane.xb.qian --- autoload/lsp/handlers.vim | 12 +++++++++++- autoload/lsp/lspserver.vim | 4 ++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/autoload/lsp/handlers.vim b/autoload/lsp/handlers.vim index cfa3239..fd9c7b2 100644 --- a/autoload/lsp/handlers.vim +++ b/autoload/lsp/handlers.vim @@ -120,7 +120,17 @@ enddef # Request: "workspace/workspaceFolders" # Param: none def ProcessWorkspaceFoldersReq(lspserver: dict, request: dict) - 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 diff --git a/autoload/lsp/lspserver.vim b/autoload/lsp/lspserver.vim index fe4a7af..df4a047 100644 --- a/autoload/lsp/lspserver.vim +++ b/autoload/lsp/lspserver.vim @@ -518,7 +518,7 @@ def CreateNotification(lspserver: dict, notif: string): dict enddef # send a response message to the server -def SendResponse(lspserver: dict, request: dict, result: dict, error: dict) +def SendResponse(lspserver: dict, request: dict, result: any, error: dict) if (request.id->type() == v:t_string && (request.id->trim() =~ '[^[:digit:]]\+' || request.id->trim() == '')) @@ -528,7 +528,7 @@ def SendResponse(lspserver: dict, request: dict, result: dict, er endif var resp: dict = 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}) -- 2.48.1