summaryrefslogtreecommitdiff
path: root/helix-core/src/movement.rs
diff options
context:
space:
mode:
authorA-Walrus2023-06-13 14:04:11 +0000
committerGitHub2023-06-13 14:04:11 +0000
commita4a86120e8f46eccdb318828069c7c439bfb876f (patch)
tree1db2a81e62714f34670db049d4bc51f6f63b1d62 /helix-core/src/movement.rs
parentd249639114a648c87c231b00fdeeadb0ffad7c8d (diff)
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
Diffstat (limited to 'helix-core/src/movement.rs')
-rw-r--r--helix-core/src/movement.rs6
1 files changed, 3 insertions, 3 deletions
diff --git a/helix-core/src/movement.rs b/helix-core/src/movement.rs
index 003a1f37..2b29f36d 100644
--- a/helix-core/src/movement.rs
+++ b/helix-core/src/movement.rs
@@ -1,4 +1,4 @@
-use std::iter;
+use std::{cmp::Reverse, iter};
use ropey::iter::Chars;
use tree_sitter::{Node, QueryCursor};
@@ -527,10 +527,10 @@ pub fn goto_treesitter_object(
let node = match dir {
Direction::Forward => nodes
.filter(|n| n.start_byte() > byte_pos)
- .min_by_key(|n| n.start_byte())?,
+ .min_by_key(|n| (n.start_byte(), Reverse(n.end_byte())))?,
Direction::Backward => nodes
.filter(|n| n.end_byte() < byte_pos)
- .max_by_key(|n| n.end_byte())?,
+ .max_by_key(|n| (n.end_byte(), Reverse(n.start_byte())))?,
};
let len = slice.len_bytes();