mirror of https://github.com/helix-editor/helix
Pull count out of FindType
parent
3bb88d88c4
commit
31d45abf97
|
@ -155,9 +155,9 @@ fn find_nth_closest_pairs_plain(
|
|||
}
|
||||
|
||||
pub enum FindType {
|
||||
Surround(usize),
|
||||
Next(usize),
|
||||
Prev(usize),
|
||||
Surround,
|
||||
Next,
|
||||
Prev,
|
||||
}
|
||||
|
||||
/// Find the position of surround pairs of `ch` which can be either a closing
|
||||
|
@ -168,6 +168,7 @@ pub fn find_nth_pairs_pos(
|
|||
ch: char,
|
||||
range: Range,
|
||||
find_type: FindType,
|
||||
n: usize,
|
||||
) -> Result<(usize, usize)> {
|
||||
if text.len_chars() < 2 {
|
||||
return Err(Error::PairNotFound);
|
||||
|
@ -179,12 +180,12 @@ pub fn find_nth_pairs_pos(
|
|||
let (open, close) = get_pair(ch);
|
||||
let pos = range.cursor(text);
|
||||
let (pos, n) = match find_type {
|
||||
FindType::Surround(n) => (pos, n),
|
||||
FindType::Next(n) => match search::find_nth_next(text, open, pos, n) {
|
||||
FindType::Surround => (pos, n),
|
||||
FindType::Next => match search::find_nth_next(text, open, pos, n) {
|
||||
Some(next_pos) => (next_pos + 1, 1),
|
||||
None => return Err(Error::PairNotFound),
|
||||
},
|
||||
FindType::Prev(n) => match search::find_nth_prev(text, close, pos, n) {
|
||||
FindType::Prev => match search::find_nth_prev(text, close, pos, n) {
|
||||
Some(next_pos) => (next_pos - 1, 1),
|
||||
None => return Err(Error::PairNotFound),
|
||||
},
|
||||
|
@ -315,7 +316,7 @@ pub fn get_surround_pos(
|
|||
for &range in selection {
|
||||
let (open_pos, close_pos) = {
|
||||
let range_raw = match ch {
|
||||
Some(ch) => find_nth_pairs_pos(text, ch, range, FindType::Surround(skip))?,
|
||||
Some(ch) => find_nth_pairs_pos(text, ch, range, FindType::Surround, skip)?,
|
||||
None => find_nth_closest_pairs_pos(syntax, text, range, skip)?,
|
||||
};
|
||||
let range = Range::new(range_raw.0, range_raw.1);
|
||||
|
@ -413,7 +414,8 @@ mod test {
|
|||
doc.slice(..),
|
||||
'\'',
|
||||
selection.primary(),
|
||||
FindType::Surround(1)
|
||||
FindType::Surround,
|
||||
1
|
||||
)
|
||||
.expect("find should succeed"),
|
||||
(expectations[0], expectations[1])
|
||||
|
@ -435,7 +437,8 @@ mod test {
|
|||
doc.slice(..),
|
||||
'\'',
|
||||
selection.primary(),
|
||||
FindType::Surround(2)
|
||||
FindType::Surround,
|
||||
2
|
||||
)
|
||||
.expect("find should succeed"),
|
||||
(expectations[0], expectations[1])
|
||||
|
@ -453,7 +456,7 @@ mod test {
|
|||
|
||||
assert_eq!(2, expectations.len());
|
||||
assert_eq!(
|
||||
find_nth_pairs_pos(doc.slice(..), '\'', selection.primary(), FindType::Next(3))
|
||||
find_nth_pairs_pos(doc.slice(..), '\'', selection.primary(), FindType::Next, 3)
|
||||
.expect("find should succeed"),
|
||||
(expectations[0], expectations[1])
|
||||
)
|
||||
|
@ -470,7 +473,7 @@ mod test {
|
|||
|
||||
assert_eq!(2, expectations.len());
|
||||
assert_eq!(
|
||||
find_nth_pairs_pos(doc.slice(..), '\'', selection.primary(), FindType::Prev(1))
|
||||
find_nth_pairs_pos(doc.slice(..), '\'', selection.primary(), FindType::Prev, 1)
|
||||
.expect("find should succeed"),
|
||||
(expectations[0], expectations[1])
|
||||
)
|
||||
|
@ -490,7 +493,8 @@ mod test {
|
|||
doc.slice(..),
|
||||
'\'',
|
||||
selection.primary(),
|
||||
FindType::Surround(1)
|
||||
FindType::Surround,
|
||||
1
|
||||
),
|
||||
Err(Error::CursorOnAmbiguousPair)
|
||||
)
|
||||
|
|
|
@ -206,13 +206,14 @@ pub fn textobject_pair_surround(
|
|||
textobject: TextObject,
|
||||
ch: char,
|
||||
find_type: FindType,
|
||||
count: usize,
|
||||
) -> Range {
|
||||
textobject_pair_surround_impl(
|
||||
syntax,
|
||||
slice,
|
||||
range,
|
||||
textobject,
|
||||
FindVariant::Char((ch, find_type)),
|
||||
FindVariant::Char((ch, find_type, count)),
|
||||
)
|
||||
}
|
||||
|
||||
|
@ -233,7 +234,7 @@ pub fn textobject_pair_surround_closest(
|
|||
}
|
||||
|
||||
enum FindVariant {
|
||||
Char((char, FindType)),
|
||||
Char((char, FindType, usize)),
|
||||
Closest(usize),
|
||||
}
|
||||
|
||||
|
@ -245,8 +246,8 @@ fn textobject_pair_surround_impl(
|
|||
find_variant: FindVariant,
|
||||
) -> Range {
|
||||
let pair_pos = match find_variant {
|
||||
FindVariant::Char((ch, find_type)) => {
|
||||
surround::find_nth_pairs_pos(slice, ch, range, find_type)
|
||||
FindVariant::Char((ch, find_type, count)) => {
|
||||
surround::find_nth_pairs_pos(slice, ch, range, find_type, count)
|
||||
}
|
||||
FindVariant::Closest(count) => {
|
||||
surround::find_nth_closest_pairs_pos(syntax, slice, range, count)
|
||||
|
@ -603,7 +604,8 @@ mod test {
|
|||
Range::point(pos),
|
||||
objtype,
|
||||
ch,
|
||||
FindType::Surround(count),
|
||||
FindType::Surround,
|
||||
count,
|
||||
);
|
||||
assert_eq!(
|
||||
result,
|
||||
|
|
|
@ -6148,9 +6148,9 @@ fn textobject_surrounding_pair(
|
|||
None => FindType::Surround,
|
||||
Some(Direction::Forward) => FindType::Next,
|
||||
Some(Direction::Backward) => FindType::Prev,
|
||||
}(count);
|
||||
};
|
||||
let mut range = textobject::textobject_pair_surround(
|
||||
syntax, text, range, textobject, pair_char, find_type,
|
||||
syntax, text, range, textobject, pair_char, find_type, count,
|
||||
);
|
||||
if let Some(direction) = direction {
|
||||
range = range.with_direction(direction);
|
||||
|
|
Loading…
Reference in New Issue