diff options
-rw-r--r-- | runtime/lua/vim/lsp/util.lua | 2 | ||||
-rw-r--r-- | test/functional/plugin/lsp_spec.lua | 62 |
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() |