autoload/lsp/lsp.vim | 23 ++++++++++++++++------- diff --git a/autoload/lsp/lsp.vim b/autoload/lsp/lsp.vim index f69ac7e736d93620e3521466bc2a63c8aead5f58..303e30ce51074be9e7f209413150404ac2fea6dc 100644 --- a/autoload/lsp/lsp.vim +++ b/autoload/lsp/lsp.vim @@ -432,20 +432,29 @@ AddBufLocalAutocmds(lspserver, bnr) 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