mirror of
https://github.com/askama-rs/askama.git
synced 2025-09-28 05:21:14 +00:00
derive: remove parentheses before handling {{ (expr) }}
This commit is contained in:
parent
bbb2932da2
commit
bbf9d1c234
@ -943,8 +943,12 @@ impl<'a> Generator<'a, '_> {
|
|||||||
ctx: &Context<'a>,
|
ctx: &Context<'a>,
|
||||||
buf: &mut Buffer,
|
buf: &mut Buffer,
|
||||||
ws: Ws,
|
ws: Ws,
|
||||||
expr: &'a WithSpan<'a, Expr<'a>>,
|
mut expr: &'a WithSpan<'a, Expr<'a>>,
|
||||||
) -> Result<usize, CompileError> {
|
) -> Result<usize, CompileError> {
|
||||||
|
while let Expr::Group(inner) = &**expr {
|
||||||
|
expr = inner;
|
||||||
|
}
|
||||||
|
|
||||||
if let Expr::Call(call) = &**expr
|
if let Expr::Call(call) = &**expr
|
||||||
&& let ControlFlow::Break(size_hint) =
|
&& let ControlFlow::Break(size_hint) =
|
||||||
self.write_expr_call(ctx, buf, ws, expr.span(), call)?
|
self.write_expr_call(ctx, buf, ws, expr.span(), call)?
|
||||||
@ -953,19 +957,26 @@ impl<'a> Generator<'a, '_> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
self.handle_ws(ws);
|
self.handle_ws(ws);
|
||||||
let items = if let Expr::Concat(exprs) = &**expr {
|
self.write_expr_item(expr);
|
||||||
exprs
|
|
||||||
} else {
|
|
||||||
std::slice::from_ref(expr)
|
|
||||||
};
|
|
||||||
|
|
||||||
for s in items {
|
|
||||||
self.buf_writable
|
|
||||||
.push(compile_time_escape(s, self.input.escaper).unwrap_or(Writable::Expr(s)));
|
|
||||||
}
|
|
||||||
Ok(0)
|
Ok(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn write_expr_item(&mut self, expr: &'a WithSpan<'a, Expr<'a>>) {
|
||||||
|
match &**expr {
|
||||||
|
Expr::Group(expr) => self.write_expr_item(expr),
|
||||||
|
Expr::Concat(items) => {
|
||||||
|
for expr in items {
|
||||||
|
self.write_expr_item(expr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_ => {
|
||||||
|
self.buf_writable.push(
|
||||||
|
compile_time_escape(expr, self.input.escaper).unwrap_or(Writable::Expr(expr)),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn write_expr_call(
|
fn write_expr_call(
|
||||||
&mut self,
|
&mut self,
|
||||||
ctx: &Context<'a>,
|
ctx: &Context<'a>,
|
||||||
|
@ -1410,3 +1410,34 @@ fn test_bare_cr_doc_comment() -> Result<(), syn::Error> {
|
|||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn check_expr_ungrouping() {
|
||||||
|
// In this test we ensure that superfluous parentheses around expressions are stripped before
|
||||||
|
// handling the expression.
|
||||||
|
|
||||||
|
compare(
|
||||||
|
r#"{{ ("hello") }}"#,
|
||||||
|
r#"__askama_writer.write_str("hello")?;"#,
|
||||||
|
&[],
|
||||||
|
5,
|
||||||
|
);
|
||||||
|
compare(
|
||||||
|
r#"{{ ("hello") ~ " " ~ ("world") }}"#,
|
||||||
|
r#"__askama_writer.write_str("hello world")?;"#,
|
||||||
|
&[],
|
||||||
|
11,
|
||||||
|
);
|
||||||
|
compare(
|
||||||
|
r#"{{ ("hello") ~ (" " ~ ("world")) }}"#,
|
||||||
|
r#"__askama_writer.write_str("hello world")?;"#,
|
||||||
|
&[],
|
||||||
|
11,
|
||||||
|
);
|
||||||
|
compare(
|
||||||
|
r#"{{ ((((((((((("hello") ~ " ")))) ~ ((("world"))))))))) }}"#,
|
||||||
|
r#"__askama_writer.write_str("hello world")?;"#,
|
||||||
|
&[],
|
||||||
|
11,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user