From: Yegappan Lakshmanan Date: Sat, 29 Jul 2023 01:01:49 +0000 (-0700) Subject: Auto import is not working with typescript language server. Fixes #367. X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=791f84671157ca56bed06cfba8429bab0a784cec;p=vim-lsp.git Auto import is not working with typescript language server. Fixes #367. --- diff --git a/autoload/lsp/completion.vim b/autoload/lsp/completion.vim index 15f59c4..bd6094a 100644 --- a/autoload/lsp/completion.vim +++ b/autoload/lsp/completion.vim @@ -581,11 +581,20 @@ def LspCompleteDone(bnr: number) var completionData: any = v:completed_item->get('user_data', '') if completionData->type() != v:t_dict - || !completionData->has_key('additionalTextEdits') || !opt.lspOptions.completionTextEdit return endif + if !completionData->has_key('additionalTextEdits') + # Some language servers (e.g. typescript) delay the computation of the + # additional text edits. So try to resolve the completion item now to get + # the text edits. + completionData = lspserver.resolveCompletion(completionData, true) + if completionData->get('additionalTextEdits', {})->empty() + return + endif + endif + textedit.ApplyTextEdits(bnr, completionData.additionalTextEdits) enddef diff --git a/autoload/lsp/lspserver.vim b/autoload/lsp/lspserver.vim index fb64674..3686b44 100644 --- a/autoload/lsp/lspserver.vim +++ b/autoload/lsp/lspserver.vim @@ -697,16 +697,23 @@ enddef # Get lazy properties for a completion item. # Request: "completionItem/resolve" # Param: CompletionItem -def ResolveCompletion(lspserver: dict, item: dict): void +def ResolveCompletion(lspserver: dict, item: dict, sync: bool = false): dict # Check whether LSP server supports completion item resolve if !lspserver.isCompletionResolveProvider - util.ErrMsg('LSP server does not support completion item resolve') - return + return {} endif # interface CompletionItem - lspserver.rpc_a('completionItem/resolve', item, - completion.CompletionResolveReply) + if sync + var reply = lspserver.rpc('completionItem/resolve', item) + if !reply->empty() && !reply.result->empty() + return reply.result + endif + else + lspserver.rpc_a('completionItem/resolve', item, + completion.CompletionResolveReply) + endif + return {} enddef # Jump to or peek a symbol location.