From e6ed91d0efab436c8a1ca4b6f701b6a9a4d96ccd Mon Sep 17 00:00:00 2001 From: Justin Wernick Date: Tue, 11 Apr 2023 20:45:11 +0200 Subject: Refactoring, move where whitespace is handled --- src/lib.rs | 3 +-- src/main.rs | 7 ++++--- src/parser.rs | 28 +++++++--------------------- 3 files changed, 12 insertions(+), 26 deletions(-) (limited to 'src') diff --git a/src/lib.rs b/src/lib.rs index 134ba97..5fbea79 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -7,12 +7,11 @@ use rustyline::error::ReadlineError; use std::{io, ops::ControlFlow}; use thiserror::Error; -pub fn run_command(user_input: String) -> Result, ShackleError> { +pub fn run_command(user_input: &str) -> Result, ShackleError> { match user_input.parse::() { 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 { 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::().unwrap(), - ShackleCommand::Whitespace - ); - } } -- cgit v1.2.3