aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe-external-packages/src/symfony/console/command/list_command.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/shirabe-external-packages/src/symfony/console/command/list_command.rs')
-rw-r--r--crates/shirabe-external-packages/src/symfony/console/command/list_command.rs273
1 files changed, 82 insertions, 191 deletions
diff --git a/crates/shirabe-external-packages/src/symfony/console/command/list_command.rs b/crates/shirabe-external-packages/src/symfony/console/command/list_command.rs
index ffb63ab..9edebe4 100644
--- a/crates/shirabe-external-packages/src/symfony/console/command/list_command.rs
+++ b/crates/shirabe-external-packages/src/symfony/console/command/list_command.rs
@@ -1,6 +1,6 @@
//! ref: composer/vendor/symfony/console/Command/ListCommand.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,11 +20,11 @@ use std::rc::Rc;
/// ListCommand displays the list of all available commands for the application.
#[derive(Debug)]
pub struct ListCommand {
- inner: BaseCommand,
+ inner: CommandData,
}
impl Deref for ListCommand {
- type Target = BaseCommand;
+ type Target = CommandData;
fn deref(&self) -> &Self::Target {
&self.inner
@@ -38,78 +38,14 @@ impl DerefMut for ListCommand {
}
impl ListCommand {
- fn configure(&mut self) -> anyhow::Result<()> {
- self.inner
- .set_name("list")?
- .set_definition(SetDefinitionArg::Array(vec![
- DefinitionItem::InputArgument(InputArgument::new(
- "namespace".to_string(),
- Some(InputArgument::OPTIONAL),
- "The namespace name".to_string(),
- PhpMixed::Null,
- )?),
- DefinitionItem::InputOption(InputOption::new(
- "raw",
- PhpMixed::Null,
- Some(InputOption::VALUE_NONE),
- "To output raw command list".to_string(),
- PhpMixed::Null,
- )?),
- 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(
- "short",
- PhpMixed::Null,
- Some(InputOption::VALUE_NONE),
- "To skip describing commands' arguments".to_string(),
- PhpMixed::Null,
- )?),
- ]))
- .set_description("List commands")
- .set_help(
- "The <info>%command.name%</info> command lists all commands:\n\
- \n\
- \x20\x20<info>%command.full_name%</info>\n\
- \n\
- You can also display the commands for a specific namespace:\n\
- \n\
- \x20\x20<info>%command.full_name% test</info>\n\
- \n\
- You can also output the information in other formats by using the <comment>--format</comment> option:\n\
- \n\
- \x20\x20<info>%command.full_name% --format=xml</info>\n\
- \n\
- It's also possible to get raw list of commands (useful for embedding command runner):\n\
- \n\
- \x20\x20<info>%command.full_name% --raw</info>",
- );
-
- Ok(())
- }
-
- fn execute(
- &mut self,
- input: &mut dyn InputInterface,
- output: &mut dyn OutputInterface,
- ) -> anyhow::Result<i64> {
- let helper = DescriptorHelper::new();
- // TODO: DescriptorHelper::describe2 takes the described object as Option<PhpMixed>,
- // but PhpMixed cannot hold an Application. 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")?);
- options.insert("namespace".to_string(), input.get_argument("namespace")?);
- options.insert("short".to_string(), input.get_option("short")?);
- let _ = helper.describe2(output, object, options);
-
- Ok(0)
+ pub fn new() -> Self {
+ let mut command = ListCommand {
+ inner: CommandData::new(None),
+ };
+ command
+ .configure()
+ .expect("ListCommand::configure uses static, valid metadata");
+ command
}
pub fn complete_impl(&self, input: &CompletionInput, suggestions: &mut CompletionSuggestions) {
@@ -142,130 +78,85 @@ impl ListCommand {
}
impl Command for ListCommand {
- fn configure(&mut self) {
- let _ = ListCommand::configure(self);
+ fn configure(&mut self) -> anyhow::Result<()> {
+ self.inner.set_name("list")?;
+ self.inner.set_definition(SetDefinitionArg::Array(vec![
+ DefinitionItem::InputArgument(InputArgument::new(
+ "namespace".to_string(),
+ Some(InputArgument::OPTIONAL),
+ "The namespace name".to_string(),
+ PhpMixed::Null,
+ )?),
+ DefinitionItem::InputOption(InputOption::new(
+ "raw",
+ PhpMixed::Null,
+ Some(InputOption::VALUE_NONE),
+ "To output raw command list".to_string(),
+ PhpMixed::Null,
+ )?),
+ 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(
+ "short",
+ PhpMixed::Null,
+ Some(InputOption::VALUE_NONE),
+ "To skip describing commands' arguments".to_string(),
+ PhpMixed::Null,
+ )?),
+ ]));
+ self.inner.set_description("List commands");
+ self.inner.set_help(
+ "The <info>%command.name%</info> command lists all commands:\n\
+ \n\
+ \x20\x20<info>%command.full_name%</info>\n\
+ \n\
+ You can also display the commands for a specific namespace:\n\
+ \n\
+ \x20\x20<info>%command.full_name% test</info>\n\
+ \n\
+ You can also output the information in other formats by using the <comment>--format</comment> option:\n\
+ \n\
+ \x20\x20<info>%command.full_name% --format=xml</info>\n\
+ \n\
+ It's also possible to get raw list of commands (useful for embedding command runner):\n\
+ \n\
+ \x20\x20<info>%command.full_name% --raw</info>",
+ );
+
+ Ok(())
}
- fn run(
+ fn execute(
&mut self,
- input: &mut dyn InputInterface,
- output: &mut dyn OutputInterface,
+ input: Rc<RefCell<dyn InputInterface>>,
+ output: Rc<RefCell<dyn OutputInterface>>,
) -> anyhow::Result<i64> {
- self.inner.run(input, output)
+ let helper = DescriptorHelper::new();
+ // TODO: DescriptorHelper::describe2 takes the described object as Option<PhpMixed>,
+ // but PhpMixed cannot hold an Application. 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")?);
+ options.insert(
+ "namespace".to_string(),
+ input.borrow().get_argument("namespace")?,
+ );
+ options.insert("short".to_string(), input.borrow().get_option("short")?);
+ let _ = helper.describe2(&mut *output.borrow_mut(), object, options);
+
+ Ok(0)
}
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 get_native_definition(
- &self,
- ) -> &crate::symfony::console::input::input_definition::InputDefinition {
- self.inner.get_native_definition()
- }
-
- 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 get_aliases(&self) -> Vec<String> {
- self.inner.get_aliases()
- }
-
- fn get_synopsis(&mut self, short: bool) -> String {
- self.inner.get_synopsis(short)
- }
-
- fn get_usages(&self) -> Vec<String> {
- self.inner.get_usages()
- }
-
- fn get_helper(
- &self,
- name: &str,
- ) -> anyhow::Result<
- Result<PhpMixed, crate::symfony::console::exception::logic_exception::LogicException>,
- > {
- self.inner.get_helper(name)
- }
-
- fn ignore_validation_errors(&mut self) {
- self.inner.ignore_validation_errors();
- }
+ crate::delegate_command_trait_impls_to_inner!(inner);
}