Implement error propagation expression: ?
#590
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR consists of
threetwoa changes: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 forlhs .. (opt rhs)
.Instead of havingExpr::VarCall
,Expr::PathCall
andExpr::MethodCall
, this diff unifies the handling of calls by removed the former three variants, and introducingExpr::Call
. This makes parsing postfix operators easier.?
in askama expressions. It works like the same operator in Rust: if aResult
isOk
, it is unwrapped. If it is an error, then therender()
method fails with this error value.