From 31d45abf97827cc395923e14b3fa2ae095d61830 Mon Sep 17 00:00:00 2001 From: thomasschafer Date: Wed, 29 Jan 2025 10:50:47 +0000 Subject: [PATCH] Pull count out of FindType --- helix-core/src/surround.rs | 28 ++++++++++++++++------------ helix-core/src/textobject.rs | 12 +++++++----- helix-term/src/commands.rs | 4 ++-- 3 files changed, 25 insertions(+), 19 deletions(-) diff --git a/helix-core/src/surround.rs b/helix-core/src/surround.rs index c0a40b51a..bcbcce38b 100644 --- a/helix-core/src/surround.rs +++ b/helix-core/src/surround.rs @@ -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) ) diff --git a/helix-core/src/textobject.rs b/helix-core/src/textobject.rs index ec0f76c07..3c4ba635d 100644 --- a/helix-core/src/textobject.rs +++ b/helix-core/src/textobject.rs @@ -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, diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs index 7aba935d3..a6e311742 100644 --- a/helix-term/src/commands.rs +++ b/helix-term/src/commands.rs @@ -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);