if caps->has_key('signatureHelpProvider')
var triggers = caps.signatureHelpProvider.triggerCharacters
for ch in triggers
- exe 'inoremap <silent> ' .. ch .. ' ' .. ch .. "<C-R>=lsp#show_signature()<CR>"
+ exe 'inoremap <buffer> <silent> ' .. ch .. ' ' .. ch .. "<C-R>=lsp#show_signature()<CR>"
endfor
endif
enddef
lsp#processDefDeclReply(reply)
elseif req.method == 'textDocument/signatureHelp'
lsp#process_signatureHelp_reply(reply)
+ else
+ echomsg "Error: Unsupported reply received from LSP server: " .. string(reply)
endif
enddef
else
lsp#process_reply(ftype, req, reply)
endif
+ else
+ if reply.method == 'textDocument/publishDiagnostics'
+ # Todo: process the diagnostics from the LSP server
+ lsp_servers[ftype].diags = reply.params.diagnostics
+ else
+ echomsg 'Error: Unsupported notification received from LSP server ' .. string(reply)
+ endif
endif
lsp_servers[ftype].data = lsp_servers[ftype].data[idx + len :]
var opts = {'in_mode': 'raw',
'out_mode': 'raw',
'err_mode': 'raw',
+ 'noblock': 1,
'out_cb': function('lsp#output_cb', [ftype]),
'err_cb': function('lsp#error_cb', [ftype]),
'exit_cb': function('lsp#exit_cb', [ftype])}
return 1
endif
+ # wait for the LSP server to start
+ sleep 10m
+
lsp_servers[ftype].job = job
lsp_servers[ftype].running = v:true
enddef
def lsp#add_file(fname: string, ftype: string): void
- if fname == '' || ftype == '' || !lsp_servers->has_key(ftype)
+ if fname == '' || ftype == '' || !filereadable(fname) || !lsp_servers->has_key(ftype)
return
endif
if !lsp_servers[ftype].running
if fname == '' || ftype == '' || !lsp_servers->has_key(ftype)
return
endif
- if !lsp_servers[ftype].running
- lsp#start_server(ftype)
- endif
lsp#textdoc_didclose(fname, ftype)
enddef
'data': '',
'nextID': 1,
'caps': {},
- 'requests': {} # outstanding LSP requests
+ 'requests': {}, # outstanding LSP requests
+ 'diags': {}
}
lsp_servers->extend({[ftype]: sinfo})
enddef
echomsg lsp_servers
enddef
+def lsp#showDiagnostics(ftype: string): void
+ var msgs: list<string> = []
+ echomsg lsp_servers[ftype].diags
+ for diag in lsp_servers[ftype].diags
+ diag.message = diag.message->substitute("\n\\+", "\n", 'g')
+ msgs->extend(split(diag.message, "\n"))
+ endfor
+ setqflist([], ' ', {'lines': msgs})
+enddef
+
# vim: shiftwidth=2 sts=2 expandtab