]> Sergey Matveev's repositories - vim-lsp.git/commitdiff
Add support for registering LSP servers using a List of dicts
authorYegappan Lakshmanan <yegappan@yahoo.com>
Sun, 20 Dec 2020 00:33:51 +0000 (16:33 -0800)
committerYegappan Lakshmanan <yegappan@yahoo.com>
Sun, 20 Dec 2020 00:33:51 +0000 (16:33 -0800)
autoload/lsp.vim

index 0648410d81a69bdaf5b92583fdb08fa68897f28f..8770c77c0d3500b255de50b58ec6a1f20bcd5eef 100644 (file)
@@ -725,20 +725,34 @@ def lsp#stop_all_servers()
   endfor
 enddef
 
-def lsp#add_server(ftype: string, serverpath: string, args: list<string>)
-  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<dict<any>>)
+  var sinfo: dict<any>
+  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()