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:
Mathias Fußenegger
2021-02-20 04:20:42 +01:00
committed by GitHub
parent b2fcfc65b7
commit 1caf58578c
2 changed files with 15 additions and 1 deletions

View File

@@ -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 fix_eol = api.nvim_buf_get_option(bufnr, 'fixeol')
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, '')
end

View File

@@ -1032,6 +1032,20 @@ describe('LSP', function()
'å ä ɧ 汉语 ↥ 🤦 🦄';
}, buf_lines(1))
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()
it('applies edits when the last linebreak is considered a new line', function()