aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe-external-packages/src/symfony/console/formatter/output_formatter.rs
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-06-12 02:14:18 +0900
committernsfisis <nsfisis@gmail.com>2026-06-12 02:15:32 +0900
commit981cae63d9777b877aa9f96907c7995ec020fbf9 (patch)
treed1e9129ece95f1fa3750bb9a7302135d397e0abf /crates/shirabe-external-packages/src/symfony/console/formatter/output_formatter.rs
parent1e44f5723e4c0e0903d00a61f254901e612fe5e1 (diff)
downloadphp-shirabe-981cae63d9777b877aa9f96907c7995ec020fbf9.tar.gz
php-shirabe-981cae63d9777b877aa9f96907c7995ec020fbf9.tar.zst
php-shirabe-981cae63d9777b877aa9f96907c7995ec020fbf9.zip
feat(php-shim): implement runtime functions to run --version
Replace todo!() stubs reached on the `composer --version` path so the command runs without panicking and exits cleanly: - introspection (function_exists, class_exists, extension_loaded, defined) via white-lists modeling a standard Linux PHP CLI - type casts: php_to_string/strval, php_truthy/boolval, substr, byte_at, explode, strtr_array - config/env: error_reporting, ini_get, date_default_timezone_*, server_get/server_contains_key, php_uname("s") - IO: turn PhpResource into an enum (Stdin/Stdout/Stderr/File) and implement fwrite/fflush/stream_isatty/php_fopen resource helpers - shutdown/exit: register_shutdown_function + run_shutdown_functions, exit, error_get_last - preg_match_all_offset_capture via the regex crate; the formatter pattern drops PCRE possessive quantifiers (original kept in a comment with a TODO) proc_open reports unavailable for now (TODO(phase-c)); terminal-size and tty detection fall back to defaults. sprintf calls on this path are rewritten with format!(). OutputFormatterStyleInterface gains clone_box to return shared styles. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe-external-packages/src/symfony/console/formatter/output_formatter.rs')
-rw-r--r--crates/shirabe-external-packages/src/symfony/console/formatter/output_formatter.rs19
1 files changed, 11 insertions, 8 deletions
diff --git a/crates/shirabe-external-packages/src/symfony/console/formatter/output_formatter.rs b/crates/shirabe-external-packages/src/symfony/console/formatter/output_formatter.rs
index 413f023..4a451d9 100644
--- a/crates/shirabe-external-packages/src/symfony/console/formatter/output_formatter.rs
+++ b/crates/shirabe-external-packages/src/symfony/console/formatter/output_formatter.rs
@@ -95,12 +95,8 @@ impl OutputFormatter {
&self,
string: &str,
) -> anyhow::Result<Option<Box<dyn OutputFormatterStyleInterface>>> {
- if self.styles.contains_key(string) {
- // PHP returns the shared style instance; ownership cannot be expressed without Clone
- // on the trait object.
- // TODO(human-review): returning a shared style here needs an Rc/Clone strategy in
- // Phase C.
- return Ok(Some(todo!()));
+ if let Some(style) = self.styles.get(string) {
+ return Ok(Some(style.clone_box()));
}
let mut matches: Vec<Vec<String>> = vec![];
@@ -281,8 +277,15 @@ impl WrappableOutputFormatterInterface for OutputFormatter {
let mut offset: i64 = 0;
let mut output = String::new();
- let open_tag_regex = "[a-z](?:[^\\\\<>]*+ | \\\\.)*";
- let close_tag_regex = "[a-z][^<>]*+";
+ // Accurate PCRE patterns (possessive quantifiers `*+`), unsupported by the
+ // `regex` crate:
+ // let open_tag_regex = "[a-z](?:[^\\\\<>]*+ | \\\\.)*";
+ // let close_tag_regex = "[a-z][^<>]*+";
+ // TODO(phase-c): restore the possessive quantifiers once a PCRE-compatible
+ // engine is available; greedy quantifiers match the same tags here but may
+ // differ in pathological backtracking cases.
+ let open_tag_regex = "[a-z](?:[^\\\\<>]* | \\\\.)*";
+ let close_tag_regex = "[a-z][^<>]*";
let mut current_line_length: i64 = 0;
let mut matches: shirabe_php_shim::PregOffsetCaptureMatches = Default::default();
shirabe_php_shim::preg_match_all_offset_capture(