diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-06-11 02:39:35 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-06-11 02:39:35 +0900 |
| commit | 6ae7e0d4b3eaf20e2d2cd3d000cf61ab0c9b6e83 (patch) | |
| tree | e39261f4aa7314fe8c75142670c76591cdaccb92 /crates/shirabe-external-packages/src | |
| parent | 5d3232a80be4b989e89cc7ae4e3642cc5acae030 (diff) | |
| download | php-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')
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 { |
