aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/src/command/search_command.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/shirabe/src/command/search_command.rs')
-rw-r--r--crates/shirabe/src/command/search_command.rs77
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" {