fix(lsp): rename: load and list new buffer if attached to window (#27408)

This commit is contained in:
Tomasz N 2024-02-14 21:11:29 +01:00 committed by GitHub
parent a376d979bd
commit d09957e0a0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 64 additions and 0 deletions

View File

@ -702,6 +702,8 @@ function M.rename(old_fname, new_fname, opts)
if vim.fn.isdirectory(new_fname) == 0 then
local newbuf = vim.fn.bufadd(new_fname)
if win then
vim.fn.bufload(newbuf)
vim.bo[newbuf].buflisted = true
api.nvim_win_set_buf(win, newbuf)
end
end

View File

@ -2419,6 +2419,68 @@ describe('LSP', function()
eq(0, lines)
os.remove(new)
end)
it('new buffer remains unlisted and unloaded if the old was not in window before', function()
local old = tmpname()
write_file(old, 'Test content')
local new = tmpname()
os.remove(new) -- only reserve the name, file must not exist for the test scenario
local actual = exec_lua(
[[
local old = select(1, ...)
local oldbufnr = vim.fn.bufadd(old)
local new = select(2, ...)
local newbufnr = vim.fn.bufadd(new)
vim.lsp.util.rename(old, new)
return {
buflisted = vim.bo[newbufnr].buflisted,
bufloaded = vim.api.nvim_buf_is_loaded(newbufnr)
}
]],
old,
new
)
local expected = {
buflisted = false,
bufloaded = false,
}
eq(expected, actual)
os.remove(new)
end)
it('new buffer is listed and loaded if the old was in window before', function()
local old = tmpname()
write_file(old, 'Test content')
local new = tmpname()
os.remove(new) -- only reserve the name, file must not exist for the test scenario
local actual = exec_lua(
[[
local win = vim.api.nvim_get_current_win()
local old = select(1, ...)
local oldbufnr = vim.fn.bufadd(old)
vim.api.nvim_win_set_buf(win, oldbufnr)
local new = select(2, ...)
vim.lsp.util.rename(old, new)
local newbufnr = vim.fn.bufadd(new)
return {
buflisted = vim.bo[newbufnr].buflisted,
bufloaded = vim.api.nvim_buf_is_loaded(newbufnr)
}
]],
old,
new
)
local expected = {
buflisted = true,
bufloaded = true,
}
eq(expected, actual)
os.remove(new)
end)
it('Can rename a directory', function()
-- only reserve the name, file must not exist for the test scenario
local old_dir = tmpname()