Merge pull request #179 from GuillaumeGomez/rust-macro-not-prepended

Do not prepend rust macro calls with `&`
This commit is contained in:
René Kijewski 2024-09-18 18:21:05 +02:00 committed by GitHub
commit 77931a774f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 24 additions and 1 deletions

View File

@ -2859,7 +2859,7 @@ fn is_copyable_within_op(expr: &Expr<'_>, within_op: bool) -> bool {
// The result of a call likely doesn't need to be borrowed,
// as in that case the call is more likely to return a
// reference in the first place then.
Expr::Call(..) | Expr::Path(..) | Expr::Filter(..) => true,
Expr::Call(..) | Expr::Path(..) | Expr::Filter(..) | Expr::RustMacro(..) => true,
// If the `expr` is within a `Unary` or `BinOp` then
// an assumption can be made that the operand is copy.
// If not, then the value is moved and adding `.clone()`

23
testing/tests/let.rs Normal file
View File

@ -0,0 +1,23 @@
use rinja::Template;
#[derive(Template)]
#[template(
source = r#"{%- let x -%}
{%- if y -%}
{%- let x = String::new() %}
{%- else -%}
{%- let x = format!("blob") %}
{%- endif -%}
{{ x }}"#,
ext = "html"
)]
struct A {
y: bool,
}
// This test ensures that rust macro calls in `let`/`set` statements are not prepended with `&`.
#[test]
fn let_macro() {
let template = A { y: false };
assert_eq!(template.render().unwrap(), "blob")
}