From: Yegappan Lakshmanan Date: Mon, 17 Jan 2022 16:33:42 +0000 (-0800) Subject: Wait for the LSP server to become ready before running the tests X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=794f059dcb41396f9e33e82ddc8a50ff7732af35;p=vim-lsp.git Wait for the LSP server to become ready before running the tests --- diff --git a/autoload/handlers.vim b/autoload/handlers.vim index 67b7865..c17de72 100644 --- a/autoload/handlers.vim +++ b/autoload/handlers.vim @@ -99,6 +99,7 @@ def s:processInitializeReply(lspserver: dict, req: dict, reply: dict>) 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 = 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) diff --git a/autoload/lspserver.vim b/autoload/lspserver.vim index 59cb5bc..d3b2bd5 100644 --- a/autoload/lspserver.vim +++ b/autoload/lspserver.vim @@ -65,6 +65,7 @@ def s:exit_cb(lspserver: dict, job: job, status: number): void util.WarnMsg("LSP server exited with status " .. status) lspserver.job = v:none lspserver.running = false + lspserver.ready = false lspserver.requests = {} enddef @@ -202,6 +203,7 @@ def s:stopServer(lspserver: dict): number lspserver.job->job_stop() lspserver.job = v:none lspserver.running = false + lspserver.ready = false lspserver.requests = {} return 0 enddef @@ -843,6 +845,7 @@ export def NewLspServer(path: string, args: list): dict path: path, args: args, running: false, + ready: false, job: v:none, data: '', nextID: 1, diff --git a/test/unit_tests.vim b/test/unit_tests.vim index 15d2324..a8076f7 100644 --- a/test/unit_tests.vim +++ b/test/unit_tests.vim @@ -10,7 +10,7 @@ set rtp+=../ 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) @@ -396,7 +396,12 @@ def LspRunTests() # 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