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

View File

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