From 8d7eb03040c26e8e3bdbf51b25fe03a735b85b5b Mon Sep 17 00:00:00 2001 From: Mathias Fussenegger Date: Fri, 21 Feb 2025 18:37:05 +0100 Subject: fix(lsp): unify get_completion_word for textEdits/insertText Problem: After https://github.com/neovim/neovim/pull/32377 selecting snippets provided by luals inserted the multi-line text before accepting the candidates. That's inconsistent with servers who provide `textEdit` instead of `insertText` and having lines shift up/down while cycling through the completion candidates is a bit irritating. Solution: Use the logic used for `textEdit` snippets also for `insertText` --- runtime/lua/vim/lsp/completion.lua | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'runtime/lua/vim') diff --git a/runtime/lua/vim/lsp/completion.lua b/runtime/lua/vim/lsp/completion.lua index d99b1ffd0d..1466dcf438 100644 --- a/runtime/lua/vim/lsp/completion.lua +++ b/runtime/lua/vim/lsp/completion.lua @@ -132,7 +132,7 @@ end --- @return string local function get_completion_word(item, prefix, match) if item.insertTextFormat == protocol.InsertTextFormat.Snippet then - if item.textEdit then + if item.textEdit or (item.insertText and item.insertText ~= '') then -- Use label instead of text if text has different starting characters. -- label is used as abbr (=displayed), but word is used for filtering -- This is required for things like postfix completion. @@ -154,8 +154,6 @@ local function get_completion_word(item, prefix, match) else return word end - elseif item.insertText and item.insertText ~= '' then - return parse_snippet(item.insertText) else return item.label end -- cgit