diff options
| author | glepnir <glephunter@gmail.com> | 2026-01-21 14:17:44 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-01-21 14:17:44 +0800 |
| commit | c556972ae10d0e61337dbc804a4a0af4e390f98e (patch) | |
| tree | ae7b685d70da00da5000aa74b9cb27f412f0b634 /test/functional/api/buffer_spec.lua | |
| parent | 2c2203c04005495b4a6272eb178a90ce06580e9d (diff) | |
| download | rneovim-c556972ae10d0e61337dbc804a4a0af4e390f98e.tar.gz rneovim-c556972ae10d0e61337dbc804a4a0af4e390f98e.tar.bz2 rneovim-c556972ae10d0e61337dbc804a4a0af4e390f98e.zip | |
fix(api): auto-load buffers in nvim_buf_set_* operations (#35046)
fix(api): auto-load buffers in nvim_buf_set_* operations
Problem: Setting marks, lines, or text on unloaded buffers fails because
ml_line_count is not accurate until the buffer is loaded.
Solution: Add require_loaded_buffer() helper and use it in write operations
(nvim_buf_set_lines, nvim_buf_set_text, nvim_buf_set_mark). These now
auto-load buffers as needed.
Diffstat (limited to 'test/functional/api/buffer_spec.lua')
| -rw-r--r-- | test/functional/api/buffer_spec.lua | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/test/functional/api/buffer_spec.lua b/test/functional/api/buffer_spec.lua index 6282bbccd8..a167e7ad11 100644 --- a/test/functional/api/buffer_spec.lua +++ b/test/functional/api/buffer_spec.lua @@ -863,6 +863,7 @@ describe('api/buf', function() local new_bufnr = fn.bufnr('set_lines', true) lua_or_rpc.nvim_buf_set_lines(new_bufnr, 0, -1, false, {}) eq({ '' }, lua_or_rpc.nvim_buf_get_lines(new_bufnr, 0, -1, false)) + eq(true, api.nvim_buf_is_loaded(new_bufnr)) end) end) @@ -1809,6 +1810,14 @@ describe('api/buf', function() eq({ 'one', 'two' }, get_lines(0, 2, true)) end) + it('auto-loads unloaded buffer', function() + local new_bufnr = fn.bufnr('set_text', true) + eq(false, api.nvim_buf_is_loaded(new_bufnr)) + api.nvim_buf_set_text(new_bufnr, 0, 0, 0, -1, { 'foo' }) + eq(true, api.nvim_buf_is_loaded(new_bufnr)) + eq({ 'foo' }, api.nvim_buf_get_lines(new_bufnr, 0, -1, false)) + end) + describe('handles topline', function() local screen before_each(function() @@ -2375,6 +2384,13 @@ describe('api/buf', function() it('fails when invalid buffer number is used', function() eq(false, pcall(api.nvim_buf_set_mark, 99, 'a', 1, 1, {})) end) + it('auto-loads unloaded buffer', function() + local new_bufnr = fn.bufnr('set_mark', true) + eq(false, api.nvim_buf_is_loaded(new_bufnr)) + eq(true, api.nvim_buf_set_mark(new_bufnr, 'A', 0, 0, {})) + eq(true, api.nvim_buf_is_loaded(new_bufnr)) + eq({ 0, 0 }, api.nvim_buf_get_mark(new_bufnr, 'A')) + end) end) describe('nvim_buf_del_mark', function() |