bracketed parameter in join()

This commit is contained in:
ConnorSkees 2020-04-02 18:04:44 -04:00
parent c7ff047e81
commit 8718673519
2 changed files with 47 additions and 4 deletions

View File

@ -146,14 +146,14 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
f.insert( f.insert(
"join".to_owned(), "join".to_owned(),
Box::new(|mut args, _| { Box::new(|mut args, _| {
max_args!(args, 3); max_args!(args, 4);
let (mut list1, sep1, brackets) = match arg!(args, 0, "list1") { let (mut list1, sep1, brackets) = match arg!(args, 0, "list1") {
Value::List(v, sep, brackets) => (v, sep, brackets), Value::List(v, sep, brackets) => (v, sep, brackets),
v => (vec![v], ListSeparator::Space, Brackets::None), v => (vec![v], ListSeparator::Space, Brackets::None),
}; };
let (list2, sep2) = match arg!(args, 1, "list2") { let list2 = match arg!(args, 1, "list2") {
Value::List(v, sep, ..) => (v, sep), Value::List(v, ..) => v,
v => (vec![v], ListSeparator::Space), v => vec![v],
}; };
let sep = match arg!( let sep = match arg!(
args, args,
@ -177,6 +177,24 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
_ => return Err("$separator: Must be \"space\", \"comma\", or \"auto\".".into()), _ => 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); list1.extend(list2);
Ok(Value::List(list1, sep, brackets)) Ok(Value::List(list1, sep, brackets))

View File

@ -182,6 +182,31 @@ test!(
"a {\n color: join((a, b), (c));\n}\n", "a {\n color: join((a, b), (c));\n}\n",
"a {\n color: 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_ident, "a {\n color: [a];\n}\n");
test!(bracketed_space_list, "a {\n color: [a b];\n}\n"); test!(bracketed_space_list, "a {\n color: [a b];\n}\n");
test!(bracketed_comma_list, "a {\n color: [a, b];\n}\n"); test!(bracketed_comma_list, "a {\n color: [a, b];\n}\n");