Implement ident addition

This commit is contained in:
ConnorSkees 2020-02-02 11:17:23 -05:00
parent 6bc96aeff4
commit ffff80109b
3 changed files with 147 additions and 3 deletions

View File

@ -454,7 +454,7 @@ impl<'a> StyleSheetParser<'a> {
match expr { match expr {
Expr::Style(s) => stmts.push(Stmt::Style(s)), Expr::Style(s) => stmts.push(Stmt::Style(s)),
#[allow(clippy::redundant_closure)] #[allow(clippy::redundant_closure)]
Expr::Styles(s) => stmts.extend(s.into_iter().map(|s| Stmt::Style(s))), Expr::Styles(s) => stmts.extend(s.into_iter().map(Stmt::Style)),
Expr::MixinDecl(name, mixin) => { Expr::MixinDecl(name, mixin) => {
scope.mixins.insert(name, *mixin); scope.mixins.insert(name, *mixin);
} }

View File

@ -95,7 +95,33 @@ impl Add for Value {
// Self::Color(..) => todo!(), // Self::Color(..) => todo!(),
// Self::BinaryOp(..) => todo!(), // Self::BinaryOp(..) => todo!(),
// Self::Paren(..) => todo!(), // Self::Paren(..) => todo!(),
// Self::Ident(..) => todo!(), Self::Ident(s1, quotes1) => match other {
Self::Ident(s2, quotes2) => {
let quotes = match (quotes1, quotes2) {
(QuoteKind::Double, _)
| (QuoteKind::Single, _)
| (_, QuoteKind::Double)
| (_, QuoteKind::Single) => QuoteKind::Double,
_ => QuoteKind::None,
};
Value::Ident(format!("{}{}", s1, s2), quotes)
}
Self::Important | Self::True | Self::False | Self::Dimension(..) => {
let quotes = match quotes1 {
QuoteKind::Double | QuoteKind::Single => QuoteKind::Double,
QuoteKind::None => QuoteKind::None,
};
Value::Ident(format!("{}{}", s1, other), quotes)
}
Self::Null => {
let quotes = match quotes1 {
QuoteKind::Double | QuoteKind::Single => QuoteKind::Double,
QuoteKind::None => QuoteKind::None,
};
Value::Ident(s1, quotes)
}
_ => todo!(),
},
_ => todo!(), _ => todo!(),
} }
} }
@ -115,7 +141,10 @@ impl Display for Value {
.join(sep.as_str()) .join(sep.as_str())
), ),
Self::Color(c) => write!(f, "{}", c), Self::Color(c) => write!(f, "{}", c),
Self::BinaryOp(lhs, op, rhs) => write!(f, "{}{}{}", lhs, op, rhs), Self::BinaryOp(lhs, op, rhs) => match op {
Op::Plus => write!(f, "{}", *lhs.clone() + *rhs.clone()),
_ => write!(f, "{}{}{}", lhs, op, rhs),
},
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::Ident(val, kind) => write!(f, "{}{}{}", kind.as_str(), val, kind.as_str()),
Self::True => write!(f, "true"), Self::True => write!(f, "true"),

View File

@ -49,3 +49,118 @@ test!(
"a {\n color: 1 (red blue);\n}\n", "a {\n color: 1 (red blue);\n}\n",
"a {\n color: 1 red blue;\n}\n" "a {\n color: 1 red blue;\n}\n"
); );
test!(
adds_idents,
"a {\n color: red + blue;\n}\n",
"a {\n color: redblue;\n}\n"
);
test!(
adds_dbl_quoted_idents,
"a {\n color: \"red\" + \"blue\";\n}\n",
"a {\n color: \"redblue\";\n}\n"
);
test!(
adds_sgl_quoted_idents,
"a {\n color: 'red' + 'blue';\n}\n",
"a {\n color: \"redblue\";\n}\n"
);
test!(
adds_dbl_and_un_quoted_idents,
"a {\n color: \"red\" + blue;\n}\n",
"a {\n color: \"redblue\";\n}\n"
);
test!(
adds_sgl_and_un_quoted_idents,
"a {\n color: 'red' + blue;\n}\n",
"a {\n color: \"redblue\";\n}\n"
);
test!(
adds_un_and_dbl_quoted_idents,
"a {\n color: red + \"blue\";\n}\n",
"a {\n color: \"redblue\";\n}\n"
);
test!(
adds_un_and_sgl_quoted_idents,
"a {\n color: red + 'blue';\n}\n",
"a {\n color: \"redblue\";\n}\n"
);
test!(
adds_sgl_and_dbl_quoted_idents,
"a {\n color: 'red' + \"blue\";\n}\n",
"a {\n color: \"redblue\";\n}\n"
);
test!(
adds_dbl_and_sgl_quoted_idents,
"a {\n color: \"red\" + 'blue';\n}\n",
"a {\n color: \"redblue\";\n}\n"
);
test!(
adds_ident_true,
"a {\n color: red + true;\n}\n",
"a {\n color: redtrue;\n}\n"
);
test!(
adds_dbl_quoted_ident_true,
"a {\n color: \"red\" + true;\n}\n",
"a {\n color: \"redtrue\";\n}\n"
);
test!(
adds_ident_false,
"a {\n color: red + false;\n}\n",
"a {\n color: redfalse;\n}\n"
);
test!(
adds_dbl_quoted_ident_false,
"a {\n color: \"red\" + false;\n}\n",
"a {\n color: \"redfalse\";\n}\n"
);
test!(
adds_ident_important,
"a {\n color: red + !important;\n}\n",
"a {\n color: red!important;\n}\n"
);
test!(
adds_ident_null,
"a {\n color: red + null;\n}\n",
"a {\n color: red;\n}\n"
);
test!(
adds_dbl_quoted_ident_null,
"a {\n color: \"red\" + null;\n}\n",
"a {\n color: \"red\";\n}\n"
);
test!(
adds_sgl_quoted_ident_null,
"a {\n color: 'red' + null;\n}\n",
"a {\n color: \"red\";\n}\n"
);
test!(
adds_ident_number,
"a {\n color: red + 1;\n}\n",
"a {\n color: red1;\n}\n"
);
test!(
adds_dbl_quoted_ident_number,
"a {\n color: \"red\" + 1;\n}\n",
"a {\n color: \"red1\";\n}\n"
);
test!(
adds_sgl_quoted_ident_number,
"a {\n color: 'red' + 1;\n}\n",
"a {\n color: \"red1\";\n}\n"
);
test!(
adds_ident_dimension,
"a {\n color: red + 1px;\n}\n",
"a {\n color: red1px;\n}\n"
);
test!(
adds_dbl_quoted_ident_dimension,
"a {\n color: \"red\" + 1px;\n}\n",
"a {\n color: \"red1px\";\n}\n"
);
test!(
adds_sgl_quoted_ident_dimension,
"a {\n color: 'red' + 1px;\n}\n",
"a {\n color: \"red1px\";\n}\n"
);