From cb46044f0de0b4d0e29d50ebd3e4e79995ff26db Mon Sep 17 00:00:00 2001 From: Quentin Gliech Date: Fri, 3 Jul 2026 17:09:22 +0200 Subject: [PATCH] Adapt to minijinja 2.21, bump minijinja-contrib in lockstep The 2.21 AST grew a dedicated Compare node for chained comparisons, which the i18n scanner needs to walk. Also raise the workspace requirements from 2.15.1/2.12.0 to 2.21.0. --- Cargo.lock | 4 ++-- Cargo.toml | 4 ++-- crates/i18n-scan/src/minijinja.rs | 7 +++++++ 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 85dcd5588..7ca94ea45 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3941,9 +3941,9 @@ dependencies = [ [[package]] name = "minijinja-contrib" -version = "2.12.0" +version = "2.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "182ba1438db4679ddfa03792c183bdc2b9ce26b58e7d41a749e59b06497cf136" +checksum = "85342f6fac0be8ccd5bd00d9066be538f34f393f577b75d81b17c8398a6b43bb" dependencies = [ "minijinja", "serde", diff --git a/Cargo.toml b/Cargo.toml index 8fd0d30e9..5b8e1c5bf 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -383,12 +383,12 @@ version = "0.3.17" # Templates [workspace.dependencies.minijinja] -version = "2.15.1" +version = "2.21.0" features = ["urlencode", "loader", "json", "speedups", "unstable_machinery"] # Additional filters for minijinja [workspace.dependencies.minijinja-contrib] -version = "2.12.0" +version = "2.21.0" features = ["pycompat"] # Utilities to deal with non-zero values diff --git a/crates/i18n-scan/src/minijinja.rs b/crates/i18n-scan/src/minijinja.rs index 63aa63aea..ae4f0984e 100644 --- a/crates/i18n-scan/src/minijinja.rs +++ b/crates/i18n-scan/src/minijinja.rs @@ -1,3 +1,4 @@ +// Copyright 2026 Element Creations Ltd. // Copyright 2024, 2025 New Vector Ltd. // Copyright 2023, 2024 The Matrix.org Foundation C.I.C. // @@ -196,6 +197,12 @@ fn find_in_expr<'a>(context: &mut Context, expr: &'a Expr<'a>) -> Result<(), min find_in_expr(context, &bin_op.left)?; find_in_expr(context, &bin_op.right)?; } + Expr::Compare(compare) => { + find_in_expr(context, &compare.expr)?; + for op in &compare.ops { + find_in_expr(context, &op.expr)?; + } + } Expr::IfExpr(if_expr) => { find_in_expr(context, &if_expr.test_expr)?; find_in_expr(context, &if_expr.true_expr)?;