mirror of
https://github.com/neovim/neovim
synced 2025-07-16 17:21:49 +00:00
fix(lsp): trim trailing whitespace from completion words (#29122)
the `complete()` mechanism doesn't play nicely with trailing newlines or tabs. A newline causes it to insert a null character, showing up as `^@`.
This commit is contained in:
committed by
GitHub
parent
24cb9ba6d3
commit
19be3d2683
@ -153,7 +153,8 @@ local function get_completion_word(item)
|
|||||||
return item.label
|
return item.label
|
||||||
end
|
end
|
||||||
elseif item.textEdit then
|
elseif item.textEdit then
|
||||||
return item.textEdit.newText
|
local word = item.textEdit.newText
|
||||||
|
return word:match('^(%S*)') or word
|
||||||
elseif item.insertText and item.insertText ~= '' then
|
elseif item.insertText and item.insertText ~= '' then
|
||||||
return item.insertText
|
return item.insertText
|
||||||
end
|
end
|
||||||
|
@ -126,6 +126,41 @@ describe('vim.lsp.completion: item conversion', function()
|
|||||||
eq(expected, result)
|
eq(expected, result)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
it('trims trailing newline or tab from textEdit', function()
|
||||||
|
local range0 = {
|
||||||
|
start = { line = 0, character = 0 },
|
||||||
|
['end'] = { line = 0, character = 0 },
|
||||||
|
}
|
||||||
|
local items = {
|
||||||
|
{
|
||||||
|
detail = 'ansible.builtin',
|
||||||
|
filterText = 'lineinfile ansible.builtin.lineinfile builtin ansible',
|
||||||
|
kind = 7,
|
||||||
|
label = 'ansible.builtin.lineinfile',
|
||||||
|
sortText = '2_ansible.builtin.lineinfile',
|
||||||
|
textEdit = {
|
||||||
|
newText = 'ansible.builtin.lineinfile:\n ',
|
||||||
|
range = range0,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
local result = complete('|', items)
|
||||||
|
result = vim.tbl_map(function(x)
|
||||||
|
return {
|
||||||
|
abbr = x.abbr,
|
||||||
|
word = x.word,
|
||||||
|
}
|
||||||
|
end, result.items)
|
||||||
|
|
||||||
|
local expected = {
|
||||||
|
{
|
||||||
|
abbr = 'ansible.builtin.lineinfile',
|
||||||
|
word = 'ansible.builtin.lineinfile:',
|
||||||
|
},
|
||||||
|
}
|
||||||
|
eq(expected, result)
|
||||||
|
end)
|
||||||
|
|
||||||
it('prefers wordlike components for snippets', function()
|
it('prefers wordlike components for snippets', function()
|
||||||
-- There are two goals here:
|
-- There are two goals here:
|
||||||
--
|
--
|
||||||
|
Reference in New Issue
Block a user