66
77pub use minijinja:: machinery:: parse;
88use 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+
156174fn 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