aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe-symfony-console/src/formatter
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-08-17 07:36:34 +0900
committernsfisis <nsfisis@gmail.com>2026-08-17 07:36:34 +0900
commit9fd6aecad27240ccedab4487f6c157914142ca47 (patch)
tree3819360771b9eb9298315e26604cafabeae84e04 /crates/shirabe-symfony-console/src/formatter
parent6b4ce98f20b3cfc14f1c955565a8acd9abcc16a2 (diff)
downloadphp-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/formatter')
-rw-r--r--crates/shirabe-symfony-console/src/formatter/output_formatter.rs16
1 files changed, 6 insertions, 10 deletions
diff --git a/crates/shirabe-symfony-console/src/formatter/output_formatter.rs b/crates/shirabe-symfony-console/src/formatter/output_formatter.rs
index c7c06cf5..1153bc9e 100644
--- a/crates/shirabe-symfony-console/src/formatter/output_formatter.rs
+++ b/crates/shirabe-symfony-console/src/formatter/output_formatter.rs
@@ -7,8 +7,8 @@ use crate::formatter::output_formatter_style_interface::OutputFormatterStyleInte
use crate::formatter::output_formatter_style_stack::OutputFormatterStyleStack;
use crate::formatter::wrappable_output_formatter_interface::WrappableOutputFormatterInterface;
use shirabe_php_shim::{
- CaptureKey, PregMatchesAllWithOffsets, php_regex, preg_match, preg_match_all,
- preg_match_all_offset_capture, preg_match_all_set_order, preg_replace,
+ CaptureKey, php_regex, preg_match, preg_match_all, preg_match_all_offset_capture,
+ preg_match_all_set_order, preg_replace,
};
use shirabe_symfony_string::b;
@@ -109,9 +109,8 @@ impl OutputFormatter {
return Ok(Some(style.borrow().clone_box()));
}
- let mut matches: Vec<Vec<Option<String>>> = vec![];
- if preg_match_all_set_order(php_regex!("/([^=]+)=([^;]+)(;|$)/"), string, &mut matches) == 0
- {
+ let matches = preg_match_all_set_order(php_regex!("/([^=]+)=([^;]+)(;|$)/"), string);
+ if matches.is_empty() {
return Ok(None);
}
@@ -191,8 +190,7 @@ impl OutputFormatter {
prefix = String::new();
}
- let mut matches: Vec<Option<String>> = vec![];
- preg_match(php_regex!("~(\\n)$~"), &text, &mut matches);
+ let matches = preg_match(php_regex!("~(\\n)$~"), &text).unwrap_or_default();
text = format!("{}{}", prefix, self.add_line_breaks(&text, width));
let trailing = matches.get(1).and_then(|m| m.clone()).unwrap_or_default();
text = format!("{}{}", shirabe_php_shim::rtrim(&text, Some("\n")), trailing);
@@ -294,11 +292,9 @@ impl WrappableOutputFormatterInterface for OutputFormatter {
let open_tag_regex = "[a-z](?:[^\\\\<>]* | \\\\.)*";
let close_tag_regex = "[a-z][^<>]*";
let mut current_line_length: i64 = 0;
- let mut matches = PregMatchesAllWithOffsets::new();
- preg_match_all_offset_capture(
+ let matches = preg_match_all_offset_capture(
format!("#<(({open_tag_regex}) | /({close_tag_regex})?)>#ix"),
message,
- &mut matches,
);
let full_matches = matches
.get(&CaptureKey::ByIndex(0))