diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-08-16 20:20:15 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-08-16 20:20:15 +0900 |
| commit | 1dfd1ae32b9b27573b9ee4439674091b792bcce0 (patch) | |
| tree | d715462a35a4b5e59f828e2c18865a1b322e9abc /crates/shirabe-php-shim/src/preg.rs | |
| parent | b6604e1395f003748fe40a44e1190470632a40ce (diff) | |
| download | php-shirabe-1dfd1ae32b9b27573b9ee4439674091b792bcce0.tar.gz php-shirabe-1dfd1ae32b9b27573b9ee4439674091b792bcce0.tar.zst php-shirabe-1dfd1ae32b9b27573b9ee4439674091b792bcce0.zip | |
refactor(preg): make preg_grep() return an iterator
Callers had to build a temporary Vec<&str> at every call site to satisfy
the &[&str] parameter. Taking IntoIterator and yielding the matched items
lets them pass owned or borrowed strings directly.
The flags variant and PREG_GREP_INVERT go away with it: no caller passes
flags, and Composer's Preg::grep() has no such parameter either.
Diffstat (limited to 'crates/shirabe-php-shim/src/preg.rs')
| -rw-r--r-- | crates/shirabe-php-shim/src/preg.rs | 23 |
1 files changed, 8 insertions, 15 deletions
diff --git a/crates/shirabe-php-shim/src/preg.rs b/crates/shirabe-php-shim/src/preg.rs index 637e969d..727fc149 100644 --- a/crates/shirabe-php-shim/src/preg.rs +++ b/crates/shirabe-php-shim/src/preg.rs @@ -8,7 +8,6 @@ pub const PREG_UNMATCHED_AS_NULL: i64 = 512; pub const PREG_SPLIT_NO_EMPTY: i64 = 1; pub const PREG_SPLIT_DELIM_CAPTURE: i64 = 2; pub const PREG_SPLIT_OFFSET_CAPTURE: i64 = 4; -pub const PREG_GREP_INVERT: i64 = 1; #[derive(Debug, Clone, PartialOrd, Ord, PartialEq, Eq, Hash)] pub enum CaptureKey { @@ -242,21 +241,15 @@ pub fn preg_match_all_offset_capture2( count } -pub fn preg_grep(pattern: impl PregPattern, input: &[String]) -> Vec<String> { - let __resolved = pattern.resolve(); - let (re, _anchored) = __resolved.parts(); - input.iter().filter(|s| re.is_match(s)).cloned().collect() -} - -pub fn preg_grep2(pattern: impl PregPattern, array: &[&str], flags: i64) -> Vec<String> { +pub fn preg_grep<T: AsRef<str>>( + pattern: impl PregPattern, + array: impl IntoIterator<Item = T>, +) -> impl Iterator<Item = T> { let __resolved = pattern.resolve(); - let (re, _anchored) = __resolved.parts(); - let invert = flags & PREG_GREP_INVERT != 0; - array - .iter() - .filter(|s| re.is_match(s) != invert) - .map(|s| s.to_string()) - .collect() + array.into_iter().filter(move |s| { + let (re, _anchored) = __resolved.parts(); + re.is_match(s.as_ref()) + }) } pub fn preg_split(pattern: impl PregPattern, subject: &str) -> Vec<String> { |
