diff options
author | Tomasz N <przepompownia@users.noreply.github.com> | 2024-02-14 21:11:29 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-02-14 21:11:29 +0100 |
commit | d09957e0a06f350443c750d9838b5f1016c0cccc (patch) | |
tree | 9edcf45b3733c66ea838e96968167d36a59d1eb5 | |
parent | a376d979bda103fa9998d05c3cc4ba56d3c3cece (diff) | |
download | rneovim-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.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() |