mirror of
https://github.com/askama-rs/askama.git
synced 2025-10-02 15:25:19 +00:00
Require Expr::parse() callers to supply Level
This commit is contained in:
parent
5718175291
commit
36f4442978
@ -76,17 +76,13 @@ impl<'a> Expr<'a> {
|
|||||||
preceded(
|
preceded(
|
||||||
ws(char('(')),
|
ws(char('(')),
|
||||||
cut(terminated(
|
cut(terminated(
|
||||||
separated_list0(char(','), ws(move |i| Self::nested(i, level))),
|
separated_list0(char(','), ws(move |i| Self::parse(i, level))),
|
||||||
char(')'),
|
char(')'),
|
||||||
)),
|
)),
|
||||||
)(i)
|
)(i)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(super) fn parse(i: &'a str) -> IResult<&'a str, Self> {
|
pub(super) fn parse(i: &'a str, level: Level) -> IResult<&'a str, Self> {
|
||||||
Self::nested(i, Level::default())
|
|
||||||
}
|
|
||||||
|
|
||||||
fn nested(i: &'a str, level: Level) -> IResult<&'a str, Self> {
|
|
||||||
let level = level.nest(i)?;
|
let level = level.nest(i)?;
|
||||||
let range_right = move |i| {
|
let range_right = move |i| {
|
||||||
pair(
|
pair(
|
||||||
@ -172,7 +168,7 @@ impl<'a> Expr<'a> {
|
|||||||
|
|
||||||
fn group(i: &'a str, level: Level) -> IResult<&'a str, Self> {
|
fn group(i: &'a str, level: Level) -> IResult<&'a str, Self> {
|
||||||
let level = level.nest(i)?;
|
let level = level.nest(i)?;
|
||||||
let (i, expr) = preceded(ws(char('(')), opt(|i| Self::nested(i, level)))(i)?;
|
let (i, expr) = preceded(ws(char('(')), opt(|i| Self::parse(i, level)))(i)?;
|
||||||
let expr = match expr {
|
let expr = match expr {
|
||||||
Some(expr) => expr,
|
Some(expr) => expr,
|
||||||
None => {
|
None => {
|
||||||
@ -189,7 +185,7 @@ impl<'a> Expr<'a> {
|
|||||||
|
|
||||||
let mut exprs = vec![expr];
|
let mut exprs = vec![expr];
|
||||||
let (i, _) = fold_many0(
|
let (i, _) = fold_many0(
|
||||||
preceded(char(','), ws(|i| Self::nested(i, level))),
|
preceded(char(','), ws(|i| Self::parse(i, level))),
|
||||||
|| (),
|
|| (),
|
||||||
|_, expr| {
|
|_, expr| {
|
||||||
exprs.push(expr);
|
exprs.push(expr);
|
||||||
@ -205,7 +201,7 @@ impl<'a> Expr<'a> {
|
|||||||
ws(char('[')),
|
ws(char('[')),
|
||||||
cut(terminated(
|
cut(terminated(
|
||||||
map(
|
map(
|
||||||
separated_list0(char(','), ws(move |i| Self::nested(i, level))),
|
separated_list0(char(','), ws(move |i| Self::parse(i, level))),
|
||||||
Self::Array,
|
Self::Array,
|
||||||
),
|
),
|
||||||
char(']'),
|
char(']'),
|
||||||
@ -348,7 +344,7 @@ impl<'a> Suffix<'a> {
|
|||||||
map(
|
map(
|
||||||
preceded(
|
preceded(
|
||||||
ws(char('[')),
|
ws(char('[')),
|
||||||
cut(terminated(ws(move |i| Expr::nested(i, level)), char(']'))),
|
cut(terminated(ws(move |i| Expr::parse(i, level)), char(']'))),
|
||||||
),
|
),
|
||||||
Self::Index,
|
Self::Index,
|
||||||
)(i)
|
)(i)
|
||||||
|
@ -101,7 +101,7 @@ impl<'a> Node<'a> {
|
|||||||
|i| s.tag_expr_start(i),
|
|i| s.tag_expr_start(i),
|
||||||
cut(tuple((
|
cut(tuple((
|
||||||
opt(Whitespace::parse),
|
opt(Whitespace::parse),
|
||||||
ws(Expr::parse),
|
ws(|i| Expr::parse(i, Level::default())),
|
||||||
opt(Whitespace::parse),
|
opt(Whitespace::parse),
|
||||||
|i| s.tag_expr_end(i),
|
|i| s.tag_expr_end(i),
|
||||||
))),
|
))),
|
||||||
@ -325,7 +325,7 @@ impl<'a> CondTest<'a> {
|
|||||||
ws(Target::parse),
|
ws(Target::parse),
|
||||||
ws(char('=')),
|
ws(char('=')),
|
||||||
)),
|
)),
|
||||||
ws(Expr::parse),
|
ws(|i| Expr::parse(i, Level::default())),
|
||||||
))),
|
))),
|
||||||
);
|
);
|
||||||
let (i, (target, expr)) = p(i)?;
|
let (i, (target, expr)) = p(i)?;
|
||||||
@ -371,7 +371,10 @@ impl<'a> Loop<'a> {
|
|||||||
result
|
result
|
||||||
}
|
}
|
||||||
|
|
||||||
let if_cond = preceded(ws(keyword("if")), cut(ws(Expr::parse)));
|
let if_cond = preceded(
|
||||||
|
ws(keyword("if")),
|
||||||
|
cut(ws(|i| Expr::parse(i, Level::default()))),
|
||||||
|
);
|
||||||
let else_block = |i| {
|
let else_block = |i| {
|
||||||
let mut p = preceded(
|
let mut p = preceded(
|
||||||
ws(keyword("else")),
|
ws(keyword("else")),
|
||||||
@ -395,7 +398,7 @@ impl<'a> Loop<'a> {
|
|||||||
ws(Target::parse),
|
ws(Target::parse),
|
||||||
ws(keyword("in")),
|
ws(keyword("in")),
|
||||||
cut(tuple((
|
cut(tuple((
|
||||||
ws(Expr::parse),
|
ws(|i| Expr::parse(i, Level::default())),
|
||||||
opt(if_cond),
|
opt(if_cond),
|
||||||
opt(Whitespace::parse),
|
opt(Whitespace::parse),
|
||||||
|i| s.tag_block_end(i),
|
|i| s.tag_block_end(i),
|
||||||
@ -570,7 +573,7 @@ impl<'a> Match<'a> {
|
|||||||
opt(Whitespace::parse),
|
opt(Whitespace::parse),
|
||||||
ws(keyword("match")),
|
ws(keyword("match")),
|
||||||
cut(tuple((
|
cut(tuple((
|
||||||
ws(Expr::parse),
|
ws(|i| Expr::parse(i, Level::default())),
|
||||||
opt(Whitespace::parse),
|
opt(Whitespace::parse),
|
||||||
|i| s.tag_block_end(i),
|
|i| s.tag_block_end(i),
|
||||||
cut(tuple((
|
cut(tuple((
|
||||||
@ -738,7 +741,10 @@ impl<'a> Let<'a> {
|
|||||||
ws(alt((keyword("let"), keyword("set")))),
|
ws(alt((keyword("let"), keyword("set")))),
|
||||||
cut(tuple((
|
cut(tuple((
|
||||||
ws(Target::parse),
|
ws(Target::parse),
|
||||||
opt(preceded(ws(char('=')), ws(Expr::parse))),
|
opt(preceded(
|
||||||
|
ws(char('=')),
|
||||||
|
ws(|i| Expr::parse(i, Level::default())),
|
||||||
|
)),
|
||||||
opt(Whitespace::parse),
|
opt(Whitespace::parse),
|
||||||
))),
|
))),
|
||||||
));
|
));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user