@@ -105,22 +105,10 @@ fn expand_advanced(args: AttributeArgs, input: syn::ItemFn) -> crate::Result<Tok
105105
106106 match parsed_args_list. len ( ) {
107107 0 => {
108- return Ok ( quote ! {
109- #( #attrs) *
110- #[ :: core:: prelude:: v1:: test]
111- fn #name( ) #ret {
112- async fn #name( #inputs) #ret {
113- #body
114- }
115-
116- let mut args = :: sqlx:: testing:: TestArgs :: new( concat!( module_path!( ) , "::" , stringify!( #name) ) ) ;
117-
118- // We need to give a coercion site or else we get "unimplemented trait" errors.
119- let f: fn ( #( #fn_arg_types) , * ) -> _ = #name;
120-
121- :: sqlx:: testing:: TestFn :: run_test( f, args)
122- }
123- } ) ;
108+ return Err ( Box :: new ( syn:: Error :: new_spanned (
109+ args. first ( ) . unwrap ( ) ,
110+ "BUG: unexpected args." ,
111+ ) ) ) ;
124112 }
125113 args_num @ 1 ..=4 => {
126114 use proc_macro2:: Span ;
@@ -139,13 +127,18 @@ fn expand_advanced(args: AttributeArgs, input: syn::ItemFn) -> crate::Result<Tok
139127
140128 let mut args = Vec :: new ( ) ;
141129 for ( i, parsed_args) in parsed_args_list. iter ( ) . enumerate ( ) {
142- let args_name = Ident :: new ( & format ! ( "args{}" , 1 + i) , Span :: call_site ( ) ) ;
130+ let args_name = Ident :: new ( & format ! ( "args{}" , i + 1 ) , Span :: call_site ( ) ) ;
131+ let test_path_suffix = if i == 0 {
132+ String :: new ( )
133+ } else {
134+ format ! ( "_{}" , i + 1 )
135+ } ;
143136 let database_url_var = & parsed_args. database_url_var ;
144137 let migrations = & parsed_args. migrations ;
145138 let fixtures = parsed_args. fixtures . as_slice ( ) ;
146139
147140 args. push ( quote ! {
148- let mut #args_name = :: sqlx:: testing:: TestArgs :: new( concat!( module_path!( ) , "::" , stringify!( #name) , "#{" , #i , "}" ) ) ;
141+ let mut #args_name = :: sqlx:: testing:: TestArgs :: new( concat!( module_path!( ) , "::" , stringify!( #name) , #test_path_suffix ) ) ;
149142 #args_name. #migrations
150143 #args_name. fixtures( & [ #( #fixtures) , * ] ) ;
151144 #args_name. database_url_var( #database_url_var) ;
@@ -188,15 +181,20 @@ fn parse_attr_args(
188181
189182 let mut parsed_args: Vec < ParsedArgs > = Vec :: new ( ) ;
190183
184+ if args. is_empty ( ) {
185+ let parsed = parse_one_attr_args ( args, input, config) ?;
186+ return Ok ( vec ! [ parsed] ) ;
187+ }
188+
191189 for arg in args {
192190 match arg {
193191 syn:: Meta :: List ( list) if list. path . is_ident ( "env" ) => {
194192 let args = parser. parse2 ( list. tokens . clone ( ) ) ?;
195- let parsed = parse_one_attr_args ( args, input, config) ?;
193+ let parsed = parse_one_attr_args ( & args, input, config) ?;
196194 parsed_args. push ( parsed) ;
197195 }
198196 _ => {
199- let parsed = parse_one_attr_args ( args. clone ( ) , input, config) ?;
197+ let parsed = parse_one_attr_args ( args, input, config) ?;
200198 return Ok ( vec ! [ parsed] ) ;
201199 }
202200 }
@@ -207,7 +205,7 @@ fn parse_attr_args(
207205
208206#[ cfg( feature = "migrate" ) ]
209207fn parse_one_attr_args (
210- args : AttributeArgs ,
208+ args : & AttributeArgs ,
211209 input : & syn:: ItemFn ,
212210 config : & sqlx_core:: config:: Config ,
213211) -> crate :: Result < ParsedArgs > {
@@ -307,7 +305,7 @@ fn parse_one_attr_args(
307305}
308306
309307#[ cfg( feature = "migrate" ) ]
310- fn parse_args ( attr_args : AttributeArgs ) -> syn:: Result < Args > {
308+ fn parse_args ( attr_args : & AttributeArgs ) -> syn:: Result < Args > {
311309 use proc_macro2:: Span ;
312310 use syn:: {
313311 parenthesized, parse:: Parse , punctuated:: Punctuated , token:: Comma , Expr , Lit , LitStr , Meta ,
@@ -376,7 +374,7 @@ fn parse_args(attr_args: AttributeArgs) -> syn::Result<Args> {
376374 }
377375 }
378376
379- let Some ( lit) = recurse_lit_lookup ( value. value ) else {
377+ let Some ( lit) = recurse_lit_lookup ( value. value . clone ( ) ) else {
380378 return Err ( syn:: Error :: new_spanned ( path, "expected string or `false`" ) ) ;
381379 } ;
382380
0 commit comments