cli: Only suggest the typo correction and exit

This commit is contained in:
Vinícius Miguel 2021-04-08 12:48:52 -03:00
parent 5ca99c101e
commit c94b49f013
2 changed files with 11 additions and 14 deletions

View File

@ -6,7 +6,7 @@ use std::{
}; };
use strsim::normalized_damerau_levenshtein; use strsim::normalized_damerau_levenshtein;
use oof::{Flag, arg_flag, flag}; use oof::{arg_flag, flag};
#[derive(PartialEq, Eq, Debug)] #[derive(PartialEq, Eq, Debug)]
@ -98,8 +98,10 @@ pub fn parse_args_from(mut args: Vec<OsString>) -> crate::Result<ParsedArgs> {
let mut flags_info = vec![flag!('y', "yes"), flag!('n', "no")]; let mut flags_info = vec![flag!('y', "yes"), flag!('n', "no")];
let process_compression_command = |args, flags_info: Vec<Flag>| { let parsed_args = match oof::pop_subcommand(&mut args, subcommands) {
let (args, flags) = oof::filter_flags(args, &flags_info)?; Some(&"compress") => {
// `ouch compress` subcommand
let (args, flags) = oof::filter_flags(args, &flags_info)?;
let mut files: Vec<PathBuf> = args.into_iter().map(PathBuf::from).collect(); let mut files: Vec<PathBuf> = args.into_iter().map(PathBuf::from).collect();
if files.len() < 2 { if files.len() < 2 {
@ -115,24 +117,15 @@ pub fn parse_args_from(mut args: Vec<OsString>) -> crate::Result<ParsedArgs> {
files, files,
compressed_output_path, compressed_output_path,
}; };
Ok(ParsedArgs { command, flags }) ParsedArgs { command, flags }
};
let parsed_args = match oof::pop_subcommand(&mut args, subcommands) {
Some(&"compress") => {
process_compression_command(args, flags_info)?
} }
// Defaults to decompression when there is no subcommand // Defaults to decompression when there is no subcommand
None => { None => {
flags_info.push(arg_flag!('o', "output")); flags_info.push(arg_flag!('o', "output"));
{ {
let first_arg = args.first().unwrap(); let first_arg = args.first().unwrap();
if is_typo(first_arg) { if is_typo(first_arg) {
println!("Did you mean `ouch compress`?"); return Err(crate::Error::CompressionTypo);
// TODO: ask for permission ?
args.remove(0);
return process_compression_command(args, flags_info);
} }
} }

View File

@ -17,6 +17,7 @@ pub enum Error {
OofError, OofError,
CompressingRootFolder, CompressingRootFolder,
MissingArgumentsForCompression, MissingArgumentsForCompression,
CompressionTypo,
WalkdirError, WalkdirError,
} }
@ -78,6 +79,9 @@ impl fmt::Display for Error {
Error::IoError(io_err) => { Error::IoError(io_err) => {
write!(f, "{}[ERROR]{} {}", colors::red(), colors::reset(), io_err) write!(f, "{}[ERROR]{} {}", colors::red(), colors::reset(), io_err)
} }
Error::CompressionTypo =>{
write!(f, "Did you mean {}ouch compress{}?", colors::magenta(), colors::reset())
}
_err => { _err => {
// TODO // TODO
write!(f, "") write!(f, "")