remove all unwraps from style parsing

This commit is contained in:
ConnorSkees 2020-05-24 16:49:49 -04:00
parent d90d998ccd
commit 2a4d4f960b
2 changed files with 13 additions and 9 deletions

View File

@ -98,11 +98,11 @@ impl<'a> StyleParser<'a> {
while let Some(tok) = toks.peek().cloned() { while let Some(tok) = toks.peek().cloned() {
match tok.kind { match tok.kind {
'{' => { '{' => {
let span_before = toks.next().unwrap().pos; toks.next();
devour_whitespace(toks); devour_whitespace(toks);
loop { loop {
let property = let property =
self.parse_property(toks, super_property.clone(), span_before)?; self.parse_property(toks, super_property.clone(), tok.pos)?;
if let Some(tok) = toks.peek() { if let Some(tok) = toks.peek() {
if tok.kind == '{' { if tok.kind == '{' {
match self.eat_style_group(toks, property, scope)? { match self.eat_style_group(toks, property, scope)? {
@ -123,17 +123,17 @@ impl<'a> StyleParser<'a> {
continue; continue;
} }
} }
let value = self.parse_style_value(toks, scope, span_before)?; let value = self.parse_style_value(toks, scope, tok.pos)?;
match toks.peek().unwrap().kind { match toks.peek() {
'}' => { Some(Token { kind: '}', .. }) => {
styles.push(Style { property, value }); styles.push(Style { property, value });
} }
';' => { Some(Token { kind: ';', .. }) => {
toks.next(); toks.next();
devour_whitespace(toks); devour_whitespace(toks);
styles.push(Style { property, value }); styles.push(Style { property, value });
} }
'{' => { Some(Token { kind: '{', .. }) => {
styles.push(Style { styles.push(Style {
property: property.clone(), property: property.clone(),
value, value,
@ -144,7 +144,7 @@ impl<'a> StyleParser<'a> {
_ => unreachable!(), _ => unreachable!(),
} }
} }
_ => { Some(..) | None => {
devour_whitespace(toks); devour_whitespace(toks);
styles.push(Style { property, value }); styles.push(Style { property, value });
} }
@ -203,7 +203,7 @@ impl<'a> StyleParser<'a> {
devour_whitespace(toks); devour_whitespace(toks);
let property = eat_ident(toks, self.scope, self.super_selector, span_before)?; let property = eat_ident(toks, self.scope, self.super_selector, span_before)?;
devour_whitespace_or_comment(toks)?; devour_whitespace_or_comment(toks)?;
if toks.peek().is_some() && toks.peek().unwrap().kind == ':' { if let Some(Token { kind: ':', .. }) = toks.peek() {
toks.next(); toks.next();
devour_whitespace_or_comment(toks)?; devour_whitespace_or_comment(toks)?;
} else { } else {

View File

@ -234,3 +234,7 @@ error!(
invalid_binop_in_list, invalid_binop_in_list,
"a {color: foo % bar, baz;}", "Error: Undefined operation \"foo % bar\"." "a {color: foo % bar, baz;}", "Error: Undefined operation \"foo % bar\"."
); );
error!(
improperly_terminated_nested_style,
"a {foo: {bar: red", "Error: Expected identifier."
);