aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe-external-packages/src/symfony/console
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-06-11 02:39:35 +0900
committernsfisis <nsfisis@gmail.com>2026-06-11 02:39:35 +0900
commit6ae7e0d4b3eaf20e2d2cd3d000cf61ab0c9b6e83 (patch)
treee39261f4aa7314fe8c75142670c76591cdaccb92 /crates/shirabe-external-packages/src/symfony/console
parent5d3232a80be4b989e89cc7ae4e3642cc5acae030 (diff)
downloadphp-shirabe-6ae7e0d4b3eaf20e2d2cd3d000cf61ab0c9b6e83.tar.gz
php-shirabe-6ae7e0d4b3eaf20e2d2cd3d000cf61ab0c9b6e83.tar.zst
php-shirabe-6ae7e0d4b3eaf20e2d2cd3d000cf61ab0c9b6e83.zip
feat(console): resolve phase-b TODOs in doRun and IO wiring
Wire up ConsoleIO with HelperSet/QuestionHelper, register the ErrorHandler with the IO instance, and fall back to a default output in run(). Replace resolved phase-b TODOs across the console, command, io, factory, installer, dependency_resolver, and util modules; reclassify the remaining blockers (typed Symfony command registry, stdin resource caching) as phase-c. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe-external-packages/src/symfony/console')
-rw-r--r--crates/shirabe-external-packages/src/symfony/console/application.rs25
-rw-r--r--crates/shirabe-external-packages/src/symfony/console/formatter/output_formatter.rs41
-rw-r--r--crates/shirabe-external-packages/src/symfony/console/formatter/output_formatter_interface.rs5
-rw-r--r--crates/shirabe-external-packages/src/symfony/console/helper/formatter_helper.rs8
-rw-r--r--crates/shirabe-external-packages/src/symfony/console/helper/helper_interface.rs17
-rw-r--r--crates/shirabe-external-packages/src/symfony/console/helper/helper_set.rs15
-rw-r--r--crates/shirabe-external-packages/src/symfony/console/helper/mod.rs2
-rw-r--r--crates/shirabe-external-packages/src/symfony/console/helper/question_helper.rs9
-rw-r--r--crates/shirabe-external-packages/src/symfony/console/input/input_definition.rs6
-rw-r--r--crates/shirabe-external-packages/src/symfony/console/output/console_output.rs11
-rw-r--r--crates/shirabe-external-packages/src/symfony/console/output/output_interface.rs9
-rw-r--r--crates/shirabe-external-packages/src/symfony/console/output/stream_output.rs9
12 files changed, 139 insertions, 18 deletions
diff --git a/crates/shirabe-external-packages/src/symfony/console/application.rs b/crates/shirabe-external-packages/src/symfony/console/application.rs
index f937473..a939bee 100644
--- a/crates/shirabe-external-packages/src/symfony/console/application.rs
+++ b/crates/shirabe-external-packages/src/symfony/console/application.rs
@@ -1,3 +1,4 @@
+use crate::symfony::console::input::InputDefinition;
use crate::symfony::console::input::InputInterface;
use crate::symfony::console::output::OutputInterface;
use shirabe_php_shim::PhpMixed;
@@ -105,4 +106,28 @@ impl Application {
pub fn has(&self, _name: &str) -> bool {
todo!()
}
+
+ pub fn do_run(
+ &mut self,
+ _input: std::rc::Rc<std::cell::RefCell<dyn InputInterface>>,
+ _output: std::rc::Rc<std::cell::RefCell<dyn OutputInterface>>,
+ ) -> anyhow::Result<i64> {
+ todo!()
+ }
+
+ pub fn get_help(&self) -> String {
+ todo!()
+ }
+
+ pub fn are_exceptions_caught(&self) -> bool {
+ todo!()
+ }
+
+ pub fn get_default_input_definition(&self) -> InputDefinition {
+ todo!()
+ }
+
+ pub fn get_default_commands(&self) -> Vec<PhpMixed> {
+ todo!()
+ }
}
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 4b499b8..f64361e 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
@@ -39,4 +39,45 @@ impl OutputFormatter {
) {
todo!()
}
+
+ pub fn has_style(&self, _name: &str) -> bool {
+ todo!()
+ }
+
+ pub fn get_style(
+ &self,
+ _name: &str,
+ ) -> crate::symfony::console::formatter::OutputFormatterStyle {
+ todo!()
+ }
+}
+
+impl crate::symfony::console::formatter::OutputFormatterInterface for OutputFormatter {
+ fn is_decorated(&self) -> bool {
+ self.is_decorated()
+ }
+
+ fn set_decorated(&mut self, decorated: bool) {
+ self.set_decorated(decorated)
+ }
+
+ fn set_style(
+ &mut self,
+ name: &str,
+ style: crate::symfony::console::formatter::OutputFormatterStyle,
+ ) {
+ self.set_style(name, style)
+ }
+
+ fn has_style(&self, name: &str) -> bool {
+ self.has_style(name)
+ }
+
+ fn get_style(&self, name: &str) -> crate::symfony::console::formatter::OutputFormatterStyle {
+ self.get_style(name)
+ }
+
+ fn format(&self, message: &str) -> String {
+ self.format(message)
+ }
}
diff --git a/crates/shirabe-external-packages/src/symfony/console/formatter/output_formatter_interface.rs b/crates/shirabe-external-packages/src/symfony/console/formatter/output_formatter_interface.rs
index dc93a3b..7f6e9b0 100644
--- a/crates/shirabe-external-packages/src/symfony/console/formatter/output_formatter_interface.rs
+++ b/crates/shirabe-external-packages/src/symfony/console/formatter/output_formatter_interface.rs
@@ -1,5 +1,10 @@
+use crate::symfony::console::formatter::OutputFormatterStyle;
+
pub trait OutputFormatterInterface {
fn is_decorated(&self) -> bool;
fn set_decorated(&mut self, decorated: bool);
+ fn set_style(&mut self, name: &str, style: OutputFormatterStyle);
+ fn has_style(&self, name: &str) -> bool;
+ fn get_style(&self, name: &str) -> OutputFormatterStyle;
fn format(&self, message: &str) -> String;
}
diff --git a/crates/shirabe-external-packages/src/symfony/console/helper/formatter_helper.rs b/crates/shirabe-external-packages/src/symfony/console/helper/formatter_helper.rs
index 656828e..e55dbce 100644
--- a/crates/shirabe-external-packages/src/symfony/console/helper/formatter_helper.rs
+++ b/crates/shirabe-external-packages/src/symfony/console/helper/formatter_helper.rs
@@ -1,3 +1,5 @@
+use crate::symfony::console::helper::HelperInterface;
+
#[derive(Debug)]
pub struct FormatterHelper;
@@ -10,3 +12,9 @@ impl FormatterHelper {
todo!()
}
}
+
+impl HelperInterface for FormatterHelper {
+ fn as_any(&self) -> &dyn std::any::Any {
+ self
+ }
+}
diff --git a/crates/shirabe-external-packages/src/symfony/console/helper/helper_interface.rs b/crates/shirabe-external-packages/src/symfony/console/helper/helper_interface.rs
new file mode 100644
index 0000000..cf60bf0
--- /dev/null
+++ b/crates/shirabe-external-packages/src/symfony/console/helper/helper_interface.rs
@@ -0,0 +1,17 @@
+use crate::symfony::console::helper::HelperSet;
+
+pub trait HelperInterface: std::fmt::Debug {
+ fn set_helper_set(&mut self, _helper_set: Option<std::rc::Rc<std::cell::RefCell<HelperSet>>>) {
+ todo!()
+ }
+
+ fn get_helper_set(&self) -> Option<std::rc::Rc<std::cell::RefCell<HelperSet>>> {
+ todo!()
+ }
+
+ fn get_name(&self) -> String {
+ todo!()
+ }
+
+ fn as_any(&self) -> &dyn std::any::Any;
+}
diff --git a/crates/shirabe-external-packages/src/symfony/console/helper/helper_set.rs b/crates/shirabe-external-packages/src/symfony/console/helper/helper_set.rs
index 26af492..e38dbf3 100644
--- a/crates/shirabe-external-packages/src/symfony/console/helper/helper_set.rs
+++ b/crates/shirabe-external-packages/src/symfony/console/helper/helper_set.rs
@@ -1,18 +1,23 @@
-use shirabe_php_shim::PhpMixed;
+use crate::symfony::console::helper::HelperInterface;
+use indexmap::IndexMap;
+use std::cell::RefCell;
+use std::rc::Rc;
#[derive(Debug)]
-pub struct HelperSet;
+pub struct HelperSet {
+ helpers: IndexMap<String, Rc<RefCell<dyn HelperInterface>>>,
+}
impl HelperSet {
- pub fn new(_helpers: Vec<PhpMixed>) -> Self {
+ pub fn new(_helpers: Vec<Rc<RefCell<dyn HelperInterface>>>) -> Self {
todo!()
}
- pub fn get(&self, _name: &str) -> PhpMixed {
+ pub fn get<T: HelperInterface + 'static>(&self, _name: &str) -> Rc<RefCell<T>> {
todo!()
}
- pub fn set(&mut self, _helper: PhpMixed, _alias: Option<&str>) {
+ pub fn set(&mut self, _helper: Rc<RefCell<dyn HelperInterface>>, _alias: Option<&str>) {
todo!()
}
diff --git a/crates/shirabe-external-packages/src/symfony/console/helper/mod.rs b/crates/shirabe-external-packages/src/symfony/console/helper/mod.rs
index b31517a..191fb6e 100644
--- a/crates/shirabe-external-packages/src/symfony/console/helper/mod.rs
+++ b/crates/shirabe-external-packages/src/symfony/console/helper/mod.rs
@@ -1,5 +1,6 @@
pub mod formatter_helper;
pub mod helper;
+pub mod helper_interface;
pub mod helper_set;
pub mod progress_bar;
pub mod question_helper;
@@ -8,6 +9,7 @@ pub mod table_separator;
pub use formatter_helper::*;
pub use helper::*;
+pub use helper_interface::*;
pub use helper_set::*;
pub use progress_bar::*;
pub use question_helper::*;
diff --git a/crates/shirabe-external-packages/src/symfony/console/helper/question_helper.rs b/crates/shirabe-external-packages/src/symfony/console/helper/question_helper.rs
index 70a9572..c17cb6b 100644
--- a/crates/shirabe-external-packages/src/symfony/console/helper/question_helper.rs
+++ b/crates/shirabe-external-packages/src/symfony/console/helper/question_helper.rs
@@ -1,3 +1,4 @@
+use crate::symfony::console::helper::HelperInterface;
use crate::symfony::console::input::InputInterface;
use crate::symfony::console::output::OutputInterface;
use crate::symfony::console::question::Question;
@@ -12,7 +13,13 @@ impl QuestionHelper {
_input: std::rc::Rc<std::cell::RefCell<dyn InputInterface>>,
_output: std::rc::Rc<std::cell::RefCell<dyn OutputInterface>>,
_question: &Question,
- ) -> Option<PhpMixed> {
+ ) -> PhpMixed {
todo!()
}
}
+
+impl HelperInterface for QuestionHelper {
+ fn as_any(&self) -> &dyn std::any::Any {
+ self
+ }
+}
diff --git a/crates/shirabe-external-packages/src/symfony/console/input/input_definition.rs b/crates/shirabe-external-packages/src/symfony/console/input/input_definition.rs
index 74839fc..f2d0318 100644
--- a/crates/shirabe-external-packages/src/symfony/console/input/input_definition.rs
+++ b/crates/shirabe-external-packages/src/symfony/console/input/input_definition.rs
@@ -1,3 +1,5 @@
+use crate::symfony::console::input::InputArgument;
+use crate::symfony::console::input::InputOption;
use shirabe_php_shim::PhpMixed;
#[derive(Debug)]
@@ -8,11 +10,11 @@ impl InputDefinition {
todo!()
}
- pub fn add_argument(&mut self, _argument: PhpMixed) {
+ pub fn add_argument(&mut self, _argument: InputArgument) {
todo!()
}
- pub fn add_option(&mut self, _option: PhpMixed) {
+ pub fn add_option(&mut self, _option: InputOption) {
todo!()
}
diff --git a/crates/shirabe-external-packages/src/symfony/console/output/console_output.rs b/crates/shirabe-external-packages/src/symfony/console/output/console_output.rs
index 5aa6ff0..b3010b9 100644
--- a/crates/shirabe-external-packages/src/symfony/console/output/console_output.rs
+++ b/crates/shirabe-external-packages/src/symfony/console/output/console_output.rs
@@ -1,4 +1,4 @@
-use crate::symfony::console::formatter::OutputFormatter;
+use crate::symfony::console::formatter::OutputFormatterInterface;
use crate::symfony::console::output::ConsoleOutputInterface;
use crate::symfony::console::output::OutputInterface;
@@ -9,7 +9,7 @@ impl ConsoleOutput {
pub fn new(
_verbosity: i64,
_decorated: Option<bool>,
- _formatter: Option<OutputFormatter>,
+ _formatter: Option<std::rc::Rc<std::cell::RefCell<dyn OutputFormatterInterface>>>,
) -> Self {
todo!()
}
@@ -64,10 +64,13 @@ impl OutputInterface for ConsoleOutput {
fn is_decorated(&self) -> bool {
todo!()
}
- fn set_formatter(&self, _formatter: OutputFormatter) {
+ fn set_formatter(
+ &self,
+ _formatter: std::rc::Rc<std::cell::RefCell<dyn OutputFormatterInterface>>,
+ ) {
todo!()
}
- fn get_formatter(&self) -> &OutputFormatter {
+ fn get_formatter(&self) -> std::rc::Rc<std::cell::RefCell<dyn OutputFormatterInterface>> {
todo!()
}
}
diff --git a/crates/shirabe-external-packages/src/symfony/console/output/output_interface.rs b/crates/shirabe-external-packages/src/symfony/console/output/output_interface.rs
index 18eadfb..661cd7f 100644
--- a/crates/shirabe-external-packages/src/symfony/console/output/output_interface.rs
+++ b/crates/shirabe-external-packages/src/symfony/console/output/output_interface.rs
@@ -1,4 +1,4 @@
-use crate::symfony::console::formatter::OutputFormatter;
+use crate::symfony::console::formatter::OutputFormatterInterface;
use crate::symfony::console::output::ConsoleOutputInterface;
pub trait OutputInterface: std::fmt::Debug {
@@ -14,8 +14,11 @@ pub trait OutputInterface: std::fmt::Debug {
fn is_debug(&self) -> bool;
fn set_decorated(&self, decorated: bool);
fn is_decorated(&self) -> bool;
- fn set_formatter(&self, formatter: OutputFormatter);
- fn get_formatter(&self) -> &OutputFormatter;
+ fn set_formatter(
+ &self,
+ formatter: std::rc::Rc<std::cell::RefCell<dyn OutputFormatterInterface>>,
+ );
+ fn get_formatter(&self) -> std::rc::Rc<std::cell::RefCell<dyn OutputFormatterInterface>>;
/// PHP: `$output instanceof ConsoleOutputInterface`. Default false; ConsoleOutput overrides.
fn is_console_output_interface(&self) -> bool {
diff --git a/crates/shirabe-external-packages/src/symfony/console/output/stream_output.rs b/crates/shirabe-external-packages/src/symfony/console/output/stream_output.rs
index 6aa79b8..da7dbf4 100644
--- a/crates/shirabe-external-packages/src/symfony/console/output/stream_output.rs
+++ b/crates/shirabe-external-packages/src/symfony/console/output/stream_output.rs
@@ -1,4 +1,4 @@
-use crate::symfony::console::formatter::OutputFormatter;
+use crate::symfony::console::formatter::OutputFormatterInterface;
use crate::symfony::console::output::OutputInterface;
use shirabe_php_shim::PhpMixed;
@@ -42,10 +42,13 @@ impl OutputInterface for StreamOutput {
fn is_decorated(&self) -> bool {
todo!()
}
- fn set_formatter(&self, _formatter: OutputFormatter) {
+ fn set_formatter(
+ &self,
+ _formatter: std::rc::Rc<std::cell::RefCell<dyn OutputFormatterInterface>>,
+ ) {
todo!()
}
- fn get_formatter(&self) -> &OutputFormatter {
+ fn get_formatter(&self) -> std::rc::Rc<std::cell::RefCell<dyn OutputFormatterInterface>> {
todo!()
}
fn get_stream(&self) -> shirabe_php_shim::PhpResource {