mirror of
https://github.com/neovim/neovim.git
synced 2024-12-20 03:05:11 -07:00
fix(lsp): fix cursor row after textEdits (#16038)
This commit is contained in:
parent
bcc9ba51fa
commit
bd2f61c6c4
@ -335,10 +335,12 @@ function M.apply_text_edits(text_edits, bufnr)
|
|||||||
end
|
end
|
||||||
|
|
||||||
if is_cursor_fixed then
|
if is_cursor_fixed then
|
||||||
vim.api.nvim_win_set_cursor(0, {
|
local is_valid_cursor = true
|
||||||
cursor.row + 1,
|
is_valid_cursor = is_valid_cursor and cursor.row < vim.api.nvim_buf_line_count(bufnr)
|
||||||
math.min(cursor.col, #(vim.api.nvim_buf_get_lines(bufnr, cursor.row, cursor.row + 1, false)[1] or ''))
|
is_valid_cursor = is_valid_cursor and cursor.col <= #(vim.api.nvim_buf_get_lines(bufnr, cursor.row, cursor.row + 1, false)[1] or '')
|
||||||
})
|
if is_valid_cursor then
|
||||||
|
vim.api.nvim_win_set_cursor(0, { cursor.row + 1, cursor.col })
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Remove final line if needed
|
-- Remove final line if needed
|
||||||
|
@ -1164,10 +1164,11 @@ describe('LSP', function()
|
|||||||
eq({ 2, 6 }, funcs.nvim_win_get_cursor(0))
|
eq({ 2, 6 }, funcs.nvim_win_get_cursor(0))
|
||||||
end)
|
end)
|
||||||
|
|
||||||
it('fix the cursor to the valid column if the content was removed', function()
|
it('fix the cursor to the valid col if the content was removed', function()
|
||||||
funcs.nvim_win_set_cursor(0, { 2, 6 })
|
funcs.nvim_win_set_cursor(0, { 2, 6 })
|
||||||
local edits = {
|
local edits = {
|
||||||
make_edit(1, 0, 1, 19, '')
|
make_edit(1, 0, 1, 6, ''),
|
||||||
|
make_edit(1, 6, 1, 19, '')
|
||||||
}
|
}
|
||||||
exec_lua('vim.lsp.util.apply_text_edits(...)', edits, 1)
|
exec_lua('vim.lsp.util.apply_text_edits(...)', edits, 1)
|
||||||
eq({
|
eq({
|
||||||
@ -1180,6 +1181,19 @@ describe('LSP', function()
|
|||||||
eq({ 2, 0 }, funcs.nvim_win_get_cursor(0))
|
eq({ 2, 0 }, funcs.nvim_win_get_cursor(0))
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
it('fix the cursor to the valid row if the content was removed', function()
|
||||||
|
funcs.nvim_win_set_cursor(0, { 2, 6 })
|
||||||
|
local edits = {
|
||||||
|
make_edit(1, 0, 1, 6, ''),
|
||||||
|
make_edit(0, 18, 5, 0, '')
|
||||||
|
}
|
||||||
|
exec_lua('vim.lsp.util.apply_text_edits(...)', edits, 1)
|
||||||
|
eq({
|
||||||
|
'First line of text';
|
||||||
|
}, buf_lines(1))
|
||||||
|
eq({ 1, 6 }, funcs.nvim_win_get_cursor(0))
|
||||||
|
end)
|
||||||
|
|
||||||
it('fix the cursor row', function()
|
it('fix the cursor row', function()
|
||||||
funcs.nvim_win_set_cursor(0, { 3, 0 })
|
funcs.nvim_win_set_cursor(0, { 3, 0 })
|
||||||
local edits = {
|
local edits = {
|
||||||
|
Loading…
Reference in New Issue
Block a user