From 45cafa6e9874b6284403226a1ede126187efd930 Mon Sep 17 00:00:00 2001 From: Andrei Tihonovschi Date: Mon, 31 Oct 2022 19:58:51 +0200 Subject: [PATCH] Add CompleteDone handler to execute text edits Add CompleteDone autocommand handler to verify if activated completion require additional text edits ('server-initiated edits') and to perform these. The additional text edits are used for example when an import is required for the completed entity. --- autoload/lsp/lsp.vim | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/autoload/lsp/lsp.vim b/autoload/lsp/lsp.vim index 13807a2..36ea13c 100644 --- a/autoload/lsp/lsp.vim +++ b/autoload/lsp/lsp.vim @@ -11,6 +11,7 @@ import './options.vim' as opt import './lspserver.vim' as lserver import './util.vim' import './buffer.vim' as buf +import './textedit.vim' import './diag.vim' import './symbol.vim' import './outline.vim' @@ -291,6 +292,12 @@ def AddBufLocalAutocmds(lspserver: dict, bnr: number): void endif endif + # Execute LSP server initiated text edits after completion + acmds->add({bufnr: bnr, + event: 'CompleteDone', + group: 'LSPBufferAutocmds', + cmd: 'LspCompleteDone()'}) + # Auto highlight all the occurrences of the current keyword if opt.lspOptions.autoHighlight && lspserver.caps->get('documentHighlightProvider', false) @@ -694,6 +701,27 @@ def g:LspOmniFunc(findstart: number, base: string): any endif enddef +# complete done handler (LSP server-initiated actions after completion) +def LspCompleteDone() + var lspserver: dict = CurbufGetServerChecked() + if lspserver->empty() + return + endif + + if v:completed_item->type() != v:t_dict + return + endif + + var completionData: any = v:completed_item->get('user_data', '') + if completionData->type() != v:t_dict + || !completionData->has_key('additionalTextEdits') + return + endif + + var bnr: number = bufnr() + textedit.ApplyTextEdits(bnr, completionData.additionalTextEdits) +enddef + # Display the hover message from the LSP server for the current cursor # location export def Hover() -- 2.48.1