@@ -39,8 +39,9 @@ pub fn find_nth_pairs_pos(
3939 n: usize,
4040) -> Option<(usize, usize)> {
4141 let (open, close) = get_pair(ch);
42− let open_pos = search::find_nth_prev(text, open, pos, n, true)?;
43− let close_pos = search::find_nth_next(text, close, pos, n, true)?;
42+ // find_nth* do not consider current character; +1/-1 to include them
43+ let open_pos = search::find_nth_prev(text, open, pos + 1, n, true)?;
44+ let close_pos = search::find_nth_next(text, close, pos - 1, n, true)?;
4445
4546 Some((open_pos, close_pos))
4647}
@@ -86,7 +87,7 @@ mod test {
8687 // cursor on so[m]e
8788 assert_eq!(find_nth_pairs_pos(slice, '(', 2, 1), None);
8889 // cursor on bracket itself
89− // assert_eq!(find_nth_pairs_pos(slice, '(', 5, 1), Some((5, 10)));
90+ assert_eq!(find_nth_pairs_pos(slice, '(', 5, 1), Some((5, 10)));
9091 }
9192
9293 #[test]
@@ -134,10 +135,8 @@ mod test {
134135 let doc = Rope::from("[some]\n(chars)xx\n(newline)");
135136 let slice = doc.slice(..);
136137
137− let selection = Selection::new(
138− SmallVec::from_slice(&[Range::point(2), Range::point(9)]),
139− 0,
140− );
138+ let selection =
139+ Selection::new(SmallVec::from_slice(&[Range::point(2), Range::point(9)]), 0);
141140
142141 // cursor on s[o]me, c[h]ars
143142 assert_eq!(
@@ -152,7 +151,7 @@ mod test {
152151 // cursor on [x]x, newli[n]e
153152 assert_eq!(
154153 get_surround_pos(slice, &selection, '(', 1),
155− None // overlapping surround chars
154+ None // overlapping surround chars
156155 );
157156 }
158157}