diff options
-rw-r--r-- | src/lib.rs | 3 | ||||
-rw-r--r-- | src/main.rs | 7 | ||||
-rw-r--r-- | src/parser.rs | 28 |
3 files changed, 12 insertions, 26 deletions
@@ -7,12 +7,11 @@ use rustyline::error::ReadlineError; use std::{io, ops::ControlFlow}; use thiserror::Error; -pub fn run_command(user_input: String) -> Result<ControlFlow<(), ()>, ShackleError> { +pub fn run_command(user_input: &str) -> Result<ControlFlow<(), ()>, ShackleError> { match user_input.parse::<ShackleCommand>() { Err(parse_error) => { println!("{}", parse_error); } - Ok(ShackleCommand::Whitespace) => {} Ok(ShackleCommand::Exit) => { return Ok(ControlFlow::Break(())); } diff --git a/src/main.rs b/src/main.rs index acb6df2..99b755d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -22,7 +22,7 @@ fn main_inner() -> Result<(), ShackleError> { let args = Args::parse(); match args.command { Some(user_input) => { - run_command(user_input)?; + run_command(&user_input)?; } None => { run_interactive_loop()?; @@ -36,9 +36,10 @@ fn run_interactive_loop() -> Result<(), ShackleError> { let mut rl = DefaultEditor::new()?; loop { let readline = rl.readline("> "); - match readline { + match readline.as_ref().map(|user_input| user_input.trim()) { + Ok("") => {} Ok(user_input) => { - rl.add_history_entry(user_input.as_str())?; + rl.add_history_entry(user_input)?; match run_command(user_input) { Ok(control_flow) => { if control_flow.is_break() { diff --git a/src/parser.rs b/src/parser.rs index 3a7d129..38b88f3 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -8,8 +8,6 @@ use thiserror::Error; #[derive(Parser, Clone, Debug, PartialEq, Eq)] #[command(name = "")] pub enum ShackleCommand { - #[command(skip)] - Whitespace, Exit, /// List all repositories available List, @@ -80,17 +78,13 @@ impl FromStr for ShackleCommand { fn from_str(s: &str) -> Result<Self, Self::Err> { let trimmed = s.trim(); - if trimmed.len() == 0 { - Ok(ShackleCommand::Whitespace) - } else { - let lexed = shlex::split(trimmed); - match lexed { - None => Err(ParserError::LexerError("Incomplete input".to_string())), - Some(lexed) => { - let parsed = - ShackleCommand::try_parse_from(["".to_owned()].into_iter().chain(lexed))?; - Ok(parsed) - } + let lexed = shlex::split(trimmed); + match lexed { + None => Err(ParserError::LexerError("Incomplete input".to_string())), + Some(lexed) => { + let parsed = + ShackleCommand::try_parse_from(["".to_owned()].into_iter().chain(lexed))?; + Ok(parsed) } } } @@ -154,12 +148,4 @@ mod test { }) ); } - - #[test] - fn it_parses_whitespace_correctly() { - assert_eq!( - " ".parse::<ShackleCommand>().unwrap(), - ShackleCommand::Whitespace - ); - } } |