aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe-symfony-process/src
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-08-18 01:56:31 +0900
committernsfisis <nsfisis@gmail.com>2026-08-18 01:56:32 +0900
commit5114a8199a87c9e5584d92848e95deba22b73e98 (patch)
tree596b422e5a37ad72e522978b6d456c0ff686d1cc /crates/shirabe-symfony-process/src
parent79b504e55cd4c4d1da102c3a076dc2a2e1edcd65 (diff)
downloadphp-shirabe-5114a8199a87c9e5584d92848e95deba22b73e98.tar.gz
php-shirabe-5114a8199a87c9e5584d92848e95deba22b73e98.tar.zst
php-shirabe-5114a8199a87c9e5584d92848e95deba22b73e98.zip
refactor(preg): back PregMatches with regex::Captures
PregMatches was an IndexMap of owned Strings copied out of the match, so every preg_match2/preg_replace_callback call allocated a String per capture group (twice over for a named group) whether or not the caller read it. It now wraps the regex::Captures itself, held alongside the pattern it came from so groups stay reachable by both their named and their numbered form, and hands out &str borrowed from the subject. The subject's lifetime becomes a parameter of the type. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe-symfony-process/src')
-rw-r--r--crates/shirabe-symfony-process/src/process.rs12
1 files changed, 7 insertions, 5 deletions
diff --git a/crates/shirabe-symfony-process/src/process.rs b/crates/shirabe-symfony-process/src/process.rs
index 96853e90..0f7d3814 100644
--- a/crates/shirabe-symfony-process/src/process.rs
+++ b/crates/shirabe-symfony-process/src/process.rs
@@ -939,8 +939,11 @@ impl Process {
) | [^"]*+ )"/x"#
),
|m: &PregMatches| -> anyhow::Result<String> {
- let m0 = m[&CaptureKey::ByIndex(0)].clone().unwrap_or_default();
- let m1 = m.get(&CaptureKey::ByIndex(1)).cloned().flatten();
+ let m0 = m
+ .get(&CaptureKey::ByIndex(0))
+ .unwrap_or_default()
+ .to_string();
+ let m1 = m.get(&CaptureKey::ByIndex(1)).map(str::to_string);
if m1.is_none() {
return Ok(m0);
}
@@ -1071,9 +1074,8 @@ impl Process {
|matches: &PregMatches| -> anyhow::Result<String> {
let key = matches
.get(&CaptureKey::ByIndex(1))
- .cloned()
- .flatten()
- .unwrap_or_default();
+ .unwrap_or_default()
+ .to_string();
match env.get(&key) {
None => Err(InvalidArgumentException::new(format!(
"Command line is missing a value for parameter \"{}\": {}",