From 7ba2237feeffa793a3fe19a39a1e1ec4a0617b63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Kijewski?= Date: Fri, 11 Apr 2025 12:23:29 +0200 Subject: [PATCH 1/2] Revert breaking changes * Revert "`askama_derive` accidentally exposed as a feature" * This reverts commit 68fbf93d99207835d9271cdcb447c281a15c2352. * Revert "If using local variable as value when creating a new variable, do not put it behind a reference" * This reverts commit 8081d717d351085cfbb5160dd4e58ad8adc8453b. * Revert "Describe declaration/ownership when creating a new variable" * This reverts commit c76d1a256314d95a2cf644dfa77f9aa26e98d6bd. --- askama/Cargo.toml | 2 +- askama_derive/src/generator/node.rs | 6 +--- book/src/template_syntax.md | 10 ------- testing/tests/vars.rs | 45 ----------------------------- 4 files changed, 2 insertions(+), 61 deletions(-) diff --git a/askama/Cargo.toml b/askama/Cargo.toml index ba0b41dd..5329f449 100644 --- a/askama/Cargo.toml +++ b/askama/Cargo.toml @@ -56,7 +56,7 @@ alloc = [ blocks = ["askama_derive?/blocks"] code-in-doc = ["askama_derive?/code-in-doc"] config = ["askama_derive?/config"] -derive = ["dep:askama_derive"] +derive = ["askama_derive"] serde_json = ["std", "askama_derive?/serde_json", "dep:serde", "dep:serde_json"] std = [ "alloc", diff --git a/askama_derive/src/generator/node.rs b/askama_derive/src/generator/node.rs index 7c4eea98..06a92918 100644 --- a/askama_derive/src/generator/node.rs +++ b/askama_derive/src/generator/node.rs @@ -965,11 +965,7 @@ impl<'a> Generator<'a, '_> { } self.visit_target(buf, true, true, &l.var); - // If it's not taking the ownership of a local variable or copyable, then we need to add - // a reference. - let (before, after) = if !matches!(**val, Expr::Var(name) if self.locals.get(name).is_some()) - && !is_copyable(val) - { + let (before, after) = if !is_copyable(val) { ("&(", ")") } else { ("", "") diff --git a/book/src/template_syntax.md b/book/src/template_syntax.md index 7da46698..2a809914 100644 --- a/book/src/template_syntax.md +++ b/book/src/template_syntax.md @@ -65,16 +65,6 @@ Like Rust, Askama also supports shadowing variables. For compatibility with Jinja, `set` can be used in place of `let`. -### Borrow rules - -In some cases, the value of a variable initialization will be put behind a reference -to prevent changing ownership. The rules are as follows: - - * If the value is an expression of more than one element (like `x + 2`), it WILL NOT BE put behind a reference. - * If the value is a variable defined in the templates, it WILL NOT BE put behind a reference. - * If the value has a filter applied to it (`x|capitalize`), it WILL NOT BE put behind a reference. - * If the value is a field (`x.y`), it WILL BE put behind a reference. - ## Filters Values such as those obtained from variables can be post-processed diff --git a/testing/tests/vars.rs b/testing/tests/vars.rs index 5e3b4325..aac32042 100644 --- a/testing/tests/vars.rs +++ b/testing/tests/vars.rs @@ -151,48 +151,3 @@ fn test_not_moving_fields_in_var() { }; assert_eq!(x.render().unwrap(), "a/a"); } - -// Ensure that using a local variable as value when creating -// another variable will not be behind a reference. -#[test] -fn test_moving_local_vars() { - #[derive(Template)] - #[template( - source = r#" -{%- let a = 1 -%} -{%- if a == 1 %}A{% endif -%} -{%- let b = a -%} -{%- if b == 1 %}B{% endif -%} -{%- let c = a + 0 -%} -{%- if c == 1 %}C{% endif -%} -{% let d = x %} -{%- if *d == 1 %}D{% endif -%} -{%- let e = y -%} -{%- if e == "a" %}E{% endif -%} -{%- let f = Bla::new() -%} -{%- if f.x == 0 %}F{% endif -%} -{%- let g = f.x -%} -{%- if *g == 0 %}G{% endif -%} - "#, - ext = "txt" - )] - struct X { - x: u32, - y: String, - } - struct Bla { - x: u32, - } - - impl Bla { - fn new() -> Self { - Self { x: 0 } - } - } - - let x = X { - x: 1, - y: "a".to_owned(), - }; - assert_eq!(x.render().unwrap(), "ABCDEFG"); -} From 91c7e89ad5520eb4043ee1672c5186f73c55ab3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Kijewski?= Date: Fri, 11 Apr 2025 11:21:53 +0200 Subject: [PATCH 2/2] Bump version number to 0.13.1 --- askama/Cargo.toml | 4 ++-- askama_derive/Cargo.toml | 2 +- askama_derive_standalone/Cargo.toml | 4 ++-- bench-build/Cargo.toml | 6 +++--- bench-build/README.md | 4 ++-- book/src/features.md | 4 ++-- examples/actix-web-app/Cargo.toml | 4 ++-- examples/axum-app/Cargo.toml | 4 ++-- examples/poem-app/Cargo.toml | 4 ++-- examples/rocket-app/Cargo.toml | 4 ++-- examples/salvo-app/Cargo.toml | 4 ++-- examples/warp-app/Cargo.toml | 4 ++-- testing-alloc/Cargo.toml | 4 ++-- testing-no-std/Cargo.toml | 4 ++-- testing-renamed/Cargo.toml | 4 ++-- testing/Cargo.toml | 6 +++--- 16 files changed, 33 insertions(+), 33 deletions(-) diff --git a/askama/Cargo.toml b/askama/Cargo.toml index 5329f449..852f3300 100644 --- a/askama/Cargo.toml +++ b/askama/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "askama" -version = "0.13.0" +version = "0.13.1" description = "Type-safe, compiled Jinja-like templates for Rust" keywords = ["markup", "template", "jinja2", "html"] categories = ["template-engine"] @@ -27,7 +27,7 @@ harness = false itoa = "1.0.11" # needed by feature "derive" -askama_derive = { version = "=0.13.0", path = "../askama_derive", default-features = false, optional = true } +askama_derive = { version = "=0.13.1", path = "../askama_derive", default-features = false, optional = true } # needed by feature "serde_json" serde = { version = "1.0", optional = true, default-features = false } diff --git a/askama_derive/Cargo.toml b/askama_derive/Cargo.toml index 5682e372..8c022b2d 100644 --- a/askama_derive/Cargo.toml +++ b/askama_derive/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "askama_derive" -version = "0.13.0" +version = "0.13.1" description = "Procedural macro package for Askama" homepage = "https://github.com/askama-rs/askama" repository = "https://github.com/askama-rs/askama" diff --git a/askama_derive_standalone/Cargo.toml b/askama_derive_standalone/Cargo.toml index 6bb5560c..5f638b61 100644 --- a/askama_derive_standalone/Cargo.toml +++ b/askama_derive_standalone/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "askama_derive_standalone" -version = "0.13.0" +version = "0.13.1" description = "Procedural macro package for Askama" homepage = "https://github.com/askama-rs/askama" repository = "https://github.com/askama-rs/askama" @@ -23,7 +23,7 @@ required-features = ["__standalone"] parser = { package = "askama_parser", version = "=0.13.0", path = "../askama_parser" } basic-toml = { version = "0.1.1", optional = true } -pulldown-cmark = { version = "0.12.0", optional = true, default-features = false } +pulldown-cmark = { version = "0.13.0", optional = true, default-features = false } serde = { version = "1.0", optional = true } serde_derive = { version = "1.0", optional = true } diff --git a/bench-build/Cargo.toml b/bench-build/Cargo.toml index 3ff81c7f..bbcdd6ca 100644 --- a/bench-build/Cargo.toml +++ b/bench-build/Cargo.toml @@ -1,14 +1,14 @@ [package] name = "bench-build" -version = "0.13.0" +version = "0.13.1" authors = ["askama-rs developers"] edition = "2021" rust-version = "1.81" publish = false [dependencies] -askama = { path = "../askama", version = "0.13.0", default-features = false, features = ["std"] } -askama_derive = { path = "../askama_derive", version = "0.13.0", features = ["std"] } +askama = { path = "../askama", version = "0.13.1", default-features = false, features = ["std"] } +askama_derive = { path = "../askama_derive", version = "0.13.1", features = ["std"] } [features] default = [] diff --git a/bench-build/README.md b/bench-build/README.md index 9b3263be..12653709 100644 --- a/bench-build/README.md +++ b/bench-build/README.md @@ -41,8 +41,8 @@ Without the feature, `cargo` will be able to compile more dependencies in parall ```toml # Cargo.toml [dependencies] -askama = { version = "0.13.0", default-features = false, features = ["std"] } -askama_derive = { version = "0.13.0", features = ["std"] } +askama = { version = "0.13.1", default-features = false, features = ["std"] } +askama_derive = { version = "0.13.1", features = ["std"] } ``` ```rust diff --git a/book/src/features.md b/book/src/features.md index 52cc449f..0045fc9a 100644 --- a/book/src/features.md +++ b/book/src/features.md @@ -9,7 +9,7 @@ you have to opt-in to the feature [`"serde_json"`](#serde_json): ```toml [dependencies] -askama = { version = "0.13.0", features = ["serde_json"] } +askama = { version = "0.13.1", features = ["serde_json"] } ``` Please read the [Cargo manual](https://doc.rust-lang.org/cargo/reference/features.html#dependency-features) @@ -28,7 +28,7 @@ You can opt-out of using the feature flags by using ```toml [dependencies] -askama = { version = "0.13.0", default-features = false } +askama = { version = "0.13.1", default-features = false } ``` Without `default-features = false`, i.e with default features enabled, diff --git a/examples/actix-web-app/Cargo.toml b/examples/actix-web-app/Cargo.toml index 1f9286a9..851b0d3f 100644 --- a/examples/actix-web-app/Cargo.toml +++ b/examples/actix-web-app/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "actix-web-app" -version = "0.13.0" +version = "0.13.1" edition = "2021" license = "MIT OR Apache-2.0" publish = false @@ -9,7 +9,7 @@ publish = false # and actix-web as your web-framework. [dependencies] actix-web = { version = "4.9.0", default-features = false, features = ["macros"] } -askama = { version = "0.13.0", path = "../../askama" } +askama = { version = "0.13.1", path = "../../askama" } tokio = { version = "1.43.0", features = ["macros", "rt-multi-thread"] } # serde and strum are used to parse (deserialize) and generate (serialize) information diff --git a/examples/axum-app/Cargo.toml b/examples/axum-app/Cargo.toml index 79e83924..8904173d 100644 --- a/examples/axum-app/Cargo.toml +++ b/examples/axum-app/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "axum-app" -version = "0.13.0" +version = "0.13.1" edition = "2021" license = "MIT OR Apache-2.0" publish = false @@ -8,7 +8,7 @@ publish = false # This is an example application that uses both askama as template engine, # and axum as your web-framework. [dependencies] -askama = { version = "0.13.0", path = "../../askama" } +askama = { version = "0.13.1", path = "../../askama" } axum = "0.8.1" tokio = { version = "1.43.0", features = ["macros", "rt-multi-thread"] } diff --git a/examples/poem-app/Cargo.toml b/examples/poem-app/Cargo.toml index 5a602cc0..c8497698 100644 --- a/examples/poem-app/Cargo.toml +++ b/examples/poem-app/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "poem-app" -version = "0.13.0" +version = "0.13.1" edition = "2021" license = "MIT OR Apache-2.0" publish = false @@ -8,7 +8,7 @@ publish = false # This is an example application that uses both askama as template engine, # and poem as your web-framework. [dependencies] -askama = { version = "0.13.0", path = "../../askama" } +askama = { version = "0.13.1", path = "../../askama" } poem = "3.1.6" tokio = { version = "1.43.0", features = ["macros", "rt-multi-thread"] } diff --git a/examples/rocket-app/Cargo.toml b/examples/rocket-app/Cargo.toml index 28caddba..db1cdc97 100644 --- a/examples/rocket-app/Cargo.toml +++ b/examples/rocket-app/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "actix-web-app" -version = "0.13.0" +version = "0.13.1" edition = "2021" license = "MIT OR Apache-2.0" publish = false @@ -8,7 +8,7 @@ publish = false # This is an example application that uses both askama as template engine, # and rocket as your web-framework. [dependencies] -askama = { version = "0.13.0", path = "../../askama" } +askama = { version = "0.13.1", path = "../../askama" } rocket = "0.5.1" # strum is used to parse and serialize information between web requests, diff --git a/examples/salvo-app/Cargo.toml b/examples/salvo-app/Cargo.toml index bf529765..a300a73d 100644 --- a/examples/salvo-app/Cargo.toml +++ b/examples/salvo-app/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "salvo-app" -version = "0.13.0" +version = "0.13.1" edition = "2021" license = "MIT OR Apache-2.0" publish = false @@ -8,7 +8,7 @@ publish = false # This is an example application that uses both askama as template engine, # and salvo as your web-framework. [dependencies] -askama = { version = "0.13.0", path = "../../askama" } +askama = { version = "0.13.1", path = "../../askama" } salvo = { version = "0.76.0", default-features = false, features = ["http1", "logging", "server"] } tokio = { version = "1.43.0", features = ["macros", "rt-multi-thread"] } diff --git a/examples/warp-app/Cargo.toml b/examples/warp-app/Cargo.toml index f3fed2aa..728951b3 100644 --- a/examples/warp-app/Cargo.toml +++ b/examples/warp-app/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "actix-web-app" -version = "0.13.0" +version = "0.13.1" edition = "2021" license = "MIT OR Apache-2.0" publish = false @@ -8,7 +8,7 @@ publish = false # This is an example application that uses both askama as template engine, # and actix-web as your web-framework. [dependencies] -askama = { version = "0.13.0", path = "../../askama" } +askama = { version = "0.13.1", path = "../../askama" } http = "0.2.12" tokio = { version = "1.43.0", features = ["macros", "rt-multi-thread"] } warp = "0.3.7" diff --git a/testing-alloc/Cargo.toml b/testing-alloc/Cargo.toml index 1fa8401c..3e750b3e 100644 --- a/testing-alloc/Cargo.toml +++ b/testing-alloc/Cargo.toml @@ -1,12 +1,12 @@ [package] name = "askama_testing-alloc" -version = "0.13.0" +version = "0.13.1" authors = ["askama-rs developers"] edition = "2021" rust-version = "1.81" publish = false [dev-dependencies] -askama = { path = "../askama", version = "0.13.0", default-features = false, features = ["alloc", "derive"] } +askama = { path = "../askama", version = "0.13.1", default-features = false, features = ["alloc", "derive"] } assert_matches = "1.5.0" diff --git a/testing-no-std/Cargo.toml b/testing-no-std/Cargo.toml index 90f621d5..26ed39a5 100644 --- a/testing-no-std/Cargo.toml +++ b/testing-no-std/Cargo.toml @@ -1,12 +1,12 @@ [package] name = "askama_testing-no-std" -version = "0.13.0" +version = "0.13.1" authors = ["askama-rs developers"] edition = "2021" rust-version = "1.81" publish = false [dev-dependencies] -askama = { path = "../askama", version = "0.13.0", default-features = false, features = ["derive"] } +askama = { path = "../askama", version = "0.13.1", default-features = false, features = ["derive"] } assert_matches = "1.5.0" diff --git a/testing-renamed/Cargo.toml b/testing-renamed/Cargo.toml index 971b7299..08efc4fe 100644 --- a/testing-renamed/Cargo.toml +++ b/testing-renamed/Cargo.toml @@ -1,12 +1,12 @@ [package] name = "askama_testing-renamed" -version = "0.13.0" +version = "0.13.1" authors = ["askama-rs developers"] edition = "2021" rust-version = "1.81" publish = false [dev-dependencies] -some_name = { package = "askama", path = "../askama", version = "0.13.0", default-features = false, features = ["derive"] } +some_name = { package = "askama", path = "../askama", version = "0.13.1", default-features = false, features = ["derive"] } assert_matches = "1.5.0" diff --git a/testing/Cargo.toml b/testing/Cargo.toml index 76620f9a..192fb757 100644 --- a/testing/Cargo.toml +++ b/testing/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "askama_testing" -version = "0.13.0" +version = "0.13.1" authors = ["askama-rs developers"] edition = "2021" rust-version = "1.81" @@ -15,7 +15,7 @@ name = "normalize_identifier" harness = false [dependencies] -askama = { path = "../askama", version = "0.13.0" } +askama = { path = "../askama", version = "0.13.1" } serde_json = { version = "1.0", optional = true } @@ -23,7 +23,7 @@ serde_json = { version = "1.0", optional = true } core = { package = "intentionally-empty", version = "1.0.0" } [dev-dependencies] -askama = { path = "../askama", version = "0.13.0", features = ["blocks", "code-in-doc", "serde_json"] } +askama = { path = "../askama", version = "0.13.1", features = ["blocks", "code-in-doc", "serde_json"] } assert_matches = "1.5.0" criterion = "0.5"