Skip to content

Commit 3070bb9

Browse files
committed
Simplify by using quote_spanned instead of visitor to replace spans
1 parent 6965e00 commit 3070bb9

File tree

1 file changed

+3
-19
lines changed

1 file changed

+3
-19
lines changed

src/expand.rs

Lines changed: 3 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use crate::receiver::{
44
has_self_in_block, has_self_in_sig, has_self_in_where_predicate, ReplaceReceiver,
55
};
66
use proc_macro2::{Span, TokenStream};
7-
use quote::{format_ident, quote, ToTokens};
7+
use quote::{format_ident, quote, quote_spanned, ToTokens};
88
use std::mem;
99
use syn::punctuated::Punctuated;
1010
use 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

Comments
 (0)