diff options
author | Gregory Anders <8965202+gpanders@users.noreply.github.com> | 2022-02-23 15:19:47 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-02-23 22:19:47 +0000 |
commit | 15004473b531e37a6ff3aeca9e3bfeaaa1487d9e (patch) | |
tree | e83bf4ff2cb57bd83733f8b157c3a9f7d7c5e829 /test/functional/api/buffer_spec.lua | |
parent | c07b5b5de6af5c85dd903c2cbb617d2a54153b44 (diff) | |
download | rneovim-15004473b531e37a6ff3aeca9e3bfeaaa1487d9e.tar.gz rneovim-15004473b531e37a6ff3aeca9e3bfeaaa1487d9e.tar.bz2 rneovim-15004473b531e37a6ff3aeca9e3bfeaaa1487d9e.zip |
fix(api)!: correctly handle negative line numbers for nvim_buf_set_text (#17498)
nvim_buf_set_text does not handle negative row numbers correctly: for
example,
nvim_buf_set_text(0, -2, 0, -1, 20, {"Hello", "world"})
should replace the 2nd to last line in the buffer with "Hello" and the
first 20 characters of the last line with "world". Instead, it reports
"start_row out of bounds". This happens because when negative line
numbers are used, they are incremented by one additional number to make
the non-negative line numbers end-exclusive. However, the line numbers
for nvim_buf_set_text should be end-inclusive.
In #15181 we handled this for nvim_buf_get_text by adding a new
parameter to `normalize_index`. We can solve the problem with
nvim_buf_set_text by simply availing ourselves of this new argument.
This is a breaking change, but makes the semantics of negative line
numbers much clearer and more obvious (as well as matching
nvim_buf_get_text).
BREAKING CHANGE: Existing usages of nvim_buf_set_text that use negative
line numbers will be off-by-one.
Diffstat (limited to 'test/functional/api/buffer_spec.lua')
-rw-r--r-- | test/functional/api/buffer_spec.lua | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/test/functional/api/buffer_spec.lua b/test/functional/api/buffer_spec.lua index dac3324a0f..dd3af8c28f 100644 --- a/test/functional/api/buffer_spec.lua +++ b/test/functional/api/buffer_spec.lua @@ -423,6 +423,13 @@ describe('api/buf', function() -- will join multiple lines if needed set_text(0, 6, 3, 4, {'bar'}) eq({'hello bar'}, get_lines(0, 1, true)) + + -- can use negative line numbers + set_text(-2, 0, -2, 5, {'goodbye'}) + eq({'goodbye bar', ''}, get_lines(0, -1, true)) + + set_text(-1, 0, -1, 0, {'text'}) + eq({'goodbye bar', 'text'}, get_lines(0, 2, true)) end) it('works with undo', function() |