From a71d687213bd8e16aedf6e8f3a4def42b012dc18 Mon Sep 17 00:00:00 2001 From: Andreas Louv Date: Fri, 14 Apr 2023 16:58:06 +0200 Subject: [PATCH] Initialize completion when all server capabilities are known It's only possible to initialize completion when all server capabilities are known, as this is the time it's known which server will end up being used for completion. --- autoload/lsp/lsp.vim | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/autoload/lsp/lsp.vim b/autoload/lsp/lsp.vim index f69ac7e..303e30c 100644 --- a/autoload/lsp/lsp.vim +++ b/autoload/lsp/lsp.vim @@ -432,20 +432,29 @@ def BufferInit(lspserverId: number, bnr: number): void setbufvar(bnr, '&balloonexpr', 'g:LspDiagExpr()') - completion.BufferInit(lspserver, bnr, ftype) signature.BufferInit(lspserver) inlayhints.BufferInit(lspserver, bnr) - if exists('#User#LspAttached') - var allServersReady = true - var lspservers: list> = buf.BufLspServersGet(bnr) + var allServersReady = true + var lspservers: list> = buf.BufLspServersGet(bnr) + for lspsrv in lspservers + if !lspsrv.ready + allServersReady = false + break + endif + endfor + + if allServersReady for lspsrv in lspservers - if !lspsrv.ready - allServersReady = false + # It's only possible to initialize completion when all server capabilities + # are known. + var completionServer = buf.BufLspServerGet(bnr, 'completion') + if !completionServer->empty() && lspsrv.id == completionServer.id + completion.BufferInit(lspsrv, bnr, ftype) endif endfor - if allServersReady + if exists('#User#LspAttached') doautocmd User LspAttached endif endif -- 2.50.0