aboutsummaryrefslogtreecommitdiffstats
path: root/askama_derive/src/parser.rs (unfollow)
Commit message (Collapse)AuthorFilesLines
2023-01-30Extends expects a string and nothing elseLibravatar René Kijewski1-2/+2
2023-01-30derive: Make Config `'static`Libravatar René Kijewski1-18/+15
The configuration is made `'static`, because `toml` and `toml_edit` both needs to implement serde's `DeserializeOwned` by now. We allocate the strings once per template, so it is very unlikely that this change will have any measurable impact, neither in compile time nor RAM usage.
2023-01-30Apply clippy suggestions for 1.67 (#769)Libravatar Dirkjan Ochtman1-2/+2
2022-11-09Fail to parse if keyword is not longest identLibravatar René Kijewski1-31/+56
This PR makes e.g. `{% leta = b %}` a parsing error. To the reader it would appear that `leta` should be a meaningful expression in Askama, which it is not. Before this PR, `leta` was tokenized as `let` + `a`. This PR makes the parser try to find the longest identifier at a parsing positions and only compare the outcome against the expected keyword. This is potentially a breaking change, because code that should always have been invalid will now fail to compile, when it was accepted before.
2022-09-19Add Expr::is_cachable()Libravatar René Kijewski1-0/+33
2022-05-24Move code generation into askama_deriveLibravatar René Kijewski1-0/+0
2022-05-23Move configuration into its own moduleLibravatar René Kijewski1-2/+3
2022-04-29Allow `{% endmacro name %}`Libravatar Bastien Orivel1-11/+13
Just migrated a repo from tera to askama and this was one of the only things that was different. This is also coherent with `{% block %}` for which I added the same feature years ago.
2022-04-26Add tests for Whitespace::Minize parsingLibravatar Guillaume Gomez1-0/+29
2022-04-26Rename Whitespace::Trim into Whitespace::SuppressLibravatar Guillaume Gomez1-11/+11
2022-04-26Add WhitespaceHandling::MinimizeLibravatar Guillaume Gomez1-3/+3
2022-04-26Add new minimize jinja character handling: `~`Libravatar Guillaume Gomez1-1/+5
2022-04-21Update parser to allow "+" signLibravatar Guillaume Gomez1-162/+206
2022-04-21Add suppress_whitespace config optionLibravatar Guillaume Gomez1-0/+3
2022-03-23Un-"pub" most of askama_shared's internalsLibravatar René Kijewski1-26/+29
Previously askama_shared exported most of it's internals, so askama_derive could use them. This is not needed anymore.
2022-01-31Don't wrap in StrLit just to extract the str imm.Libravatar René Kijewski1-20/+4
2022-01-31Allow comments in `{% match %}` and remove panic!Libravatar René Kijewski1-19/+2
2022-01-28Parse tuple expressionsLibravatar René Kijewski1-3/+145
Askama understands how to destructure tuples in let and match statements, but it does not understand how to build a tuple. This PR fixes this shortcoming.
2022-01-28 Implement error propagation expression: `?` (#590)Libravatar René Kijewski1-1/+8
This change allows using the operator `?` in askama expressions. It works like the same operator in Rust: if a `Result` is `Ok`, it is unwrapped. If it is an error, then the `render()` method fails with this error value.
2022-01-27Unify handling of calls (#614)Libravatar René Kijewski1-66/+126
Instead of having `Expr::VarCall`, `Expr::PathCall` and `Expr::MethodCall`, this PR unifies the handling of calls by removing the former three variants, and introducing `Expr::Call`.
2022-01-06Optimize parsing of rangesLibravatar René Kijewski1-17/+13
Right now almost every expression needs to be parsed twice: `expr_any()` first parses the left-hand side of a range expression, and if no `..` or `..=` was found the left-hand expression is parsed again, this time as the result of the function. This diff removes the second parsing step by first looking for `.. (opt rhs)`, then for `lhs .. (opt rhs)`.
2022-01-06Same number of repeats in macro pattern and bodyLibravatar René Kijewski1-1/+1
2021-11-29Allow whitespace trimming in {{raw}} blocksLibravatar René Kijewski1-16/+19
2021-11-24Simplify take_content() implementationLibravatar René Kijewski1-43/+37
2021-11-24Parse `&str` instead of `&[u8]`Libravatar René Kijewski1-132/+120
Askama's takes valid UTF-8 files as input. So why operate on byte slices instead of strings? This makes writing some functions a lot simpler.
2021-11-24Simplify identifier() implementationLibravatar René Kijewski1-17/+15
2021-11-24Simplify ws() and split_ws_parts()Libravatar René Kijewski1-43/+19
2021-11-24use nom::error::ErrorKindLibravatar René Kijewski1-16/+7
2021-11-11Implement `for … in … if …`Libravatar René Kijewski1-1/+6
2021-11-11Implement for-elseLibravatar René Kijewski1-9/+40
This PR implements for-else statements like in Jinja. They make it easy to print an alternative message if the loop iterator was empty. E.g. ```rs {% for result in result %} <li>{{ result }}</li> {% else %} <li><em>no results</em></li> {% endfor %} ```
2021-10-12Use char() instead of tag() when possibleLibravatar René Kijewski1-73/+76
2021-10-12Remove custom ParserError typeLibravatar René Kijewski1-5/+3
2021-10-05Fix suggestions from nightly clippyLibravatar Dirkjan Ochtman1-13/+9
2021-08-30Ensure that {%break%} is only used inside of a loopLibravatar René Kijewski1-46/+76
2021-08-30Add {% break %} and {% continue %}Libravatar René Kijewski1-0/+16
This PR adds `{% break %}` and `{% continue %}` statements to break out of a loop, or continue with the next element of the iterator.
2021-08-25Parse boolean literals in assignment targetsLibravatar René Kijewski1-3/+21
268d825 introduced a regression that made matching against boolean literals impossible. E.g. "true" was interpreted as the variable "r#true". This PR fixes the problem. The bug was reported by @Restioson in issue #531.
2021-08-21Upgrade to nom 7Libravatar Dirkjan Ochtman1-5/+9
2021-07-30Better error messages using cutsLibravatar René Kijewski1-131/+186
2021-07-30Use "target()" to parse "when" blockLibravatar René Kijewski1-150/+40
`target()` as used in parsing "let" and "if let" implements parsing nested tuples and structs. But it does not implement parsing literals. The functions `match_variant()` and `with_parameters()` as used in parsing "when" blocks do not implement parsing nested structs, but it implements parsing literals. This PR combines `match_variant()` and `with_parameters()` into `target()`, so that all `{%when%}` support nested structs, too.
2021-07-30Allow omitting "with" keyword in match blocksLibravatar René Kijewski1-1/+1
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.
2021-07-30Allow using "with" keyword in "let" statementsLibravatar René Kijewski1-0/+1
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.
2021-07-05Implement destructoring of structsLibravatar René Kijewski1-6/+42
This PR implements the destructoring of structs on the lhs of "let" and "for" statements.
2021-07-05Parse nested tuples in "let" statement lhsLibravatar René Kijewski1-14/+32
2021-07-01Stop eliding lifetimes in pathsLibravatar Dirkjan Ochtman1-51/+50
2021-07-01Implement "if let" statementLibravatar René Kijewski1-5/+27
2021-02-23Reworked constants to be parsed as pathsLibravatar vallentin1-6/+24
2021-02-22Added var and path parser testsLibravatar vallentin1-1/+72
2021-02-22Fixed path parser to account for single identifier type namesLibravatar vallentin1-7/+23
2021-02-22Removed needless borrow of rangeLibravatar vallentin1-0/+1
2021-02-01Bring Ws type name in line with API guidelinesLibravatar Dirkjan Ochtman1-66/+66