From 4a88b5c888da073407431cf435527ce69b032e3a Mon Sep 17 00:00:00 2001 From: Aqua-sama Date: Tue, 24 Nov 2020 23:28:03 +0200 Subject: Refactoring Add doc/rc.pdf --- src/parser.rs | 73 ----------------------------------------------------------- 1 file changed, 73 deletions(-) delete mode 100644 src/parser.rs (limited to 'src/parser.rs') diff --git a/src/parser.rs b/src/parser.rs deleted file mode 100644 index 0c771f9..0000000 --- a/src/parser.rs +++ /dev/null @@ -1,73 +0,0 @@ -use std::io::Error; -use std::path::PathBuf; -use std::process::ExitStatus; - -// ; on prev cmd any -// && on prev cmd okay -// || on prev cmd fail - -mod command; -use command::{CommandInfo, RunOn, RunResult}; - -pub struct CommandLine(Vec); - -impl CommandLine { - pub fn new(line: &str) -> Self { - CommandLine(split(line)) - } - - pub fn run( - &self, - home: &PathBuf, - mut status: Option, - ) -> Result, Error> { - for cmd in &self.0 { - if cmd.when.can_run(&status) { - match cmd.run(&home, &status)? { - RunResult::Command(s) => status = Some(s), - RunResult::Builtin => {} - } - } - } - Ok(status) - } -} - -fn split(line: &str) -> Vec { - let mut r: Vec = Vec::new(); - - let mut next = line.chars().peekable(); - let mut iter = line.chars().enumerate(); - - let mut start_idx = 0; - let mut state = RunOn::Always; - - while let Some((i, v)) = { - next.next(); - iter.next() - } { - let n = next.peek(); - - if v == ';' { - r.push(CommandInfo::new(&line[start_idx..i], state)); - state = RunOn::Always; - start_idx = i + 1; - } else if v == '|' && n == Some(&'|') { - r.push(CommandInfo::new(&line[start_idx..i], state)); - state = RunOn::ExitFailure; - start_idx = i + 2; - next.next(); - iter.next(); - } else if v == '&' && n == Some(&'&') { - r.push(CommandInfo::new(&line[start_idx..i], state)); - state = RunOn::ExitSuccess; - start_idx = i + 2; - next.next(); - iter.next(); - } else if n == None { - r.push(CommandInfo::new(&line[start_idx..], state)); - } - } - - r -} -- cgit v1.2.1