@@ -4,7 +4,7 @@ use crate::receiver::{
44 has_self_in_block, has_self_in_sig, has_self_in_where_predicate, ReplaceReceiver ,
55} ;
66use proc_macro2:: { Span , TokenStream } ;
7- use quote:: { format_ident, quote, ToTokens } ;
7+ use quote:: { format_ident, quote, quote_spanned , ToTokens } ;
88use std:: mem;
99use syn:: punctuated:: Punctuated ;
1010use syn:: visit_mut:: VisitMut ;
@@ -406,28 +406,12 @@ fn transform_block(
406406 replace. visit_block_mut ( block) ;
407407
408408 let brace = block. brace_token ;
409- * block = parse_quote ! ( {
409+ let box_pin = quote_spanned ! ( brace . span=> {
410410 #[ allow( clippy:: used_underscore_binding) ]
411411 #standalone #block
412412 Box :: pin( #inner:: <#( #types) , * >( #( #args) , * ) )
413413 } ) ;
414-
415- // Make the span `Box::pin` be that of the block so that "Send is not implemented" errors point
416- // to the block and no the `#[async_trait]` attribute
417- if let Some ( syn:: Stmt :: Expr ( syn:: Expr :: Call ( box_pin) ) ) = block. stmts . last_mut ( ) {
418- struct ReplaceSpan ( Span ) ;
419- impl VisitMut for ReplaceSpan {
420- fn visit_span_mut ( & mut self , span : & mut Span ) {
421- * span = self . 0
422- }
423- }
424- let mut replace_span = ReplaceSpan ( brace. span ) ;
425- replace_span. visit_expr_mut ( & mut box_pin. func ) ;
426- box_pin. paren_token . span = brace. span ;
427- } else {
428- unreachable ! ( )
429- }
430-
414+ * block = parse_quote ! ( #box_pin) ;
431415 block. brace_token = brace;
432416}
433417
0 commit comments