mirror of
https://github.com/neovim/neovim.git
synced 2025-12-20 13:25:34 +00:00
lsp: Fix text edits operating on the last line of a document (#13677)
`lines` can be empty, in which case `#lines[#lines]` failed with an
error:
lsp/util.lua:214: attempt to get length of a nil value
This commit is contained in:
committed by
GitHub
parent
b2fcfc65b7
commit
1caf58578c
@@ -211,7 +211,7 @@ function M.apply_text_edits(text_edits, bufnr)
|
|||||||
local lines = api.nvim_buf_get_lines(bufnr, start_line, finish_line + 1, false)
|
local lines = api.nvim_buf_get_lines(bufnr, start_line, finish_line + 1, false)
|
||||||
local fix_eol = api.nvim_buf_get_option(bufnr, 'fixeol')
|
local fix_eol = api.nvim_buf_get_option(bufnr, 'fixeol')
|
||||||
local set_eol = fix_eol and api.nvim_buf_line_count(bufnr) <= finish_line + 1
|
local set_eol = fix_eol and api.nvim_buf_line_count(bufnr) <= finish_line + 1
|
||||||
if set_eol and #lines[#lines] ~= 0 then
|
if set_eol and (#lines == 0 or #lines[#lines] ~= 0) then
|
||||||
table.insert(lines, '')
|
table.insert(lines, '')
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -1032,6 +1032,20 @@ describe('LSP', function()
|
|||||||
'å ä ɧ 汉语 ↥ 🤦 🦄';
|
'å ä ɧ 汉语 ↥ 🤦 🦄';
|
||||||
}, buf_lines(1))
|
}, buf_lines(1))
|
||||||
end)
|
end)
|
||||||
|
it('applies text edits at the end of the document', function()
|
||||||
|
local edits = {
|
||||||
|
make_edit(5, 0, 5, 0, "foobar");
|
||||||
|
}
|
||||||
|
exec_lua('vim.lsp.util.apply_text_edits(...)', edits, 1)
|
||||||
|
eq({
|
||||||
|
'First line of text';
|
||||||
|
'Second line of text';
|
||||||
|
'Third line of text';
|
||||||
|
'Fourth line of text';
|
||||||
|
'å å ɧ 汉语 ↥ 🤦 🦄';
|
||||||
|
'foobar';
|
||||||
|
}, buf_lines(1))
|
||||||
|
end)
|
||||||
|
|
||||||
describe('with LSP end line after what Vim considers to be the end line', function()
|
describe('with LSP end line after what Vim considers to be the end line', function()
|
||||||
it('applies edits when the last linebreak is considered a new line', function()
|
it('applies edits when the last linebreak is considered a new line', function()
|
||||||
|
|||||||
Reference in New Issue
Block a user