From e5c05a3e08a04260bb6e6132050c5ce0f4fb6f5e Mon Sep 17 00:00:00 2001 From: acdenisSK Date: Thu, 19 Jul 2018 11:42:28 +0200 Subject: Use `current` to figure out the end quote --- src/framework/standard/args.rs | 21 ++++----------------- 1 file changed, 4 insertions(+), 17 deletions(-) (limited to 'src/framework') diff --git a/src/framework/standard/args.rs b/src/framework/standard/args.rs index 310fcf0..d561e30 100644 --- a/src/framework/standard/args.rs +++ b/src/framework/standard/args.rs @@ -53,20 +53,6 @@ impl fmt::Display for Error { type Result = ::std::result::Result>; -fn find_start(s: &str, i: usize) -> Option { - if i > s.len() { - return None; - } - - let mut start = i - 1; - - while !s.is_char_boundary(start) { - start -= 1; - } - - Some(start) -} - fn find_end(s: &str, i: usize) -> Option { if i > s.len() { return None; @@ -165,15 +151,16 @@ impl<'a> Lexer<'a> { self.next(); } + let is_quote = self.current().map_or(false, |s| s == "\""); self.next(); let end = self.offset; - return Some(if self.at_end() && &self.msg[find_start(self.msg, end).unwrap()..end] != "\"" { + return Some(if is_quote { + Token::new(TokenKind::QuotedArgument, &self.msg[start..end], start) + } else { // We're missing an end quote. View this as a normal argument. Token::new(TokenKind::Argument, &self.msg[start..], start) - } else { - Token::new(TokenKind::QuotedArgument, &self.msg[start..end], start) }); } -- cgit v1.2.3