aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomasz N <przepompownia@users.noreply.github.com>2024-02-14 21:11:29 +0100
committerGitHub <noreply@github.com>2024-02-14 21:11:29 +0100
commitd09957e0a06f350443c750d9838b5f1016c0cccc (patch)
tree9edcf45b3733c66ea838e96968167d36a59d1eb5
parenta376d979bda103fa9998d05c3cc4ba56d3c3cece (diff)
downloadrneovim-d09957e0a06f350443c750d9838b5f1016c0cccc.tar.gz
rneovim-d09957e0a06f350443c750d9838b5f1016c0cccc.tar.bz2
rneovim-d09957e0a06f350443c750d9838b5f1016c0cccc.zip
fix(lsp): rename: load and list new buffer if attached to window (#27408)
-rw-r--r--runtime/lua/vim/lsp/util.lua2
-rw-r--r--test/functional/plugin/lsp_spec.lua62
2 files changed, 64 insertions, 0 deletions
diff --git a/runtime/lua/vim/lsp/util.lua b/runtime/lua/vim/lsp/util.lua
index 86bef1ac8a..4abc58ee3c 100644
--- 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
index 341ad014a6..be9a8342ff 100644
--- 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()