Improve chaining ops
This commit is contained in:
parent
9bbdf762ce
commit
d470074611
@ -8,7 +8,8 @@ use crate::value::Value;
|
|||||||
impl Add for Value {
|
impl Add for Value {
|
||||||
type Output = SassResult<Self>;
|
type Output = SassResult<Self>;
|
||||||
|
|
||||||
fn add(self, other: Self) -> Self::Output {
|
fn add(self, mut other: Self) -> Self::Output {
|
||||||
|
other = other.eval()?;
|
||||||
Ok(match self {
|
Ok(match self {
|
||||||
Self::Important | Self::True | Self::False => match other {
|
Self::Important | Self::True | Self::False => match other {
|
||||||
Self::Ident(s, QuoteKind::Double) | Self::Ident(s, QuoteKind::Single) => {
|
Self::Ident(s, QuoteKind::Double) | Self::Ident(s, QuoteKind::Single) => {
|
||||||
@ -55,7 +56,6 @@ impl Add for Value {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
// Self::List(..) => todo!(),
|
|
||||||
Self::Color(c) => match other {
|
Self::Color(c) => match other {
|
||||||
Self::Ident(s, QuoteKind::Double) | Self::Ident(s, QuoteKind::Single) => {
|
Self::Ident(s, QuoteKind::Double) | Self::Ident(s, QuoteKind::Single) => {
|
||||||
Value::Ident(format!("{}{}", c, s), QuoteKind::Double)
|
Value::Ident(format!("{}{}", c, s), QuoteKind::Double)
|
||||||
@ -67,7 +67,6 @@ impl Add for Value {
|
|||||||
_ => return Err(format!("Undefined operation \"{} + {}\".", c, other).into()),
|
_ => return Err(format!("Undefined operation \"{} + {}\".", c, other).into()),
|
||||||
},
|
},
|
||||||
Self::BinaryOp(..) | Self::Paren(..) => self.eval()?,
|
Self::BinaryOp(..) | Self::Paren(..) => self.eval()?,
|
||||||
// Self::Paren(..) => todo!(),
|
|
||||||
Self::Ident(s1, quotes1) => match other {
|
Self::Ident(s1, quotes1) => match other {
|
||||||
Self::Ident(s2, quotes2) => {
|
Self::Ident(s2, quotes2) => {
|
||||||
let quotes = match (quotes1, quotes2) {
|
let quotes = match (quotes1, quotes2) {
|
||||||
@ -100,10 +99,7 @@ impl Add for Value {
|
|||||||
};
|
};
|
||||||
Value::Ident(format!("{}{}", s1, c), quotes)
|
Value::Ident(format!("{}{}", s1, c), quotes)
|
||||||
}
|
}
|
||||||
Self::BinaryOp(..) | Self::Paren(..) => {
|
Self::BinaryOp(..) | Self::Paren(..) | Self::List(..) => todo!(),
|
||||||
return Self::Ident(s1, quotes1) + other.eval()?
|
|
||||||
}
|
|
||||||
Self::List(..) => todo!(),
|
|
||||||
},
|
},
|
||||||
_ => todo!(),
|
_ => todo!(),
|
||||||
})
|
})
|
||||||
@ -113,7 +109,8 @@ impl Add for Value {
|
|||||||
impl Sub for Value {
|
impl Sub for Value {
|
||||||
type Output = SassResult<Self>;
|
type Output = SassResult<Self>;
|
||||||
|
|
||||||
fn sub(self, other: Self) -> Self::Output {
|
fn sub(self, mut other: Self) -> Self::Output {
|
||||||
|
other = other.eval()?;
|
||||||
Ok(match self {
|
Ok(match self {
|
||||||
Self::Null => todo!(),
|
Self::Null => todo!(),
|
||||||
Self::Dimension(num, unit) => match other {
|
Self::Dimension(num, unit) => match other {
|
||||||
@ -138,7 +135,6 @@ impl Sub for Value {
|
|||||||
}
|
}
|
||||||
_ => todo!(),
|
_ => todo!(),
|
||||||
},
|
},
|
||||||
// Self::List(..) => todo!(),
|
|
||||||
Self::Color(c) => match other {
|
Self::Color(c) => match other {
|
||||||
Self::Ident(s, quotes) => {
|
Self::Ident(s, quotes) => {
|
||||||
let quotes = match quotes {
|
let quotes = match quotes {
|
||||||
@ -213,7 +209,8 @@ impl Sub for Value {
|
|||||||
impl Mul for Value {
|
impl Mul for Value {
|
||||||
type Output = SassResult<Self>;
|
type Output = SassResult<Self>;
|
||||||
|
|
||||||
fn mul(self, other: Self) -> Self::Output {
|
fn mul(self, mut other: Self) -> Self::Output {
|
||||||
|
other = other.eval()?;
|
||||||
Ok(match self {
|
Ok(match self {
|
||||||
Self::Null => todo!(),
|
Self::Null => todo!(),
|
||||||
Self::Dimension(num, unit) => match other {
|
Self::Dimension(num, unit) => match other {
|
||||||
@ -233,9 +230,6 @@ impl Mul for Value {
|
|||||||
Value::Dimension(num * num2, Unit::Mul(vec![unit, unit2]))
|
Value::Dimension(num * num2, Unit::Mul(vec![unit, unit2]))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Self::BinaryOp(..) | Self::Paren(..) => {
|
|
||||||
return Self::Dimension(num, unit) * other.eval()?
|
|
||||||
}
|
|
||||||
_ => {
|
_ => {
|
||||||
return Err(
|
return Err(
|
||||||
format!("Undefined operation \"{}{} * {}\".", num, unit, other).into(),
|
format!("Undefined operation \"{}{} * {}\".", num, unit, other).into(),
|
||||||
@ -277,7 +271,6 @@ impl Div for Value {
|
|||||||
}
|
}
|
||||||
_ => todo!(),
|
_ => todo!(),
|
||||||
},
|
},
|
||||||
// Self::List(..) => todo!(),
|
|
||||||
Self::Color(c) => match other {
|
Self::Color(c) => match other {
|
||||||
Self::Ident(s, quotes) => {
|
Self::Ident(s, quotes) => {
|
||||||
let quotes = match quotes {
|
let quotes = match quotes {
|
||||||
|
@ -76,3 +76,8 @@ test!(
|
|||||||
"a {\n color: 10 % 2;\n}\n",
|
"a {\n color: 10 % 2;\n}\n",
|
||||||
"a {\n color: 0;\n}\n"
|
"a {\n color: 0;\n}\n"
|
||||||
);
|
);
|
||||||
|
test!(
|
||||||
|
num_plus_div,
|
||||||
|
"a {\n color: 1 + 3/4;\n}\n",
|
||||||
|
"a {\n color: 1.75;\n}\n"
|
||||||
|
);
|
||||||
|
@ -383,3 +383,8 @@ test!(
|
|||||||
"a {\n color: \"foo\" == 'foo';\n}\n",
|
"a {\n color: \"foo\" == 'foo';\n}\n",
|
||||||
"a {\n color: true;\n}\n"
|
"a {\n color: true;\n}\n"
|
||||||
);
|
);
|
||||||
|
test!(
|
||||||
|
multiple_ident_sum,
|
||||||
|
"a {\n color: foo + 1 + bar + 2;\n}\n",
|
||||||
|
"a {\n color: foo1bar2;\n}\n"
|
||||||
|
);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user