From 794f059dcb41396f9e33e82ddc8a50ff7732af35 Mon Sep 17 00:00:00 2001 From: Yegappan Lakshmanan Date: Mon, 17 Jan 2022 08:33:42 -0800 Subject: [PATCH] Wait for the LSP server to become ready before running the tests --- autoload/handlers.vim | 1 + autoload/lsp.vim | 15 +++++++++++++++ autoload/lspserver.vim | 3 +++ test/unit_tests.vim | 9 +++++++-- 4 files changed, 26 insertions(+), 2 deletions(-) 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 -- 2.48.1