Skip to content

Commit 0a9ca55

Browse files
committed
Update i18n-scan to work with minijinja 2.5.0 internals
1 parent 8b26e8d commit 0a9ca55

File tree

1 file changed

+33
-20
lines changed

1 file changed

+33
-20
lines changed

crates/i18n-scan/src/minijinja.rs

Lines changed: 33 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
pub use minijinja::machinery::parse;
88
use minijinja::{
9-
machinery::ast::{Call, Const, Expr, Macro, Spanned, Stmt},
9+
machinery::ast::{Call, CallArg, Const, Expr, Macro, Spanned, Stmt},
1010
ErrorKind,
1111
};
1212

@@ -90,9 +90,9 @@ pub fn find_in_stmt<'a>(context: &mut Context, stmt: &'a Stmt<'a>) -> Result<(),
9090
Ok(())
9191
}
9292

93-
fn as_const<'a>(expr: &'a Expr<'a>) -> Option<&'a Const> {
94-
match expr {
95-
Expr::Const(const_) => Some(const_),
93+
fn as_const<'a>(call_arg: &'a CallArg<'a>) -> Option<&'a Const> {
94+
match call_arg {
95+
CallArg::Pos(Expr::Const(const_)) => Some(const_),
9696
_ => None,
9797
}
9898
}
@@ -122,13 +122,10 @@ fn find_in_call<'a>(
122122
"t() first argument must be a string literal",
123123
))?;
124124

125-
let has_count = call.args.iter().any(|arg| {
126-
if let Expr::Kwargs(kwargs) = arg {
127-
kwargs.pairs.iter().any(|(key, _value)| *key == "count")
128-
} else {
129-
false
130-
}
131-
});
125+
let has_count = call
126+
.args
127+
.iter()
128+
.any(|arg| matches!(arg, CallArg::Kwarg("count", _)));
132129

133130
let key = Key::new(
134131
if has_count {
@@ -146,13 +143,34 @@ fn find_in_call<'a>(
146143
}
147144

148145
find_in_expr(context, &call.expr)?;
149-
for arg in &call.args {
150-
find_in_expr(context, arg)?;
146+
find_in_call_args(context, &call.args)?;
147+
148+
Ok(())
149+
}
150+
151+
fn find_in_call_args<'a>(
152+
context: &mut Context,
153+
args: &'a [CallArg<'a>],
154+
) -> Result<(), minijinja::Error> {
155+
for arg in args {
156+
find_in_call_arg(context, arg)?;
151157
}
152158

153159
Ok(())
154160
}
155161

162+
fn find_in_call_arg<'a>(
163+
context: &mut Context,
164+
arg: &'a CallArg<'a>,
165+
) -> Result<(), minijinja::Error> {
166+
match arg {
167+
CallArg::Pos(expr)
168+
| CallArg::Kwarg(_, expr)
169+
| CallArg::PosSplat(expr)
170+
| CallArg::KwargSplat(expr) => find_in_expr(context, expr),
171+
}
172+
}
173+
156174
fn find_in_stmts<'a>(context: &mut Context, stmts: &'a [Stmt<'a>]) -> Result<(), minijinja::Error> {
157175
for stmt in stmts {
158176
find_in_stmt(context, stmt)?;
@@ -185,11 +203,11 @@ fn find_in_expr<'a>(context: &mut Context, expr: &'a Expr<'a>) -> Result<(), min
185203
}
186204
Expr::Filter(filter) => {
187205
find_in_optional_expr(context, &filter.expr)?;
188-
find_in_exprs(context, &filter.args)?;
206+
find_in_call_args(context, &filter.args)?;
189207
}
190208
Expr::Test(test) => {
191209
find_in_expr(context, &test.expr)?;
192-
find_in_exprs(context, &test.args)?;
210+
find_in_call_args(context, &test.args)?;
193211
}
194212
Expr::GetAttr(get_attr) => {
195213
find_in_expr(context, &get_attr.expr)?;
@@ -208,11 +226,6 @@ fn find_in_expr<'a>(context: &mut Context, expr: &'a Expr<'a>) -> Result<(), min
208226
find_in_exprs(context, &map.keys)?;
209227
find_in_exprs(context, &map.values)?;
210228
}
211-
Expr::Kwargs(kwargs) => {
212-
for (_key, value) in &kwargs.pairs {
213-
find_in_expr(context, value)?;
214-
}
215-
}
216229
}
217230

218231
Ok(())

0 commit comments

Comments
 (0)