diff options
| author | acdenisSK <[email protected]> | 2018-07-19 11:42:28 +0200 |
|---|---|---|
| committer | acdenisSK <[email protected]> | 2018-07-19 11:42:28 +0200 |
| commit | e5c05a3e08a04260bb6e6132050c5ce0f4fb6f5e (patch) | |
| tree | 0f1a0f0640a91e965d40bd272c072e0c1b3a8d4c /src/framework | |
| parent | Style Line (diff) | |
| download | serenity-e5c05a3e08a04260bb6e6132050c5ce0f4fb6f5e.tar.xz serenity-e5c05a3e08a04260bb6e6132050c5ce0f4fb6f5e.zip | |
Use `current` to figure out the end quote
Diffstat (limited to 'src/framework')
| -rw-r--r-- | src/framework/standard/args.rs | 21 |
1 files changed, 4 insertions, 17 deletions
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<E: StdError> fmt::Display for Error<E> { type Result<T, E> = ::std::result::Result<T, Error<E>>; -fn find_start(s: &str, i: usize) -> Option<usize> { - 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<usize> { 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) }); } |