]> Sergey Matveev's repositories - vim-lsp.git/commitdiff
Merge pull request #389 from vimpostor/completionitem_command
authorYegappan Lakshmanan <4298407+yegappan@users.noreply.github.com>
Mon, 4 Sep 2023 16:15:28 +0000 (09:15 -0700)
committerGitHub <noreply@github.com>
Mon, 4 Sep 2023 16:15:28 +0000 (09:15 -0700)
Add support for CompletionItem commands

autoload/lsp/completion.vim
autoload/lsp/textedit.vim

index 3d1c2be3de3db1c510337959d839cc5249a75025..0d64e2b9d9ccbf0aac52de51d4bc2fc0d9dba19e 100644 (file)
@@ -7,6 +7,7 @@ import './buffer.vim' as buf
 import './options.vim' as opt
 import './textedit.vim'
 import './snippet.vim'
+import './codeaction.vim'
 
 # per-filetype omni-completion enabled/disabled table
 var ftypeOmniCtrlMap: dict<bool> = {}
@@ -590,12 +591,17 @@ def LspCompleteDone(bnr: number)
     # 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
+    if !completionData->get('additionalTextEdits', {})->empty()
+      textedit.ApplyTextEdits(bnr, completionData.additionalTextEdits)
     endif
   endif
 
-  textedit.ApplyTextEdits(bnr, completionData.additionalTextEdits)
+  if completionData->has_key('command')
+    # Some language servers (e.g. haskell-language-server) want to apply
+    # additional commands after completion.
+    codeaction.DoCommand(lspserver, completionData.command)
+  endif
+
 enddef
 
 # Initialize buffer-local completion options and autocmds
index 0ea69fb911db8270ecefa21ec23b3310bd079b68..2fe2ad0208e8a14462d741f953a827d129973e32 100644 (file)
@@ -213,7 +213,6 @@ export def ApplyWorkspaceEdit(workspaceEdit: dict<any>)
     return
   endif
 
-  var save_cursor: list<number> = getcurpos()
   for [uri, changes] in workspaceEdit.changes->items()
     var bnr: number = util.LspUriToBufnr(uri)
     if bnr == 0
@@ -224,8 +223,6 @@ export def ApplyWorkspaceEdit(workspaceEdit: dict<any>)
     # interface TextEdit
     ApplyTextEdits(bnr, changes)
   endfor
-  # Restore the cursor to the location before the edit
-  save_cursor->setpos('.')
 enddef
 
 # vim: tabstop=8 shiftwidth=2 softtabstop=2