From 0caac63bacefb9a1f62848636d47fca07f592bba Mon Sep 17 00:00:00 2001 From: nsfisis Date: Tue, 18 Aug 2026 01:57:02 +0900 Subject: refactor(preg): split PregMatches reads into get() and name() PregMatches keyed both forms of a capture group through CaptureKey, so every read built one: a usize wrapped in an enum, or worse, a String allocated to name a group that regex::Captures can look up from a &str. It now mirrors regex::Captures instead -- get() takes the group number, name() the group name -- and the enum drops out of the type entirely. That is 285 call sites across 59 files, and the named ones carry most of the win: `matches.get(&CaptureKey::ByName("host".to_string()))` reads as `matches.name("host")`. ProcessExecutor loses a `user_key` binding that existed only to build the key once. CaptureKey stays as the key type of PregMatchesAll and PregMatchesAllWithOffsets, where numbered and named entries share one IndexMap and a key type is the point. Five files still name it. Also retargets the two preg_match_all comments that described the occurrence count through `matches[&CaptureKey::ByIndex(0)].len()`, an Index impl these types no longer carry. Co-Authored-By: Claude Opus 5 (1M context) --- .../src/input/string_input.rs | 24 +++++++++------------- 1 file changed, 10 insertions(+), 14 deletions(-) (limited to 'crates/shirabe-symfony-console/src/input/string_input.rs') diff --git a/crates/shirabe-symfony-console/src/input/string_input.rs b/crates/shirabe-symfony-console/src/input/string_input.rs index 0dcc1a9d..1b14a2aa 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, php_regex, preg_match2}; +use shirabe_php_shim::{PhpMixed, php_regex, preg_match2}; /// StringInput represents an input provided as a string. /// @@ -61,27 +61,23 @@ impl StringInput { if token.is_some() { tokens.push(token.take().unwrap()); } - cursor += shirabe_php_shim::strlen(m.get(&CaptureKey::ByIndex(0)).unwrap_or("")); + cursor += shirabe_php_shim::strlen(m.get(0).unwrap_or("")); } else if let Some(m) = preg_match2( format!(r#"/([^="'\s]+?)(=?)({}+)/A"#, Self::REGEX_QUOTED_STRING), input, cursor as usize, ) { - let inner = shirabe_php_shim::substr( - m.get(&CaptureKey::ByIndex(3)).unwrap_or(""), - 1, - Some(-1), - ); + let inner = shirabe_php_shim::substr(m.get(3).unwrap_or(""), 1, Some(-1)); let replaced = shirabe_php_shim::str_replace_arr(&["\"'", "'\"", "''", "\"\""], "", &inner); token = Some(format!( "{}{}{}{}", token.unwrap_or_default(), - m.get(&CaptureKey::ByIndex(1)).unwrap_or(""), - m.get(&CaptureKey::ByIndex(2)).unwrap_or(""), + m.get(1).unwrap_or(""), + m.get(2).unwrap_or(""), shirabe_php_shim::stripcslashes(&replaced) )); - cursor += shirabe_php_shim::strlen(m.get(&CaptureKey::ByIndex(0)).unwrap_or("")); + cursor += shirabe_php_shim::strlen(m.get(0).unwrap_or("")); } else if let Some(m) = preg_match2( format!(r"/{}/A", Self::REGEX_QUOTED_STRING), input, @@ -91,12 +87,12 @@ impl StringInput { "{}{}", token.unwrap_or_default(), shirabe_php_shim::stripcslashes(&shirabe_php_shim::substr( - m.get(&CaptureKey::ByIndex(0)).unwrap_or(""), + m.get(0).unwrap_or(""), 1, Some(-1) )) )); - cursor += shirabe_php_shim::strlen(m.get(&CaptureKey::ByIndex(0)).unwrap_or("")); + cursor += shirabe_php_shim::strlen(m.get(0).unwrap_or("")); } else if let Some(m) = preg_match2( format!(r"/{}/A", Self::REGEX_UNQUOTED_STRING), input, @@ -105,9 +101,9 @@ impl StringInput { token = Some(format!( "{}{}", token.unwrap_or_default(), - m.get(&CaptureKey::ByIndex(1)).unwrap_or("") + m.get(1).unwrap_or("") )); - cursor += shirabe_php_shim::strlen(m.get(&CaptureKey::ByIndex(0)).unwrap_or("")); + cursor += shirabe_php_shim::strlen(m.get(0).unwrap_or("")); } else { // should never happen return Err(InvalidArgumentException::new(format!( -- cgit v1.3.1-4-g156e