diff options
author | Gokul Soumya | 2021-06-22 03:47:44 +0000 |
---|---|---|
committer | Blaž Hrastnik | 2021-06-22 05:27:51 +0000 |
commit | 892c80771a4cbad79fcec89c0af8735c81c336e8 (patch) | |
tree | f7f03a0bda852309de3b254fa55c38f61cb1b2dc | |
parent | b00e9fc227dc2ab1070326f29fbe9626702dfa67 (diff) |
Correctly identify pairs when cursor on pair
-rw-r--r-- | helix-core/src/surround.rs | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/helix-core/src/surround.rs b/helix-core/src/surround.rs index a2703302..d7314609 100644 --- a/helix-core/src/surround.rs +++ b/helix-core/src/surround.rs @@ -39,8 +39,9 @@ pub fn find_nth_pairs_pos( n: usize, ) -> Option<(usize, usize)> { let (open, close) = get_pair(ch); - let open_pos = search::find_nth_prev(text, open, pos, n, true)?; - let close_pos = search::find_nth_next(text, close, pos, n, true)?; + // find_nth* do not consider current character; +1/-1 to include them + let open_pos = search::find_nth_prev(text, open, pos + 1, n, true)?; + let close_pos = search::find_nth_next(text, close, pos - 1, n, true)?; Some((open_pos, close_pos)) } @@ -86,7 +87,7 @@ mod test { // cursor on so[m]e assert_eq!(find_nth_pairs_pos(slice, '(', 2, 1), None); // cursor on bracket itself - // assert_eq!(find_nth_pairs_pos(slice, '(', 5, 1), Some((5, 10))); + assert_eq!(find_nth_pairs_pos(slice, '(', 5, 1), Some((5, 10))); } #[test] @@ -134,10 +135,8 @@ mod test { let doc = Rope::from("[some]\n(chars)xx\n(newline)"); let slice = doc.slice(..); - let selection = Selection::new( - SmallVec::from_slice(&[Range::point(2), Range::point(9)]), - 0, - ); + let selection = + Selection::new(SmallVec::from_slice(&[Range::point(2), Range::point(9)]), 0); // cursor on s[o]me, c[h]ars assert_eq!( @@ -152,7 +151,7 @@ mod test { // cursor on [x]x, newli[n]e assert_eq!( get_surround_pos(slice, &selection, '(', 1), - None // overlapping surround chars + None // overlapping surround chars ); } } |