Allow omitting "with" keyword in match blocks

Askama uses the syntax `{% when Variant with (parameters) %}` in
`{% match %}` blocks. This is done because Askama does not implement the
whole pattern matching of Rust's `match` statements.

This PR wants to bring Askama a step closer Rust's matching, so the
"with" keyword should not be needed anymore.
This commit is contained in:
René Kijewski 2021-07-16 16:23:31 +02:00 committed by Dirkjan Ochtman
parent 9e7fe8f2f9
commit 1622df7aee
2 changed files with 18 additions and 1 deletions

View File

@ -550,7 +550,7 @@ fn parameters(i: &[u8]) -> IResult<&[u8], Vec<&str>> {
fn with_parameters(i: &[u8]) -> IResult<&[u8], MatchParameters<'_>> {
let (i, (_, value)) = tuple((
tag("with"),
opt(tag("with")),
alt((match_simple_parameters, match_named_parameters)),
))(i)?;
Ok((i, value))

View File

@ -113,3 +113,20 @@ fn test_match_no_whitespace() {
let s = MatchNoWhitespace { foo: Some(1) };
assert_eq!(s.render().unwrap(), "1");
}
#[derive(Template)]
#[template(
source = "{% match foo %}{% when Some(bar) %}{{ bar }}{% when None %}{% endmatch %}",
ext = "txt"
)]
struct MatchWithoutWithKeyword {
foo: Option<usize>,
}
#[test]
fn test_match_without_with_keyword() {
let s = MatchWithoutWithKeyword { foo: Some(1) };
assert_eq!(s.render().unwrap(), "1");
let s = MatchWithoutWithKeyword { foo: None };
assert_eq!(s.render().unwrap(), "");
}