# send a "initialized" notification to server
lspserver.sendInitializedNotif()
+ lspserver.ready = true
# if the outline window is opened, then request the symbols for the current
# buffer
endfor
enddef
+# The LSP server is considered ready when the server capabilities are
+# received ('initialize' LSP reply message)
+def lsp#serverReady(): bool
+ var ftype = &filetype
+ if ftype == '' || @% == ''
+ return false
+ endif
+
+ var lspserver: dict<any> = s:lspGetServer(ftype)
+ if lspserver->empty()
+ return false
+ endif
+ return lspserver.ready
+enddef
+
# set the LSP server trace level for the current buffer
# Params: SetTraceParams
def lsp#setTraceServer(traceVal: string)
util.WarnMsg("LSP server exited with status " .. status)
lspserver.job = v:none
lspserver.running = false
+ lspserver.ready = false
lspserver.requests = {}
enddef
lspserver.job->job_stop()
lspserver.job = v:none
lspserver.running = false
+ lspserver.ready = false
lspserver.requests = {}
return 0
enddef
path: path,
args: args,
running: false,
+ ready: false,
job: v:none,
data: '',
nextID: 1,
source ../plugin/lsp.vim
var lspServers = [{
filetype: ['c', 'cpp'],
- path: '/usr/bin/clangd-12',
+ path: '/usr/bin/clangd',
args: ['--background-index', '--clang-tidy']
}]
lsp#addServer(lspServers)
# Edit a dummy C file to start the LSP server
:edit Xtest.c
- :sleep 2
+ # Wait for the LSP server to become ready (max 10 seconds)
+ var maxcount = 100
+ while maxcount > 0 && !lsp#serverReady()
+ :sleep 100m
+ maxcount -= 1
+ endwhile
:%bw!
# Get the list of test functions in this file and call them