mirror of
https://github.com/askama-rs/askama.git
synced 2025-09-28 05:21:14 +00:00
derive: prefix more generated variables with __askama
(#444)
* _did_loop → __askama_did_loop * _iter → __askama_iter * bool → askama::helpers::core::primitive::bool * _loop_item → __askama_item
This commit is contained in:
parent
3775f4e3a3
commit
3e5562dc7c
@ -363,16 +363,16 @@ impl<'a> Generator<'a, '_> {
|
||||
if let Expr::Var(name) = **obj {
|
||||
if name == "loop" {
|
||||
if attr.name == "index" {
|
||||
buf.write("(_loop_item.index + 1)");
|
||||
buf.write("(__askama_item.index + 1)");
|
||||
return Ok(DisplayWrap::Unwrapped);
|
||||
} else if attr.name == "index0" {
|
||||
buf.write("_loop_item.index");
|
||||
buf.write("__askama_item.index");
|
||||
return Ok(DisplayWrap::Unwrapped);
|
||||
} else if attr.name == "first" {
|
||||
buf.write("(_loop_item.index == 0)");
|
||||
buf.write("(__askama_item.index == 0)");
|
||||
return Ok(DisplayWrap::Unwrapped);
|
||||
} else if attr.name == "last" {
|
||||
buf.write("_loop_item.last");
|
||||
buf.write("__askama_item.last");
|
||||
return Ok(DisplayWrap::Unwrapped);
|
||||
} else {
|
||||
return Err(ctx.generate_error("unknown loop variable", obj.span()));
|
||||
@ -476,7 +476,7 @@ impl<'a> Generator<'a, '_> {
|
||||
if _len == 0 {\
|
||||
return askama::helpers::core::result::Result::Err(askama::Error::Fmt);\
|
||||
}\
|
||||
_cycle[_loop_item.index % _len]\
|
||||
_cycle[__askama_item.index % _len]\
|
||||
})",
|
||||
);
|
||||
}
|
||||
|
@ -518,35 +518,45 @@ impl<'a> Generator<'a, '_> {
|
||||
let flushed = this.write_buf_writable(ctx, buf)?;
|
||||
buf.write('{');
|
||||
if has_else_nodes {
|
||||
buf.write("let mut _did_loop = false;");
|
||||
buf.write("let mut __askama_did_loop = false;");
|
||||
}
|
||||
match &*loop_block.iter {
|
||||
Expr::Range(_, _, _) => buf.write(format_args!("let _iter = {expr_code};")),
|
||||
Expr::Array(..) => buf.write(format_args!("let _iter = {expr_code}.iter();")),
|
||||
Expr::Range(_, _, _) => buf.write(format_args!("let __askama_iter = {expr_code};")),
|
||||
Expr::Array(..) => {
|
||||
buf.write(format_args!("let __askama_iter = {expr_code}.iter();"));
|
||||
}
|
||||
// If `iter` is a call then we assume it's something that returns
|
||||
// an iterator. If not then the user can explicitly add the needed
|
||||
// call without issues.
|
||||
Expr::Call { .. } | Expr::Index(..) => {
|
||||
buf.write(format_args!("let _iter = ({expr_code}).into_iter();"));
|
||||
buf.write(format_args!(
|
||||
"let __askama_iter = ({expr_code}).into_iter();"
|
||||
));
|
||||
}
|
||||
// If accessing `self` then it most likely needs to be
|
||||
// borrowed, to prevent an attempt of moving.
|
||||
_ if expr_code.starts_with("self.") => {
|
||||
buf.write(format_args!("let _iter = (&{expr_code}).into_iter();"));
|
||||
buf.write(format_args!(
|
||||
"let __askama_iter = (&{expr_code}).into_iter();"
|
||||
));
|
||||
}
|
||||
// If accessing a field then it most likely needs to be
|
||||
// borrowed, to prevent an attempt of moving.
|
||||
Expr::Attr(..) => {
|
||||
buf.write(format_args!("let _iter = (&{expr_code}).into_iter();"));
|
||||
buf.write(format_args!(
|
||||
"let __askama_iter = (&{expr_code}).into_iter();"
|
||||
));
|
||||
}
|
||||
// Otherwise, we borrow `iter` assuming that it implements `IntoIterator`.
|
||||
_ => buf.write(format_args!("let _iter = ({expr_code}).into_iter();")),
|
||||
_ => buf.write(format_args!(
|
||||
"let __askama_iter = ({expr_code}).into_iter();"
|
||||
)),
|
||||
}
|
||||
if let Some(cond) = &loop_block.cond {
|
||||
this.push_locals(|this| {
|
||||
buf.write("let _iter = _iter.filter(|");
|
||||
buf.write("let __askama_iter = __askama_iter.filter(|");
|
||||
this.visit_target(buf, true, true, &loop_block.var);
|
||||
buf.write("| -> bool {");
|
||||
buf.write("| -> askama::helpers::core::primitive::bool {");
|
||||
this.visit_expr(ctx, buf, cond)?;
|
||||
buf.write("});");
|
||||
Ok(0)
|
||||
@ -556,10 +566,12 @@ impl<'a> Generator<'a, '_> {
|
||||
let size_hint1 = this.push_locals(|this| {
|
||||
buf.write("for (");
|
||||
this.visit_target(buf, true, true, &loop_block.var);
|
||||
buf.write(", _loop_item) in askama::helpers::TemplateLoop::new(_iter) {");
|
||||
buf.write(
|
||||
", __askama_item) in askama::helpers::TemplateLoop::new(__askama_iter) {",
|
||||
);
|
||||
|
||||
if has_else_nodes {
|
||||
buf.write("_did_loop = true;");
|
||||
buf.write("__askama_did_loop = true;");
|
||||
}
|
||||
let mut size_hint1 = this.handle(ctx, &loop_block.body, buf, AstLevel::Nested)?;
|
||||
this.handle_ws(loop_block.ws2);
|
||||
@ -570,7 +582,7 @@ impl<'a> Generator<'a, '_> {
|
||||
|
||||
let size_hint2;
|
||||
if has_else_nodes {
|
||||
buf.write("if !_did_loop {");
|
||||
buf.write("if !__askama_did_loop {");
|
||||
size_hint2 = this.push_locals(|this| {
|
||||
let mut size_hint =
|
||||
this.handle(ctx, &loop_block.else_nodes, buf, AstLevel::Nested)?;
|
||||
|
Loading…
x
Reference in New Issue
Block a user