diff options
-rw-r--r-- | askama_derive/src/parser/node.rs | 7 | ||||
-rw-r--r-- | testing/templates/macro-no-args.html | 21 | ||||
-rw-r--r-- | testing/tests/macro.rs | 10 |
3 files changed, 36 insertions, 2 deletions
diff --git a/askama_derive/src/parser/node.rs b/askama_derive/src/parser/node.rs index fc6860e..8c122af 100644 --- a/askama_derive/src/parser/node.rs +++ b/askama_derive/src/parser/node.rs @@ -133,12 +133,13 @@ fn block_call(i: &str) -> IResult<&str, Node<'_>> { cut(tuple(( opt(tuple((ws(identifier), ws(tag("::"))))), ws(identifier), - ws(Expr::parse_arguments), + opt(ws(Expr::parse_arguments)), opt(expr_handle_ws), ))), )); let (i, (pws, _, (scope, name, args, nws))) = p(i)?; let scope = scope.map(|(scope, _)| scope); + let args = args.unwrap_or_default(); Ok((i, Node::Call(Ws(pws, nws), scope, name, args))) } @@ -415,7 +416,7 @@ fn block_macro<'a>(i: &'a str, s: &State<'_>) -> IResult<&'a str, Node<'a>> { ws(keyword("macro")), cut(tuple(( ws(identifier), - ws(parameters), + opt(ws(parameters)), opt(expr_handle_ws), |i| tag_block_end(i, s), ))), @@ -435,6 +436,8 @@ fn block_macro<'a>(i: &'a str, s: &State<'_>) -> IResult<&'a str, Node<'a>> { assert_ne!(name, "super", "invalid macro name 'super'"); + let params = params.unwrap_or_default(); + Ok(( i, Node::Macro( diff --git a/testing/templates/macro-no-args.html b/testing/templates/macro-no-args.html new file mode 100644 index 0000000..b70ee8c --- /dev/null +++ b/testing/templates/macro-no-args.html @@ -0,0 +1,21 @@ +1 + +{%- macro empty -%} +the best thing +{%- endmacro -%} + +1 + +{%- call empty() -%} + +1 + +{%- macro whole() -%} +we've ever done +{%- endmacro -%} + +11 + +{%- call whole -%} + +11 diff --git a/testing/tests/macro.rs b/testing/tests/macro.rs index 6b0eca5..7e910a9 100644 --- a/testing/tests/macro.rs +++ b/testing/tests/macro.rs @@ -13,6 +13,16 @@ fn test_macro() { } #[derive(Template)] +#[template(path = "macro-no-args.html")] +struct MacroNoArgsTemplate; + +#[test] +fn test_macro_no_args() { + let t = MacroNoArgsTemplate; + assert_eq!(t.render().unwrap(), "11the best thing111we've ever done11"); +} + +#[derive(Template)] #[template(path = "import.html")] struct ImportTemplate<'a> { s: &'a str, |