From 8718673519c7fb412c0d107ebd8e69e73d6a456b Mon Sep 17 00:00:00 2001 From: ConnorSkees <39542938+ConnorSkees@users.noreply.github.com> Date: Thu, 2 Apr 2020 18:04:44 -0400 Subject: [PATCH] bracketed parameter in join() --- src/builtin/list.rs | 26 ++++++++++++++++++++++---- tests/list.rs | 25 +++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 4 deletions(-) diff --git a/src/builtin/list.rs b/src/builtin/list.rs index b44e055..fa67373 100644 --- a/src/builtin/list.rs +++ b/src/builtin/list.rs @@ -146,14 +146,14 @@ pub(crate) fn register(f: &mut HashMap) { f.insert( "join".to_owned(), Box::new(|mut args, _| { - max_args!(args, 3); + max_args!(args, 4); let (mut list1, sep1, brackets) = match arg!(args, 0, "list1") { Value::List(v, sep, brackets) => (v, sep, brackets), v => (vec![v], ListSeparator::Space, Brackets::None), }; - let (list2, sep2) = match arg!(args, 1, "list2") { - Value::List(v, sep, ..) => (v, sep), - v => (vec![v], ListSeparator::Space), + let list2 = match arg!(args, 1, "list2") { + Value::List(v, ..) => v, + v => vec![v], }; let sep = match arg!( args, @@ -177,6 +177,24 @@ pub(crate) fn register(f: &mut HashMap) { _ => return Err("$separator: Must be \"space\", \"comma\", or \"auto\".".into()), }; + let brackets = match arg!( + args, + 3, + "bracketed" = Value::Ident("auto".to_owned(), QuoteKind::None) + ) { + Value::Ident(s, ..) => match s.as_str() { + "auto" => brackets, + _ => Brackets::Bracketed, + }, + v => { + if v.is_true()? { + Brackets::Bracketed + } else { + Brackets::None + } + } + }; + list1.extend(list2); Ok(Value::List(list1, sep, brackets)) diff --git a/tests/list.rs b/tests/list.rs index c138baa..6f6ddaa 100644 --- a/tests/list.rs +++ b/tests/list.rs @@ -182,6 +182,31 @@ test!( "a {\n color: join((a, b), (c));\n}\n", "a {\n color: a, b, c;\n}\n" ); +test!( + join_bracketed_null, + "a {\n color: join([a b], c, $bracketed: null);\n}\n", + "a {\n color: a b c;\n}\n" +); +test!( + join_bracketed_false, + "a {\n color: join([a b], c, $bracketed: false);\n}\n", + "a {\n color: a b c;\n}\n" +); +test!( + join_bracketed_auto_brackets, + "a {\n color: join([a b], c, $bracketed: auto);\n}\n", + "a {\n color: [a b c];\n}\n" +); +test!( + join_bracketed_auto_none, + "a {\n color: join(a b, c, $bracketed: auto);\n}\n", + "a {\n color: a b c;\n}\n" +); +test!( + join_bracketed_random_string, + "a {\n color: join(a b, c, $bracketed: afhsihsdhsdkhsd);\n}\n", + "a {\n color: [a b c];\n}\n" +); test!(bracketed_ident, "a {\n color: [a];\n}\n"); test!(bracketed_space_list, "a {\n color: [a b];\n}\n"); test!(bracketed_comma_list, "a {\n color: [a, b];\n}\n");