From 9e7fe8f2f9344d171800f98b556751d981ff9b17 Mon Sep 17 00:00:00 2001 From: René Kijewski Date: Fri, 16 Jul 2021 16:14:30 +0200 Subject: Allow using "with" keyword in "let" statements Askama uses the syntax `{% when Variant with (parameters) %}` in `{% match %}` blocks. This change allows the optional use of the keyword "with" in "let" and "if let" statements, too. --- askama_shared/src/parser.rs | 1 + testing/tests/let_destructoring.rs | 14 ++++++++++++++ 2 files changed, 15 insertions(+) diff --git a/askama_shared/src/parser.rs b/askama_shared/src/parser.rs index 261887b..d2b2cd1 100644 --- a/askama_shared/src/parser.rs +++ b/askama_shared/src/parser.rs @@ -442,6 +442,7 @@ fn target(i: &[u8]) -> IResult<&[u8], Target<'_>> { // match structs let (i, path) = opt(path)(i)?; if let Some(path) = path { + let (i, _) = opt(ws(tag("with")))(i)?; let (i, is_unnamed_struct) = opt_opening_paren(i)?; if is_unnamed_struct { let (i, targets) = alt(( diff --git a/testing/tests/let_destructoring.rs b/testing/tests/let_destructoring.rs index 20f7fff..5cb7ae4 100644 --- a/testing/tests/let_destructoring.rs +++ b/testing/tests/let_destructoring.rs @@ -105,3 +105,17 @@ fn test_let_destruct_with_path() { }; assert_eq!(t.render().unwrap(), "hello"); } + +#[derive(Template)] +#[template(source = "{% let some::path::Struct with (v) = v %}{{v}}", ext = "txt")] +struct LetDestructoringWithPathAndWithKeyword<'a> { + v: some::path::Struct<'a>, +} + +#[test] +fn test_let_destruct_with_path_and_with_keyword() { + let t = LetDestructoringWithPathAndWithKeyword { + v: some::path::Struct("hello"), + }; + assert_eq!(t.render().unwrap(), "hello"); +} -- cgit