diff options
author | A-Walrus | 2023-06-13 14:04:11 +0000 |
---|---|---|
committer | GitHub | 2023-06-13 14:04:11 +0000 |
commit | a4a86120e8f46eccdb318828069c7c439bfb876f (patch) | |
tree | 1db2a81e62714f34670db049d4bc51f6f63b1d62 /helix-core/src/movement.rs | |
parent | d249639114a648c87c231b00fdeeadb0ffad7c8d (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.rs | 6 |
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(); |