diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-08-17 07:36:34 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-08-17 07:36:34 +0900 |
| commit | 9fd6aecad27240ccedab4487f6c157914142ca47 (patch) | |
| tree | 3819360771b9eb9298315e26604cafabeae84e04 /crates/shirabe-symfony-console/src/input | |
| parent | 6b4ce98f20b3cfc14f1c955565a8acd9abcc16a2 (diff) | |
| download | php-shirabe-9fd6aecad27240ccedab4487f6c157914142ca47.tar.gz php-shirabe-9fd6aecad27240ccedab4487f6c157914142ca47.tar.zst php-shirabe-9fd6aecad27240ccedab4487f6c157914142ca47.zip | |
refactor(preg): return the preg_* $matches instead of filling an out-param
PHP fills `$matches` through a by-ref parameter, which the port mirrored
with a `&mut` out-param plus a bool or count return. Every caller then
had to declare an empty binding one line ahead of the call, and nothing
in the type said the binding is only meaningful when the call succeeded.
Return the matches instead: preg_match() and preg_match2() hand back an
Option, and the three preg_match_all* functions hand back the collection
they used to fill.
The occurrence count the two map-shaped preg_match_all* functions used
to return is the length of any one of the map's columns, so it is not
lost -- Preg::match_all() and friends derive it via occurrence_count().
preg_replace2() keeps its `count: Option<&mut usize>`: that one is not
derivable from the replaced string, and callers that do not want it pay
nothing for passing None.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe-symfony-console/src/input')
| -rw-r--r-- | crates/shirabe-symfony-console/src/input/argv_input.rs | 3 | ||||
| -rw-r--r-- | crates/shirabe-symfony-console/src/input/input.rs | 3 | ||||
| -rw-r--r-- | crates/shirabe-symfony-console/src/input/string_input.rs | 14 |
3 files changed, 7 insertions, 13 deletions
diff --git a/crates/shirabe-symfony-console/src/input/argv_input.rs b/crates/shirabe-symfony-console/src/input/argv_input.rs index b2b663a6..81582408 100644 --- a/crates/shirabe-symfony-console/src/input/argv_input.rs +++ b/crates/shirabe-symfony-console/src/input/argv_input.rs @@ -523,8 +523,7 @@ impl std::fmt::Display for ArgvInput { .tokens .iter() .map(|token| { - let mut r#match: Vec<Option<String>> = Vec::new(); - if preg_match(php_regex!("{^(-[^=]+=)(.+)}"), token, &mut r#match) { + if let Some(r#match) = preg_match(php_regex!("{^(-[^=]+=)(.+)}"), token) { return format!( "{}{}", r#match[1].as_deref().unwrap_or(""), diff --git a/crates/shirabe-symfony-console/src/input/input.rs b/crates/shirabe-symfony-console/src/input/input.rs index 89eedb03..4712a713 100644 --- a/crates/shirabe-symfony-console/src/input/input.rs +++ b/crates/shirabe-symfony-console/src/input/input.rs @@ -207,8 +207,7 @@ impl Input { /// Escapes a token through escapeshellarg if it contains unsafe chars. pub fn escape_token(&self, token: &str) -> String { - let mut matches: Vec<Option<String>> = vec![]; - if preg_match(php_regex!("{^[\\w-]+$}"), token, &mut matches) { + if preg_match(php_regex!("{^[\\w-]+$}"), token).is_some() { token.to_string() } else { shirabe_php_shim::escapeshellarg(token) diff --git a/crates/shirabe-symfony-console/src/input/string_input.rs b/crates/shirabe-symfony-console/src/input/string_input.rs index 245b948d..b0c3b159 100644 --- a/crates/shirabe-symfony-console/src/input/string_input.rs +++ b/crates/shirabe-symfony-console/src/input/string_input.rs @@ -6,7 +6,7 @@ use crate::input::InputDefinition; use crate::input::InputInterface; use crate::input::StreamableInputInterface; use indexmap::IndexMap; -use shirabe_php_shim::{CaptureKey, PhpMixed, PregMatches, php_regex, preg_match2}; +use shirabe_php_shim::{CaptureKey, PhpMixed, php_regex, preg_match2}; /// StringInput represents an input provided as a string. /// @@ -57,17 +57,15 @@ impl StringInput { continue; } - let mut m = PregMatches::new(); - if preg_match2(php_regex!(r"/\s+/A"), input, &mut m, cursor as usize) { + if let Some(m) = preg_match2(php_regex!(r"/\s+/A"), input, cursor as usize) { if token.is_some() { tokens.push(token.take().unwrap()); } cursor += shirabe_php_shim::strlen(m[&CaptureKey::ByIndex(0)].as_deref().unwrap_or("")); - } else if preg_match2( + } else if let Some(m) = preg_match2( format!(r#"/([^="'\s]+?)(=?)({}+)/A"#, Self::REGEX_QUOTED_STRING), input, - &mut m, cursor as usize, ) { let inner = shirabe_php_shim::substr( @@ -86,10 +84,9 @@ impl StringInput { )); cursor += shirabe_php_shim::strlen(m[&CaptureKey::ByIndex(0)].as_deref().unwrap_or("")); - } else if preg_match2( + } else if let Some(m) = preg_match2( format!(r"/{}/A", Self::REGEX_QUOTED_STRING), input, - &mut m, cursor as usize, ) { token = Some(format!( @@ -103,10 +100,9 @@ impl StringInput { )); cursor += shirabe_php_shim::strlen(m[&CaptureKey::ByIndex(0)].as_deref().unwrap_or("")); - } else if preg_match2( + } else if let Some(m) = preg_match2( format!(r"/{}/A", Self::REGEX_UNQUOTED_STRING), input, - &mut m, cursor as usize, ) { token = Some(format!( |
