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`
This commit is contained in:
Mathias Fussenegger
2025-02-21 18:37:05 +01:00
committed by Mathias Fußenegger
parent db2c3d1143
commit 8d7eb03040
2 changed files with 12 additions and 3 deletions

View File

@@ -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