aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe-external-packages/src/symfony/console/command/help_command.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/shirabe-external-packages/src/symfony/console/command/help_command.rs')
-rw-r--r--crates/shirabe-external-packages/src/symfony/console/command/help_command.rs257
1 files changed, 73 insertions, 184 deletions
diff --git a/crates/shirabe-external-packages/src/symfony/console/command/help_command.rs b/crates/shirabe-external-packages/src/symfony/console/command/help_command.rs
index fb2a8a2..321b640 100644
--- a/crates/shirabe-external-packages/src/symfony/console/command/help_command.rs
+++ b/crates/shirabe-external-packages/src/symfony/console/command/help_command.rs
@@ -1,6 +1,6 @@
//! ref: composer/vendor/symfony/console/Command/HelpCommand.php
-use crate::symfony::console::command::command::{BaseCommand, Command, SetDefinitionArg};
+use crate::symfony::console::command::command::{Command, CommandData, SetDefinitionArg};
use crate::symfony::console::completion::completion_input::CompletionInput;
use crate::symfony::console::completion::completion_suggestions::{
CompletionSuggestions, StringOrSuggestion,
@@ -20,12 +20,12 @@ use std::rc::Rc;
/// HelpCommand displays the help for a given command.
#[derive(Debug)]
pub struct HelpCommand {
- inner: BaseCommand,
+ inner: CommandData,
command: Option<Rc<RefCell<dyn Command>>>,
}
impl Deref for HelpCommand {
- type Target = BaseCommand;
+ type Target = CommandData;
fn deref(&self) -> &Self::Target {
&self.inner
@@ -39,79 +39,21 @@ impl DerefMut for HelpCommand {
}
impl HelpCommand {
- fn configure(&mut self) -> anyhow::Result<()> {
- self.inner.ignore_validation_errors();
-
- self.inner
- .set_name("help")?
- .set_definition(SetDefinitionArg::Array(vec![
- DefinitionItem::InputArgument(InputArgument::new(
- "command_name".to_string(),
- Some(InputArgument::OPTIONAL),
- "The command name".to_string(),
- PhpMixed::from("help".to_string()),
- )?),
- DefinitionItem::InputOption(InputOption::new(
- "format",
- PhpMixed::Null,
- Some(InputOption::VALUE_REQUIRED),
- "The output format (txt, xml, json, or md)".to_string(),
- PhpMixed::from("txt".to_string()),
- )?),
- DefinitionItem::InputOption(InputOption::new(
- "raw",
- PhpMixed::Null,
- Some(InputOption::VALUE_NONE),
- "To output raw command help".to_string(),
- PhpMixed::Null,
- )?),
- ]))
- .set_description("Display help for a command")
- .set_help(
- "The <info>%command.name%</info> command displays help for a given command:\n\
- \n\
- \x20\x20<info>%command.full_name% list</info>\n\
- \n\
- You can also output the help in other formats by using the <comment>--format</comment> option:\n\
- \n\
- \x20\x20<info>%command.full_name% --format=xml list</info>\n\
- \n\
- To display the list of available commands, please use the <info>list</info> command.",
- );
-
- Ok(())
+ pub fn new() -> Self {
+ let mut command = HelpCommand {
+ inner: CommandData::new(None),
+ command: None,
+ };
+ command
+ .configure()
+ .expect("HelpCommand::configure uses static, valid metadata");
+ command
}
pub fn set_command(&mut self, command: Rc<RefCell<dyn Command>>) {
self.command = Some(command);
}
- fn execute(
- &mut self,
- input: &mut dyn InputInterface,
- output: &mut dyn OutputInterface,
- ) -> anyhow::Result<i64> {
- if self.command.is_none() {
- let application = self.get_application().unwrap();
- let command_name = input.get_argument("command_name")?.to_string();
- self.command = Some(application.borrow_mut().find(&command_name)?);
- }
-
- let helper = DescriptorHelper::new();
- // TODO: DescriptorHelper::describe2 takes the described object as Option<PhpMixed>,
- // but PhpMixed cannot hold a Command. The Command/Application object mixing for
- // describe needs a dedicated type (Phase C).
- let object: Option<PhpMixed> = todo!();
- let mut options = indexmap::IndexMap::new();
- options.insert("format".to_string(), input.get_option("format")?);
- options.insert("raw_text".to_string(), input.get_option("raw")?);
- let _ = helper.describe2(output, object, options);
-
- self.command = None;
-
- Ok(0)
- }
-
pub fn complete_impl(&self, input: &CompletionInput, suggestions: &mut CompletionSuggestions) {
if input.must_suggest_argument_values_for("command_name") {
let application = self.get_application().unwrap();
@@ -142,130 +84,77 @@ impl HelpCommand {
}
impl Command for HelpCommand {
- fn configure(&mut self) {
- let _ = HelpCommand::configure(self);
- }
-
- fn run(
- &mut self,
- input: &mut dyn InputInterface,
- output: &mut dyn OutputInterface,
- ) -> anyhow::Result<i64> {
- self.inner.run(input, output)
- }
-
- fn complete(&self, input: &CompletionInput, suggestions: &mut CompletionSuggestions) {
- self.complete_impl(input, suggestions);
- }
-
- fn is_enabled(&self) -> bool {
- self.inner.is_enabled()
- }
-
- fn set_application(
- &mut self,
- application: Option<Rc<RefCell<dyn crate::symfony::console::application::Application>>>,
- ) {
- self.inner.set_application(application);
- }
-
- fn get_application(
- &self,
- ) -> Option<Rc<RefCell<dyn crate::symfony::console::application::Application>>> {
- self.inner.get_application()
- }
-
- fn set_helper_set(
- &mut self,
- helper_set: Rc<RefCell<crate::symfony::console::helper::helper_set::HelperSet>>,
- ) {
- self.inner.set_helper_set(helper_set);
- }
-
- fn get_helper_set(
- &self,
- ) -> Option<Rc<RefCell<crate::symfony::console::helper::helper_set::HelperSet>>> {
- self.inner.get_helper_set()
- }
-
- fn merge_application_definition(&mut self, merge_args: bool) {
- self.inner.merge_application_definition(merge_args);
- }
-
- fn get_definition(&self) -> &crate::symfony::console::input::input_definition::InputDefinition {
- self.inner.get_definition()
- }
+ fn configure(&mut self) -> anyhow::Result<()> {
+ self.inner.ignore_validation_errors();
- fn get_native_definition(
- &self,
- ) -> &crate::symfony::console::input::input_definition::InputDefinition {
- self.inner.get_native_definition()
- }
+ self.inner.set_name("help")?;
+ self.inner.set_definition(SetDefinitionArg::Array(vec![
+ DefinitionItem::InputArgument(InputArgument::new(
+ "command_name".to_string(),
+ Some(InputArgument::OPTIONAL),
+ "The command name".to_string(),
+ PhpMixed::from("help".to_string()),
+ )?),
+ DefinitionItem::InputOption(InputOption::new(
+ "format",
+ PhpMixed::Null,
+ Some(InputOption::VALUE_REQUIRED),
+ "The output format (txt, xml, json, or md)".to_string(),
+ PhpMixed::from("txt".to_string()),
+ )?),
+ DefinitionItem::InputOption(InputOption::new(
+ "raw",
+ PhpMixed::Null,
+ Some(InputOption::VALUE_NONE),
+ "To output raw command help".to_string(),
+ PhpMixed::Null,
+ )?),
+ ]));
+ self.inner.set_description("Display help for a command");
+ self.inner.set_help(
+ "The <info>%command.name%</info> command displays help for a given command:\n\
+ \n\
+ \x20\x20<info>%command.full_name% list</info>\n\
+ \n\
+ You can also output the help in other formats by using the <comment>--format</comment> option:\n\
+ \n\
+ \x20\x20<info>%command.full_name% --format=xml list</info>\n\
+ \n\
+ To display the list of available commands, please use the <info>list</info> command.",
+ );
- fn set_name(&mut self, name: &str) -> anyhow::Result<()> {
- self.inner.set_name(name)?;
Ok(())
}
- fn get_name(&self) -> Option<String> {
- self.inner.get_name()
- }
-
- fn set_hidden(&mut self, hidden: bool) {
- self.inner.set_hidden(hidden);
- }
-
- fn is_hidden(&self) -> bool {
- self.inner.is_hidden()
- }
-
- fn set_description(&mut self, description: &str) {
- self.inner.set_description(description);
- }
-
- fn get_description(&self) -> String {
- self.inner.get_description()
- }
-
- fn set_help(&mut self, help: &str) {
- self.inner.set_help(help);
- }
-
- fn get_help(&self) -> String {
- self.inner.get_help()
- }
-
- fn get_processed_help(&self) -> String {
- self.inner.get_processed_help()
- }
-
- fn set_aliases(&mut self, aliases: Vec<String>) -> anyhow::Result<()> {
- self.inner.set_aliases(aliases)?;
- Ok(())
- }
+ fn execute(
+ &mut self,
+ input: Rc<RefCell<dyn InputInterface>>,
+ output: Rc<RefCell<dyn OutputInterface>>,
+ ) -> anyhow::Result<i64> {
+ if self.command.is_none() {
+ let application = self.get_application().unwrap();
+ let command_name = input.borrow().get_argument("command_name")?.to_string();
+ self.command = Some(application.borrow_mut().find(&command_name)?);
+ }
- fn get_aliases(&self) -> Vec<String> {
- self.inner.get_aliases()
- }
+ let helper = DescriptorHelper::new();
+ // TODO: DescriptorHelper::describe2 takes the described object as Option<PhpMixed>,
+ // but PhpMixed cannot hold a Command. The Command/Application object mixing for
+ // describe needs a dedicated type (Phase C).
+ let object: Option<PhpMixed> = todo!();
+ let mut options = indexmap::IndexMap::new();
+ options.insert("format".to_string(), input.borrow().get_option("format")?);
+ options.insert("raw_text".to_string(), input.borrow().get_option("raw")?);
+ let _ = helper.describe2(&mut *output.borrow_mut(), object, options);
- fn get_synopsis(&mut self, short: bool) -> String {
- self.inner.get_synopsis(short)
- }
+ self.command = None;
- fn get_usages(&self) -> Vec<String> {
- self.inner.get_usages()
+ Ok(0)
}
- fn get_helper(
- &self,
- name: &str,
- ) -> anyhow::Result<
- Result<PhpMixed, crate::symfony::console::exception::logic_exception::LogicException>,
- > {
- self.inner.get_helper(name)
+ fn complete(&self, input: &CompletionInput, suggestions: &mut CompletionSuggestions) {
+ self.complete_impl(input, suggestions);
}
- fn ignore_validation_errors(&mut self) {
- self.inner.ignore_validation_errors();
- }
+ crate::delegate_command_trait_impls_to_inner!(inner);
}