diff --git a/src/builtin/list.rs b/src/builtin/list.rs index 3bd5e1f..a236748 100644 --- a/src/builtin/list.rs +++ b/src/builtin/list.rs @@ -4,6 +4,7 @@ use num_traits::{One, Signed, ToPrimitive, Zero}; use super::Builtin; use crate::common::{Brackets, ListSeparator, QuoteKind}; +use crate::error::SassResult; use crate::unit::Unit; use crate::value::{Number, Value}; @@ -294,15 +295,18 @@ pub(crate) fn register(f: &mut HashMap) { f.insert( "zip".to_owned(), Builtin::new(|args, scope, super_selector| { + let span = args.span(); let lists = args .get_variadic(scope, super_selector)? .into_iter() - .map(|x| match x.node { - Value::List(v, ..) => v, - Value::Map(m) => m.entries(), - v => vec![v], + .map(|x| { + Ok(match x.node.eval(span)?.node { + Value::List(v, ..) => v, + Value::Map(m) => m.entries(), + v => vec![v], + }) }) - .collect::>>(); + .collect::>>>()?; let len = lists.iter().map(|l| l.len()).min().unwrap_or(0); diff --git a/tests/list.rs b/tests/list.rs index 063b43f..8b2dbe1 100644 --- a/tests/list.rs +++ b/tests/list.rs @@ -303,3 +303,13 @@ test!( "a {\n color: zip(1px 1px 3px, solid dashed solid, red green blue);\n}\n", "a {\n color: 1px solid red, 1px dashed green, 3px solid blue;\n}\n" ); +test!( + zip_parens, + "a {\n color: zip((a, b, c));\n}\n", + "a {\n color: a, b, c;\n}\n" +); +test!( + zip_parens_length, + "a {\n color: length(zip((a, b, c)));\n}\n", + "a {\n color: 3;\n}\n" +);