From 1dfd1ae32b9b27573b9ee4439674091b792bcce0 Mon Sep 17 00:00:00 2001 From: nsfisis Date: Sun, 16 Aug 2026 20:20:15 +0900 Subject: 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. --- crates/shirabe-php-shim/src/preg.rs | 23 ++++++++--------------- 1 file changed, 8 insertions(+), 15 deletions(-) (limited to 'crates/shirabe-php-shim/src/preg.rs') 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 { - 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 { +pub fn preg_grep>( + pattern: impl PregPattern, + array: impl IntoIterator, +) -> impl Iterator { 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 { -- cgit v1.3.1-4-g156e