From 5114a8199a87c9e5584d92848e95deba22b73e98 Mon Sep 17 00:00:00 2001 From: nsfisis Date: Tue, 18 Aug 2026 01:56:31 +0900 Subject: 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) --- crates/shirabe-symfony-console/src/formatter/output_formatter.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'crates/shirabe-symfony-console/src/formatter') diff --git a/crates/shirabe-symfony-console/src/formatter/output_formatter.rs b/crates/shirabe-symfony-console/src/formatter/output_formatter.rs index 1153bc9e..571d66c0 100644 --- a/crates/shirabe-symfony-console/src/formatter/output_formatter.rs +++ b/crates/shirabe-symfony-console/src/formatter/output_formatter.rs @@ -321,7 +321,9 @@ impl WrappableOutputFormatterInterface for OutputFormatter { // opening tag? let open = shirabe_php_shim::byte_at(&text, 1) != b'/'; let tag = if open { - matches[&CaptureKey::ByIndex(1)][i] + matches + .get(&CaptureKey::ByIndex(1)) + .expect("group 1 exists in the tag pattern")[i] .0 .clone() .expect("group 1 participates whenever the pattern matches") -- cgit v1.3.1-4-g156e