aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe-php-shim/src
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-08-16 20:20:15 +0900
committernsfisis <nsfisis@gmail.com>2026-08-16 20:20:15 +0900
commit1dfd1ae32b9b27573b9ee4439674091b792bcce0 (patch)
treed715462a35a4b5e59f828e2c18865a1b322e9abc /crates/shirabe-php-shim/src
parentb6604e1395f003748fe40a44e1190470632a40ce (diff)
downloadphp-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')
-rw-r--r--crates/shirabe-php-shim/src/preg.rs23
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> {