Implement addition between colors and idents

This commit is contained in:
ConnorSkees 2020-02-09 10:49:37 -05:00
parent 901c911b5b
commit 2b3d8fcce7
3 changed files with 35 additions and 2 deletions

View File

@ -1,5 +1,4 @@
use std::collections::BTreeMap; use std::collections::BTreeMap;
use std::convert::TryInto;
use num_bigint::BigInt; use num_bigint::BigInt;

View File

@ -24,7 +24,14 @@ impl Add for Value {
_ => todo!(), _ => todo!(),
}, },
// Self::List(..) => todo!(), // Self::List(..) => todo!(),
// Self::Color(..) => todo!(), Self::Color(c) => match other {
Self::Ident(s, QuoteKind::Double) | Self::Ident(s, QuoteKind::Single) => {
Value::Ident(format!("{}{}", c, s), QuoteKind::Double)
}
Self::Null => Value::Ident(c.to_string(), QuoteKind::None),
Self::Color(..) => todo!("figure out if it's possible to add colors"),
_ => Value::Ident(format!("{}{}", c, other), QuoteKind::None),
}
// Self::BinaryOp(..) => todo!(), // Self::BinaryOp(..) => todo!(),
// Self::Paren(..) => todo!(), // Self::Paren(..) => todo!(),
Self::Ident(s1, quotes1) => match other { Self::Ident(s1, quotes1) => match other {
@ -52,6 +59,13 @@ impl Add for Value {
}; };
Value::Ident(s1, quotes) Value::Ident(s1, quotes)
} }
Self::Color(c) => {
let quotes = match quotes1 {
QuoteKind::Double | QuoteKind::Single => QuoteKind::Double,
QuoteKind::None => QuoteKind::None,
};
Value::Ident(format!("{}{}", s1, c), quotes)
}
_ => todo!(), _ => todo!(),
}, },
_ => todo!(), _ => todo!(),

View File

@ -116,3 +116,23 @@ test!(
"a {\n color: hsla($hue: 193, $saturation: 67%, $luminance: 99, $alpha: .6);\n}\n", "a {\n color: hsla($hue: 193, $saturation: 67%, $luminance: 99, $alpha: .6);\n}\n",
"a {\n color: rgba(251, 253, 254, 0.6);\n}\n" "a {\n color: rgba(251, 253, 254, 0.6);\n}\n"
); );
test!(
color_plus_ident,
"a {\n color: red + foo;\n}\n",
"a {\n color: redfoo;\n}\n"
);
test!(
ident_plus_color,
"a {\n color: foo + red;\n}\n",
"a {\n color: foored;\n}\n"
);
test!(
color_minus_ident,
"a {\n color: red - foo;\n}\n",
"a {\n color: red-foo;\n}\n"
);
test!(
ident_minus_color,
"a {\n color: foo - red;\n}\n",
"a {\n color: foo-red;\n}\n"
);