allow comma separated bracketed list in function args
This commit is contained in:
parent
430747d06b
commit
0ded248e1e
25
src/args.rs
25
src/args.rs
@ -180,6 +180,10 @@ pub(crate) fn eat_call_args<I: Iterator<Item = Token>>(
|
|||||||
return Ok(CallArgs(args));
|
return Ok(CallArgs(args));
|
||||||
}
|
}
|
||||||
TokenKind::Symbol(Symbol::Comma) => break,
|
TokenKind::Symbol(Symbol::Comma) => break,
|
||||||
|
TokenKind::Symbol(Symbol::OpenSquareBrace) => {
|
||||||
|
val.push(tok);
|
||||||
|
val.extend(read_until_close_square_brace(toks));
|
||||||
|
}
|
||||||
TokenKind::Symbol(Symbol::OpenParen) => {
|
TokenKind::Symbol(Symbol::OpenParen) => {
|
||||||
val.push(tok);
|
val.push(tok);
|
||||||
val.extend(read_until_close_paren(toks));
|
val.extend(read_until_close_paren(toks));
|
||||||
@ -225,3 +229,24 @@ fn read_until_close_paren<I: Iterator<Item = Token>>(toks: &mut Peekable<I>) ->
|
|||||||
}
|
}
|
||||||
v
|
v
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn read_until_close_square_brace<I: Iterator<Item = Token>>(toks: &mut Peekable<I>) -> Vec<Token> {
|
||||||
|
let mut v = Vec::new();
|
||||||
|
let mut scope = 0;
|
||||||
|
for tok in toks {
|
||||||
|
match tok.kind {
|
||||||
|
TokenKind::Symbol(Symbol::CloseSquareBrace) => {
|
||||||
|
if scope <= 1 {
|
||||||
|
v.push(tok);
|
||||||
|
return v;
|
||||||
|
} else {
|
||||||
|
scope -= 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
TokenKind::Symbol(Symbol::OpenSquareBrace) => scope += 1,
|
||||||
|
_ => {}
|
||||||
|
}
|
||||||
|
v.push(tok)
|
||||||
|
}
|
||||||
|
v
|
||||||
|
}
|
||||||
|
@ -281,7 +281,11 @@ impl Value {
|
|||||||
if let Some(tok) = toks.peek() {
|
if let Some(tok) = toks.peek() {
|
||||||
if tok.is_symbol(Symbol::CloseSquareBrace) {
|
if tok.is_symbol(Symbol::CloseSquareBrace) {
|
||||||
toks.next();
|
toks.next();
|
||||||
return Ok(Value::List(Vec::new(), ListSeparator::Space, Brackets::Bracketed));
|
return Ok(Value::List(
|
||||||
|
Vec::new(),
|
||||||
|
ListSeparator::Space,
|
||||||
|
Brackets::Bracketed,
|
||||||
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
let inner = Self::from_tokens(toks, scope, super_selector)?;
|
let inner = Self::from_tokens(toks, scope, super_selector)?;
|
||||||
|
@ -68,3 +68,8 @@ test!(
|
|||||||
"@function f() {\n @return g();\n}\n@function g() {\n @return false;\n}\na {\n color: f();\n color: g();\n}\n",
|
"@function f() {\n @return g();\n}\n@function g() {\n @return false;\n}\na {\n color: f();\n color: g();\n}\n",
|
||||||
"a {\n color: false;\n color: false;\n}\n"
|
"a {\n color: false;\n color: false;\n}\n"
|
||||||
);
|
);
|
||||||
|
test!(
|
||||||
|
square_bracket_comma_separated,
|
||||||
|
"@function foo($a) {\n @return $a;\n}\n\na {\n color: foo([a, b]);\n}\n",
|
||||||
|
"a {\n color: [a, b];\n}\n"
|
||||||
|
);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user