aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--askama_shared/src/generator.rs5
-rw-r--r--testing/templates/nested-macro-args.html9
-rw-r--r--testing/tests/macro.rs10
3 files changed, 23 insertions, 1 deletions
diff --git a/askama_shared/src/generator.rs b/askama_shared/src/generator.rs
index 638a25f..b0489ec 100644
--- a/askama_shared/src/generator.rs
+++ b/askama_shared/src/generator.rs
@@ -717,6 +717,7 @@ impl<'a, S: std::hash::BuildHasher> Generator<'a, S> {
let mut names = Buffer::new(0);
let mut values = Buffer::new(0);
+ let mut is_first_variable = true;
for (i, arg) in def.args.iter().enumerate() {
let expr = args.get(i).ok_or_else(|| {
CompileError::String(format!("macro '{}' takes more than {} arguments", name, i))
@@ -742,7 +743,9 @@ impl<'a, S: std::hash::BuildHasher> Generator<'a, S> {
// multiple times, e.g. in the case of macro
// parameters being used multiple times.
_ => {
- if i > 0 {
+ if is_first_variable {
+ is_first_variable = false
+ } else {
names.write(", ");
values.write(", ");
}
diff --git a/testing/templates/nested-macro-args.html b/testing/templates/nested-macro-args.html
new file mode 100644
index 0000000..03826f8
--- /dev/null
+++ b/testing/templates/nested-macro-args.html
@@ -0,0 +1,9 @@
+{%- macro outer(first) -%}
+{%- call inner(first, "second") -%}
+{%- endmacro -%}
+
+{%- macro inner(first, second) -%}
+{{ first }} {{ second }}
+{%- endmacro -%}
+
+{%- call outer("first") -%}
diff --git a/testing/tests/macro.rs b/testing/tests/macro.rs
index 459b1e2..7f7e4dc 100644
--- a/testing/tests/macro.rs
+++ b/testing/tests/macro.rs
@@ -53,3 +53,13 @@ fn test_short_circuit() {
let t = ShortCircuitTemplate {};
assert_eq!(t.render().unwrap(), "truetruetruefalsetruetrue");
}
+
+#[derive(Template)]
+#[template(path = "nested-macro-args.html")]
+struct NestedMacroArgsTemplate {}
+
+#[test]
+fn test_nested_macro_with_args() {
+ let t = NestedMacroArgsTemplate {};
+ assert_eq!(t.render().unwrap(), "first second");
+}