From c1362035d2713637c6f7c00c06b4ce7fb37c2de8 Mon Sep 17 00:00:00 2001 From: Yegappan Lakshmanan Date: Sat, 19 Dec 2020 16:33:51 -0800 Subject: [PATCH] Add support for registering LSP servers using a List of dicts --- autoload/lsp.vim | 42 ++++++++++++++++++++++++++++-------------- 1 file changed, 28 insertions(+), 14 deletions(-) diff --git a/autoload/lsp.vim b/autoload/lsp.vim index 0648410..8770c77 100644 --- a/autoload/lsp.vim +++ b/autoload/lsp.vim @@ -725,20 +725,34 @@ def lsp#stop_all_servers() endfor enddef -def lsp#add_server(ftype: string, serverpath: string, args: list) - var sinfo = { - 'path': serverpath, - 'args': args, - 'running': v:false, - 'job': v:none, - 'data': '', - 'nextID': 1, - 'caps': {}, - 'requests': {}, # outstanding LSP requests - 'diags': {}, - 'completePending': v:false - } - lsp_servers->extend({[ftype]: sinfo}) +def lsp#addServer(serverList: list>) + var sinfo: dict + for server in serverList + if !server->has_key('filetype') || !server->has_key('path') || !server->has_key('args') + echomsg 'Error: LSP server information is missing filetype or path or args' + continue + endif + sinfo.ftype = server.filetype + sinfo.path = server.path + if !file_readable(sinfo.path) + echomsg 'Error: LSP server ' .. sinfo.path .. ' is not found' + continue + endif + sinfo.args = server.args + if type(sinfo.args) != v:t_list + echomsg 'Error: Arguments for LSP server ' .. sinfo.path .. ' is not a List' + continue + endif + sinfo.running = v:false + sinfo.job = v:none + sinfo.data = '' + sinfo.nextID = 1 + sinfo.caps = {} + sinfo.requests = {} + sinfo.diags = {} + sinfo.completePending = v:false + lsp_servers->extend({[sinfo.ftype]: sinfo}) + endfor enddef def lsp#showServers() -- 2.48.1