on master help sign in
Fix next/prev tree-sitter inconsistency (#7332)

* Fix next/prev tree-sitter inconsistency Before there where different results going to next or previous due to sorting not dealing with multiple captures that start/end at the same pos. I chose to prefer longer matches. * Revert unnecessary change

commita4a86120e8f46eccdb318828069c7c439bfb876f authorA-Walrus <58790821+A-Walrus@users.noreply.github.com> dateTue 13 Jun 2023, 17:04 (3 years ago) parentd249639
1 file changed+3−3
helix-core/src/movement.rs+3−3
helix-core/src/movement.rs+3−3
@@ -1,4 +1,4 @@
1−use std::iter;
1+use std::{cmp::Reverse, iter};
22
33use ropey::iter::Chars;
44use tree_sitter::{Node, QueryCursor};
@@ -527,10 +527,10 @@ pub fn goto_treesitter_object(
527527 let node = match dir {
528528 Direction::Forward => nodes
529529 .filter(|n| n.start_byte() > byte_pos)
530− .min_by_key(|n| n.start_byte())?,
530+ .min_by_key(|n| (n.start_byte(), Reverse(n.end_byte())))?,
531531 Direction::Backward => nodes
532532 .filter(|n| n.end_byte() < byte_pos)
533− .max_by_key(|n| n.end_byte())?,
533+ .max_by_key(|n| (n.end_byte(), Reverse(n.start_byte())))?,
534534 };
535535
536536 let len = slice.len_bytes();