@@ -159,19 +159,14 @@ fn transform_sig(
159
159
has_default : bool ,
160
160
is_local : bool ,
161
161
) {
162
- sig. fn_token . span = sig. asyncness . take ( ) . unwrap ( ) . span ;
162
+ let default_span = sig. asyncness . take ( ) . unwrap ( ) . span ;
163
+ sig. fn_token . span = default_span;
163
164
164
- let ret = match & sig. output {
165
- ReturnType :: Default => quote ! ( ( ) ) ,
166
- ReturnType :: Type ( _ , ret) => quote ! ( #ret) ,
165
+ let ( ret_arrow , ret) = match & sig. output {
166
+ ReturnType :: Default => ( Token ! [ -> ] ( default_span ) , quote_spanned ! ( default_span=> ( ) ) ) ,
167
+ ReturnType :: Type ( arrow , ret) => ( * arrow , quote ! ( #ret) ) ,
167
168
} ;
168
169
169
- let default_span = sig
170
- . ident
171
- . span ( )
172
- . join ( sig. paren_token . span )
173
- . unwrap_or_else ( || sig. ident . span ( ) ) ;
174
-
175
170
let mut lifetimes = CollectLifetimes :: new ( "'life" , default_span) ;
176
171
for arg in sig. inputs . iter_mut ( ) {
177
172
match arg {
@@ -235,13 +230,12 @@ fn transform_sig(
235
230
. push ( parse_quote_spanned ! ( default_span=> ' async_trait) ) ;
236
231
237
232
if has_self {
238
- let bound_span = sig. ident . span ( ) ;
239
233
let bound = match sig. inputs . iter ( ) . next ( ) {
240
234
Some ( FnArg :: Receiver ( Receiver {
241
235
reference : Some ( _) ,
242
236
mutability : None ,
243
237
..
244
- } ) ) => Ident :: new ( "Sync" , bound_span ) ,
238
+ } ) ) => Ident :: new ( "Sync" , default_span ) ,
245
239
Some ( FnArg :: Typed ( arg) )
246
240
if match ( arg. pat . as_ref ( ) , arg. ty . as_ref ( ) ) {
247
241
( Pat :: Ident ( pat) , Type :: Reference ( ty) ) => {
@@ -250,9 +244,9 @@ fn transform_sig(
250
244
_ => false ,
251
245
} =>
252
246
{
253
- Ident :: new ( "Sync" , bound_span )
247
+ Ident :: new ( "Sync" , default_span )
254
248
}
255
- _ => Ident :: new ( "Send" , bound_span ) ,
249
+ _ => Ident :: new ( "Send" , default_span ) ,
256
250
} ;
257
251
258
252
let assume_bound = match context {
@@ -262,9 +256,9 @@ fn transform_sig(
262
256
263
257
let where_clause = where_clause_or_default ( & mut sig. generics . where_clause ) ;
264
258
where_clause. predicates . push ( if assume_bound || is_local {
265
- parse_quote_spanned ! ( bound_span => Self : ' async_trait)
259
+ parse_quote_spanned ! ( default_span => Self : ' async_trait)
266
260
} else {
267
- parse_quote_spanned ! ( bound_span => Self : :: core:: marker:: #bound + ' async_trait)
261
+ parse_quote_spanned ! ( default_span => Self : :: core:: marker:: #bound + ' async_trait)
268
262
} ) ;
269
263
}
270
264
@@ -288,14 +282,13 @@ fn transform_sig(
288
282
}
289
283
}
290
284
291
- let ret_span = sig. ident . span ( ) ;
292
285
let bounds = if is_local {
293
- quote_spanned ! ( ret_span => ' async_trait)
286
+ quote_spanned ! ( default_span => ' async_trait)
294
287
} else {
295
- quote_spanned ! ( ret_span => :: core:: marker:: Send + ' async_trait)
288
+ quote_spanned ! ( default_span => :: core:: marker:: Send + ' async_trait)
296
289
} ;
297
- sig. output = parse_quote_spanned ! { ret_span =>
298
- -> :: core:: pin:: Pin <Box <
290
+ sig. output = parse_quote_spanned ! { default_span =>
291
+ #ret_arrow :: core:: pin:: Pin <Box <
299
292
dyn :: core:: future:: Future <Output = #ret> + #bounds
300
293
>>
301
294
} ;
0 commit comments