aboutsummaryrefslogtreecommitdiffstats
path: root/askama_shared/src/parser.rs (follow)
Commit message (Collapse)AuthorAgeFilesLines
* Don't wrap in StrLit just to extract the str imm.Libravatar René Kijewski2022-01-311-20/+4
|
* Allow comments in `{% match %}` and remove panic!Libravatar René Kijewski2022-01-311-19/+2
|
* Parse tuple expressionsLibravatar René Kijewski2022-01-281-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.
* Implement error propagation expression: `?` (#590)Libravatar René Kijewski2022-01-281-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.
* Unify handling of calls (#614)Libravatar René Kijewski2022-01-271-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`.
* Optimize parsing of rangesLibravatar René Kijewski2022-01-061-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)`.
* Same number of repeats in macro pattern and bodyLibravatar René Kijewski2022-01-061-1/+1
|
* Allow whitespace trimming in {{raw}} blocksLibravatar René Kijewski2021-11-291-16/+19
|
* Simplify take_content() implementationLibravatar René Kijewski2021-11-241-43/+37
|
* Parse `&str` instead of `&[u8]`Libravatar René Kijewski2021-11-241-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.
* Simplify identifier() implementationLibravatar René Kijewski2021-11-241-17/+15
|
* Simplify ws() and split_ws_parts()Libravatar René Kijewski2021-11-241-43/+19
|
* use nom::error::ErrorKindLibravatar René Kijewski2021-11-241-16/+7
|
* Implement `for … in … if …`Libravatar René Kijewski2021-11-111-1/+6
|
* Implement for-elseLibravatar René Kijewski2021-11-111-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 %} ```
* Use char() instead of tag() when possibleLibravatar René Kijewski2021-10-121-73/+76
|
* Remove custom ParserError typeLibravatar René Kijewski2021-10-121-5/+3
|
* Fix suggestions from nightly clippyLibravatar Dirkjan Ochtman2021-10-051-13/+9
|
* Ensure that {%break%} is only used inside of a loopLibravatar René Kijewski2021-08-301-46/+76
|
* Add {% break %} and {% continue %}Libravatar René Kijewski2021-08-301-0/+16
| | | | | This PR adds `{% break %}` and `{% continue %}` statements to break out of a loop, or continue with the next element of the iterator.
* Parse boolean literals in assignment targetsLibravatar René Kijewski2021-08-251-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.
* Upgrade to nom 7Libravatar Dirkjan Ochtman2021-08-211-5/+9
|
* Better error messages using cutsLibravatar René Kijewski2021-07-301-131/+186
|
* Use "target()" to parse "when" blockLibravatar René Kijewski2021-07-301-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.
* Allow omitting "with" keyword in match blocksLibravatar René Kijewski2021-07-301-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.
* Allow using "with" keyword in "let" statementsLibravatar René Kijewski2021-07-301-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.
* Implement destructoring of structsLibravatar René Kijewski2021-07-051-6/+42
| | | | | This PR implements the destructoring of structs on the lhs of "let" and "for" statements.
* Parse nested tuples in "let" statement lhsLibravatar René Kijewski2021-07-051-14/+32
|
* Stop eliding lifetimes in pathsLibravatar Dirkjan Ochtman2021-07-011-51/+50
|
* Implement "if let" statementLibravatar René Kijewski2021-07-011-5/+27
|
* Reworked constants to be parsed as pathsLibravatar vallentin2021-02-231-6/+24
|
* Added var and path parser testsLibravatar vallentin2021-02-221-1/+72
|
* Fixed path parser to account for single identifier type namesLibravatar vallentin2021-02-221-7/+23
|
* Removed needless borrow of rangeLibravatar vallentin2021-02-221-0/+1
|
* Bring Ws type name in line with API guidelinesLibravatar Dirkjan Ochtman2021-02-011-66/+66
|
* Apply suggestions from nightly clippyLibravatar Dirkjan Ochtman2021-01-221-4/+2
|
* Improved comment parsing testLibravatar vallentin2021-01-061-0/+18
|
* Fixed comment parsingLibravatar vallentin2021-01-061-7/+1
|
* Removed implicit borrowing of literals, calls, and more (fixes #404)Libravatar vallentin2021-01-051-0/+39
|
* Added numbers parser testLibravatar vallentin2021-01-051-0/+13
|
* Fixed parsing floatsLibravatar vallentin2021-01-051-2/+4
|
* Improved filter parsing testLibravatar vallentin2021-01-051-1/+35
|
* Fixed precedence of filters and unary operators (fixes #424)Libravatar vallentin2021-01-051-3/+3
|
* Added comment parser testsLibravatar vallentin2020-12-181-0/+17
|
* Added support for nested commentsLibravatar vallentin2020-12-181-4/+22
|
* Added set alias for letLibravatar vallentin2020-12-161-1/+1
|
* Fixed whitespace issue when generating match (#399)Libravatar Christian Vallentin2020-12-121-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
* Allow paths to start with `::` (#393)Libravatar Christian Vallentin2020-12-021-4/+25
|
* Fixed parsing precedence and associativity (#391)Libravatar Christian Vallentin2020-12-011-33/+173
|
* Improve error handling (see #368)Libravatar Dirkjan Ochtman2020-11-021-13/+17
|