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

View File

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