From a64dcaf3944f9d76b211605d9296e4c1ef4425ef Mon Sep 17 00:00:00 2001 From: ConnorSkees <39542938+ConnorSkees@users.noreply.github.com> Date: Fri, 20 Mar 2020 23:34:23 -0400 Subject: [PATCH] properly bubble up parsing errors --- src/utils.rs | 2 +- src/value/parse.rs | 16 ++++------------ 2 files changed, 5 insertions(+), 13 deletions(-) diff --git a/src/utils.rs b/src/utils.rs index 1292065..7ba381b 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -136,7 +136,7 @@ pub(crate) fn eat_variable_value>( } } devour_whitespace(toks); - let val = Value::from_tokens(&mut raw.into_iter().peekable(), scope, super_selector).unwrap(); + let val = Value::from_tokens(&mut raw.into_iter().peekable(), scope, super_selector)?; Ok(VariableDecl::new(val, default, global)) } diff --git a/src/value/parse.rs b/src/value/parse.rs index a0b493b..662dd2d 100644 --- a/src/value/parse.rs +++ b/src/value/parse.rs @@ -88,10 +88,7 @@ impl Value { TokenKind::Symbol(Symbol::Comma) => { toks.next(); devour_whitespace_or_comment(toks); - let right = match Self::from_tokens(toks, scope, super_selector) { - Ok(x) => x, - Err(_) => return Ok(left), - }; + let right = Self::from_tokens(toks, scope, super_selector)?; if let Value::List(v, ListSeparator::Comma) = right { let mut v2 = vec![left]; v2.extend(v); @@ -117,18 +114,12 @@ impl Value { }; toks.next(); devour_whitespace_or_comment(toks); - let right = match Self::from_tokens(toks, scope, super_selector) { - Ok(x) => x, - Err(_) => return Ok(left), - }; + let right = Self::from_tokens(toks, scope, super_selector)?; Ok(Value::BinaryOp(Box::new(left), op, Box::new(right))) } _ => { devour_whitespace_or_comment(toks); - let right = match Self::from_tokens(toks, scope, super_selector) { - Ok(x) => x, - Err(_) => return Ok(left), - }; + let right = Self::from_tokens(toks, scope, super_selector)?; if let Value::List(v, ListSeparator::Space) = right { let mut v2 = vec![left]; v2.extend(v); @@ -302,6 +293,7 @@ impl Value { TokenKind::Keyword(Keyword::Through(s)) => Ok(Value::Ident(s, QuoteKind::None)), TokenKind::Keyword(Keyword::To(s)) => Ok(Value::Ident(s, QuoteKind::None)), TokenKind::Unknown(c) => Ok(Value::Ident(c.to_string(), QuoteKind::None)), + TokenKind::AtRule(_) => return Err("expected \";\".".into()), v => { dbg!(v); panic!("Unexpected token in value parsing")