Initial implementation of parens in Value

This commit is contained in:
ConnorSkees 2020-01-25 10:11:46 -05:00
parent 05503b3a16
commit 7fe9da3d2c
2 changed files with 26 additions and 1 deletions

View File

@ -1312,4 +1312,19 @@ mod test_values {
"a {\n color: 1, 2, 3;\n}\n"
);
test!(number, "a {\n color: 1;\n}\n");
test!(
removes_paren_around_single_value,
"a {\n color: (red);\n}\n",
"a {\n color: red;\n}\n"
);
test!(
removes_paren_around_space_list,
"a {\n color: (red blue);\n}\n",
"a {\n color: red blue;\n}\n"
);
test!(
removes_paren_around_item_in_list,
"a {\n color: 1 (red blue);\n}\n",
"a {\n color: 1 red blue;\n}\n"
);
}

View File

@ -127,7 +127,7 @@ impl Display for Value {
.join(sep.as_str())
),
Self::Color(c) => write!(f, "{}", c),
Self::Paren(val) => write!(f, "({})", val),
Self::Paren(val) => write!(f, "{}", val),
Self::Ident(val, kind) => write!(f, "{}{}{}", kind.as_str(), val, kind.as_str()),
Self::True => write!(f, "true"),
Self::False => write!(f, "false"),
@ -165,6 +165,7 @@ impl Value {
};
Some(Value::List(vec![left, right], ListSeparator::Comma))
}
TokenKind::Symbol(Symbol::CloseParen) => Some(left),
TokenKind::Symbol(Symbol::Plus) => {
toks.next();
devour_whitespace_or_comment(toks);
@ -222,6 +223,15 @@ impl Value {
unit,
))
}
TokenKind::Symbol(Symbol::OpenParen) => {
devour_whitespace_or_comment(toks);
let val = Self::from_tokens(toks, scope)?;
assert_eq!(
toks.next().unwrap().kind,
TokenKind::Symbol(Symbol::CloseParen)
);
Some(Value::Paren(Box::new(val)))
}
TokenKind::Ident(mut s) => {
while let Some(tok) = toks.peek() {
match tok.kind.clone() {