]> Sergey Matveev's repositories - vim-lsp.git/commitdiff
Auto import is not working with typescript language server. Fixes #367.
authorYegappan Lakshmanan <yegappan@yahoo.com>
Sat, 29 Jul 2023 01:01:49 +0000 (18:01 -0700)
committerYegappan Lakshmanan <yegappan@yahoo.com>
Sat, 29 Jul 2023 01:01:49 +0000 (18:01 -0700)
autoload/lsp/completion.vim
autoload/lsp/lspserver.vim

index 15f59c4ae94c511f59947313ea4c917e465bed79..bd6094a74be266572a3f5a4df5f799d4f21784e0 100644 (file)
@@ -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
 
index fb64674cfc92714b5465561ebcffe868176fc36a..3686b4446d5f4881cdbab3ae3163520250e7014b 100644 (file)
@@ -697,16 +697,23 @@ enddef
 # Get lazy properties for a completion item.
 # Request: "completionItem/resolve"
 # Param: CompletionItem
-def ResolveCompletion(lspserver: dict<any>, item: dict<any>): void
+def ResolveCompletion(lspserver: dict<any>, item: dict<any>, sync: bool = false): dict<any>
   # 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.