diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-08-16 17:58:11 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-08-16 17:58:11 +0900 |
| commit | 24a4f39bd981768cc299121b506f6bba584cb31d (patch) | |
| tree | 39c9de717f5ca374e2c4df9b7eaeb0f86b11da0b /crates/shirabe-symfony-console/src/helper/progress_bar.rs | |
| parent | 224d3e8262ed6156ea3374fe91dfb5b66d6f0d3a (diff) | |
| download | php-shirabe-24a4f39bd981768cc299121b506f6bba584cb31d.tar.gz php-shirabe-24a4f39bd981768cc299121b506f6bba584cb31d.tar.zst php-shirabe-24a4f39bd981768cc299121b506f6bba584cb31d.zip | |
refactor(preg): merge preg_replace_callback2 into preg_replace_callback
preg_replace_callback2 had one caller, Preg::replace_callback6, which
was itself reached only from Preg::replace_callback with the default
limit, count and flags. Fold the two shim functions into one and drop
those parameters along with replace_callback6.
The surviving callback takes callback2's IndexMap of matches: it can be
keyed by group name, and it omits trailing non-participating groups the
way PHP does, which is what the callbacks in Process and ProgressBar
test for.
Diffstat (limited to 'crates/shirabe-symfony-console/src/helper/progress_bar.rs')
| -rw-r--r-- | crates/shirabe-symfony-console/src/helper/progress_bar.rs | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/crates/shirabe-symfony-console/src/helper/progress_bar.rs b/crates/shirabe-symfony-console/src/helper/progress_bar.rs index b0124419..dea1c3ad 100644 --- a/crates/shirabe-symfony-console/src/helper/progress_bar.rs +++ b/crates/shirabe-symfony-console/src/helper/progress_bar.rs @@ -9,6 +9,7 @@ use crate::output::OutputInterface; use crate::output::output_interface; use crate::terminal::Terminal; use indexmap::IndexMap; +use shirabe_php_shim::CaptureKey; pub const FORMAT_VERBOSE: &str = "verbose"; pub const FORMAT_VERY_VERBOSE: &str = "very_verbose"; @@ -797,8 +798,8 @@ impl ProgressBar { let format = self.format.clone().unwrap_or_default(); // $callback in PHP, expressed as a closure over $this and the matches. - let callback = |matches: &[Option<String>]| -> anyhow::Result<String> { - let name = matches[1].clone().unwrap_or_default(); + let callback = |matches: &IndexMap<CaptureKey, Option<String>>| -> anyhow::Result<String> { + let name = matches[&CaptureKey::ByIndex(1)].clone().unwrap_or_default(); let text: shirabe_php_shim::PhpMixed = if Self::get_placeholder_formatter_definition(&name).is_some() { @@ -812,10 +813,10 @@ impl ProgressBar { } else if let Some(message) = self.messages.get(&name) { shirabe_php_shim::PhpMixed::String(message.clone()) } else { - return Ok(matches[0].clone().unwrap_or_default()); + return Ok(matches[&CaptureKey::ByIndex(0)].clone().unwrap_or_default()); }; - if let Some(modifier) = matches.get(2).and_then(|m| m.clone()) { + if let Some(modifier) = matches.get(&CaptureKey::ByIndex(2)).and_then(|m| m.clone()) { return Ok(shirabe_php_shim::sprintf(&format!("%{modifier}"), &[text])); } |
