HACK: parse interpolations into values then tokens

This commit is contained in:
ConnorSkees 2020-02-02 21:11:22 -05:00
parent c7f34f573f
commit 6faebf5105
3 changed files with 26 additions and 11 deletions

View File

@ -48,9 +48,6 @@ pub(crate) fn parse_interpolation<I: Iterator<Item = Token>>(
while let Some(tok) = tokens.next() { while let Some(tok) = tokens.next() {
match tok.kind { match tok.kind {
TokenKind::Symbol(Symbol::CloseCurlyBrace) => break, TokenKind::Symbol(Symbol::CloseCurlyBrace) => break,
TokenKind::Symbol(Symbol::SingleQuote) | TokenKind::Symbol(Symbol::DoubleQuote) => {
continue
}
TokenKind::Symbol(Symbol::OpenCurlyBrace) => { TokenKind::Symbol(Symbol::OpenCurlyBrace) => {
todo!("invalid character in interpolation") todo!("invalid character in interpolation")
} }
@ -61,7 +58,14 @@ pub(crate) fn parse_interpolation<I: Iterator<Item = Token>>(
_ => val.push(tok), _ => val.push(tok),
} }
} }
val Lexer::new(
&Value::from_tokens(&mut val.into_iter().peekable(), scope)
.unwrap()
.to_string()
.replace("\"", "")
.replace("'", ""),
)
.collect::<Vec<Token>>()
} }
pub(crate) struct VariableDecl { pub(crate) struct VariableDecl {

View File

@ -220,8 +220,11 @@ impl Value {
todo!() todo!()
} }
pub fn unquote(&mut self) -> &mut Self { pub fn unquote(self) -> Self {
todo!() match self {
Self::Ident(s1, _) => Self::Ident(s1, QuoteKind::None),
_ => todo!(),
}
} }
pub fn from_tokens<I: Iterator<Item = Token>>( pub fn from_tokens<I: Iterator<Item = Token>>(
@ -327,6 +330,9 @@ impl Value {
); );
Some(Value::Paren(Box::new(val))) Some(Value::Paren(Box::new(val)))
} }
TokenKind::Symbol(Symbol::BitAnd) => {
Some(Value::Ident(String::from("&"), QuoteKind::None))
}
TokenKind::Ident(mut s) => { TokenKind::Ident(mut s) => {
while let Some(tok) = toks.peek() { while let Some(tok) = toks.peek() {
match tok.kind.clone() { match tok.kind.clone() {

View File

@ -175,11 +175,16 @@ test!(
"a {\n&--b {\n color: red;\n}\n}\n", "a {\n&--b {\n color: red;\n}\n}\n",
"a--b {\n color: red;\n}\n" "a--b {\n color: red;\n}\n"
); );
// test!( test!(
// bem_underscore_selector, bem_underscore_selector,
// "a {\n&__b {\n color: red;\n}\n}\n", "a {\n&__b {\n color: red;\n}\n}\n",
// "a__b {\n color: red;\n}\n" "a__b {\n color: red;\n}\n"
// ); );
test!(
selector_interpolation_addition,
"#{\"foo\" + \" bar\"}baz {color: red;}",
"foo barbaz {\n color: red;\n}\n"
);
test!( test!(
selector_interpolation_start, selector_interpolation_start,
"#{a}bc {\n color: red;\n}\n", "#{a}bc {\n color: red;\n}\n",