Properly interpolate values coming from variables
This commit is contained in:
parent
1761af0a01
commit
c7efbc7e05
@ -1,5 +1,7 @@
|
||||
use crate::common::{Scope, Symbol};
|
||||
use crate::utils::{devour_whitespace, devour_whitespace_or_comment, eat_interpolation, IsWhitespace};
|
||||
use crate::utils::{
|
||||
devour_whitespace, devour_whitespace_or_comment, eat_interpolation, IsWhitespace,
|
||||
};
|
||||
use crate::{Token, TokenKind};
|
||||
use std::fmt::{self, Display};
|
||||
use std::iter::Peekable;
|
||||
|
@ -1,4 +1,5 @@
|
||||
use crate::common::{Pos, Symbol};
|
||||
use crate::lexer::Lexer;
|
||||
use crate::value::Value;
|
||||
use crate::{Scope, Token, TokenKind};
|
||||
use std::iter::{Iterator, Peekable};
|
||||
@ -50,10 +51,9 @@ pub(crate) fn eat_interpolation<I: Iterator<Item = Token>>(
|
||||
TokenKind::Symbol(Symbol::OpenCurlyBrace) => {
|
||||
todo!("invalid character in interpolation")
|
||||
}
|
||||
TokenKind::Variable(ref v) => val.push(Token {
|
||||
pos: tok.pos,
|
||||
kind: TokenKind::Ident(scope.vars.get(v).unwrap().to_string()),
|
||||
}),
|
||||
TokenKind::Variable(ref v) => val.extend(
|
||||
Lexer::new(&scope.vars.get(v).unwrap().to_string()).collect::<Vec<Token>>(),
|
||||
),
|
||||
TokenKind::Interpolation => val.extend(eat_interpolation(tokens, scope)),
|
||||
_ => val.push(tok),
|
||||
}
|
||||
|
@ -299,6 +299,11 @@ mod test_selectors {
|
||||
"a /* foo */ b {\n color: red;\n}\n",
|
||||
"a b {\n color: red;\n}\n"
|
||||
);
|
||||
test!(
|
||||
interpolates_comma,
|
||||
"$x: oo, ba;\nf#{$x}r {\n baz {\n color: red;\n }\n}\n",
|
||||
"foo baz, bar baz {\n color: red;\n}\n"
|
||||
);
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
|
Loading…
x
Reference in New Issue
Block a user