diff options
Diffstat (limited to 'crates/shirabe/src/command/search_command.rs')
| -rw-r--r-- | crates/shirabe/src/command/search_command.rs | 77 |
1 files changed, 59 insertions, 18 deletions
diff --git a/crates/shirabe/src/command/search_command.rs b/crates/shirabe/src/command/search_command.rs index 87c9e72..2c727e5 100644 --- a/crates/shirabe/src/command/search_command.rs +++ b/crates/shirabe/src/command/search_command.rs @@ -1,10 +1,5 @@ //! ref: composer/src/Composer/Command/SearchCommand.php -use anyhow::Result; -use shirabe_external_packages::symfony::console::formatter::output_formatter::OutputFormatter; -use shirabe_external_packages::symfony::console::input::input_interface::InputInterface; -use shirabe_external_packages::symfony::console::output::output_interface::OutputInterface; -use shirabe_php_shim::{implode, in_array, preg_quote, InvalidArgumentException, PhpMixed}; use crate::command::base_command::BaseCommand; use crate::console::input::input_argument::InputArgument; use crate::console::input::input_option::InputOption; @@ -14,6 +9,11 @@ use crate::plugin::plugin_events::PluginEvents; use crate::repository::composite_repository::CompositeRepository; use crate::repository::platform_repository::PlatformRepository; use crate::repository::repository_interface::RepositoryInterface; +use anyhow::Result; +use shirabe_external_packages::symfony::console::formatter::output_formatter::OutputFormatter; +use shirabe_external_packages::symfony::console::input::input_interface::InputInterface; +use shirabe_external_packages::symfony::console::output::output_interface::OutputInterface; +use shirabe_php_shim::{InvalidArgumentException, PhpMixed, implode, in_array, preg_quote}; #[derive(Debug)] pub struct SearchCommand { @@ -39,23 +39,43 @@ impl SearchCommand { ); } - pub fn execute(&mut self, input: &dyn InputInterface, output: &dyn OutputInterface) -> Result<i64> { + pub fn execute( + &mut self, + input: &dyn InputInterface, + output: &dyn OutputInterface, + ) -> Result<i64> { let platform_repo = PlatformRepository; let io = self.inner.get_io(); - let format = input.get_option("format").as_string_opt().map(|s| s.to_string()).unwrap_or_else(|| "text".to_string()); - if !in_array(PhpMixed::String(format.clone()), &PhpMixed::List(vec![Box::new(PhpMixed::String("text".to_string())), Box::new(PhpMixed::String("json".to_string()))]), false) { - io.write_error(&format!("Unsupported format \"{}\". See help for supported formats.", format)); + let format = input + .get_option("format") + .as_string_opt() + .map(|s| s.to_string()) + .unwrap_or_else(|| "text".to_string()); + if !in_array( + PhpMixed::String(format.clone()), + &PhpMixed::List(vec![ + Box::new(PhpMixed::String("text".to_string())), + Box::new(PhpMixed::String("json".to_string())), + ]), + false, + ) { + io.write_error(&format!( + "Unsupported format \"{}\". See help for supported formats.", + format + )); return Ok(1); } let composer = if let Some(c) = self.inner.try_composer() { c } else { - self.inner.create_composer_instance(input, self.inner.get_io(), vec![])? + self.inner + .create_composer_instance(input, self.inner.get_io(), vec![])? }; let local_repo = composer.get_repository_manager().get_local_repository(); - let installed_repo = CompositeRepository::new(vec![Box::new(local_repo), Box::new(platform_repo)]); + let installed_repo = + CompositeRepository::new(vec![Box::new(local_repo), Box::new(platform_repo)]); let mut all_repos: Vec<Box<dyn RepositoryInterface>> = vec![Box::new(installed_repo)]; all_repos.extend(composer.get_repository_manager().get_repositories()); let repos = CompositeRepository::new(all_repos); @@ -69,7 +89,9 @@ impl SearchCommand { vec![], vec![], ); - composer.get_event_dispatcher().dispatch(command_event.get_name(), &command_event); + composer + .get_event_dispatcher() + .dispatch(command_event.get_name(), &command_event); let mut mode: i64 = RepositoryInterface::SEARCH_FULLTEXT; if input.get_option("only-name").as_bool().unwrap_or(false) { @@ -77,18 +99,27 @@ impl SearchCommand { return Err(InvalidArgumentException { message: "--only-name and --only-vendor cannot be used together".to_string(), code: 0, - }.into()); + } + .into()); } mode = RepositoryInterface::SEARCH_NAME; } else if input.get_option("only-vendor").as_bool().unwrap_or(false) { mode = RepositoryInterface::SEARCH_VENDOR; } - let r#type = input.get_option("type").as_string_opt().map(|s| s.to_string()); + let r#type = input + .get_option("type") + .as_string_opt() + .map(|s| s.to_string()); let tokens_arg = input.get_argument("tokens"); - let token_strings: Vec<String> = tokens_arg.as_array() - .map(|arr| arr.values().filter_map(|v| v.as_string().map(|s| s.to_string())).collect()) + let token_strings: Vec<String> = tokens_arg + .as_array() + .map(|arr| { + arr.values() + .filter_map(|v| v.as_string().map(|s| s.to_string())) + .collect() + }) .unwrap_or_default(); let mut query = implode(" ", &token_strings); if mode != RepositoryInterface::SEARCH_FULLTEXT { @@ -106,7 +137,11 @@ impl SearchCommand { name_length += 1; for result in &results { let description = result.description.clone().unwrap_or_default(); - let warning = if result.abandoned.is_some() { "<warning>! Abandoned !</warning> " } else { "" }; + let warning = if result.abandoned.is_some() { + "<warning>! Abandoned !</warning> " + } else { + "" + }; let remaining = width - name_length - warning.len() as i64 - 2; let description = if description.len() as i64 > remaining { format!("{}...", &description[..(remaining - 3) as usize]) @@ -125,7 +160,13 @@ impl SearchCommand { description )); } else { - io.write(&format!("{:<width$}{}{}", result.name, warning, description, width = name_length as usize)); + io.write(&format!( + "{:<width$}{}{}", + result.name, + warning, + description, + width = name_length as usize + )); } } } else if format == "json" { |
