commit d09957e0a06f350443c750d9838b5f1016c0cccc
parent a376d979bda103fa9998d05c3cc4ba56d3c3cece
Author: Tomasz N <przepompownia@users.noreply.github.com>
Date: Wed, 14 Feb 2024 21:11:29 +0100
fix(lsp): rename: load and list new buffer if attached to window (#27408)
Diffstat:
2 files changed, 64 insertions(+), 0 deletions(-)
diff --git a/runtime/lua/vim/lsp/util.lua b/runtime/lua/vim/lsp/util.lua
@@ -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
diff --git a/test/functional/plugin/lsp_spec.lua b/test/functional/plugin/lsp_spec.lua
@@ -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()