aboutsummaryrefslogtreecommitdiffstats
path: root/askama_shared/src/parser.rs (unfollow)
Commit message (Collapse)AuthorFilesLines
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
2021-01-22Apply suggestions from nightly clippyLibravatar Dirkjan Ochtman1-4/+2
2021-01-06Improved comment parsing testLibravatar vallentin1-0/+18
2021-01-06Fixed comment parsingLibravatar vallentin1-7/+1
2021-01-05Removed implicit borrowing of literals, calls, and more (fixes #404)Libravatar vallentin1-0/+39
2021-01-05Added numbers parser testLibravatar vallentin1-0/+13
2021-01-05Fixed parsing floatsLibravatar vallentin1-2/+4
2021-01-05Improved filter parsing testLibravatar vallentin1-1/+35
2021-01-05Fixed precedence of filters and unary operators (fixes #424)Libravatar vallentin1-3/+3
2020-12-18Added comment parser testsLibravatar vallentin1-0/+17
2020-12-18Added support for nested commentsLibravatar vallentin1-4/+22
2020-12-16Added set alias for letLibravatar vallentin1-1/+1
2020-12-12Fixed whitespace issue when generating match (#399)Libravatar Christian Vallentin1-7/+5
* Fixed #397 * Updated parser to ignore whitespace between match and when * Updated test cases * Updated Python script to generate match ws tests * Added match ws tests * Resolved rustfmt lint
2020-12-02Allow paths to start with `::` (#393)Libravatar Christian Vallentin1-4/+25
2020-12-01Fixed parsing precedence and associativity (#391)Libravatar Christian Vallentin1-33/+173
2020-11-02Improve error handling (see #368)Libravatar Dirkjan Ochtman1-13/+17
2020-11-02Apply clippy suggestionsLibravatar Dirkjan Ochtman1-2/+2
2020-11-02Upgrade to nom 6Libravatar Dirkjan Ochtman1-36/+37