diff options
-rw-r--r-- | src/nvim/marktree.c | 2 | ||||
-rw-r--r-- | test/unit/marktree_spec.lua | 7 |
2 files changed, 8 insertions, 1 deletions
diff --git a/src/nvim/marktree.c b/src/nvim/marktree.c index 9fcdf78be3..9da7503524 100644 --- a/src/nvim/marktree.c +++ b/src/nvim/marktree.c @@ -1419,7 +1419,7 @@ bool marktree_itr_get_ext(MarkTree *b, MTPos p, MarkTreeIter *itr, bool last, bo return marktree_itr_prev(b, itr); } else if (itr->i >= itr->x->n) { // no need for "meta_filter" here, this just goes up one step - return marktree_itr_next(b, itr); + return marktree_itr_next_skip(b, itr, true, false, NULL, NULL); } return true; } diff --git a/test/unit/marktree_spec.lua b/test/unit/marktree_spec.lua index 676190a440..b0a861727d 100644 --- a/test/unit/marktree_spec.lua +++ b/test/unit/marktree_spec.lua @@ -602,6 +602,13 @@ describe('marktree', function() until not lib.marktree_itr_next_filter(tree, iter, 101, 0, filter) eq(tablelength(seen), tablelength(shadow)) + -- test skipping subtrees to find the filtered mark at line 50 + for i = 4, 50 do + ok(lib.marktree_itr_get_filter(tree, i, 0, 60, 0, filter, iter)) + local mark = lib.marktree_itr_current(iter) + eq({ 50, 50, 1 }, { mark.id, mark.pos.row, mark.pos.col }) + end + -- delete for id = 1, 10000, 2 do lib.marktree_lookup_ns(tree, ns, id, false, iter) |