@@ -2,6 +2,7 @@ use crate::bound::{has_bound, InferredBound, Supertraits};
22use crate :: lifetime:: { AddLifetimeToImplTrait , CollectLifetimes } ;
33use crate :: parse:: Item ;
44use crate :: receiver:: { has_self_in_block, has_self_in_sig, mut_pat, ReplaceSelf } ;
5+ use crate :: verbatim:: VerbatimFn ;
56use proc_macro2:: { Span , TokenStream } ;
67use quote:: { format_ident, quote, quote_spanned, ToTokens } ;
78use std:: collections:: BTreeSet as Set ;
@@ -11,7 +12,7 @@ use syn::visit_mut::{self, VisitMut};
1112use syn:: {
1213 parse_quote, parse_quote_spanned, Attribute , Block , FnArg , GenericArgument , GenericParam ,
1314 Generics , Ident , ImplItem , Lifetime , LifetimeParam , Pat , PatIdent , PathArguments , Receiver ,
14- ReturnType , Signature , Stmt , Token , TraitItem , Type , TypePath , WhereClause ,
15+ ReturnType , Signature , Token , TraitItem , Type , TypePath , WhereClause ,
1516} ;
1617
1718impl ToTokens for Item {
@@ -94,15 +95,27 @@ pub fn expand(input: &mut Item, is_local: bool) {
9495 associated_type_impl_traits : & associated_type_impl_traits,
9596 } ;
9697 for inner in & mut input. items {
97- if let ImplItem :: Fn ( method ) = inner {
98- let sig = & mut method. sig ;
99- if sig. asyncness . is_some ( ) {
98+ match inner {
99+ ImplItem :: Fn ( method ) if method. sig . asyncness . is_some ( ) => {
100+ let sig = & mut method . sig ;
100101 let block = & mut method. block ;
101102 let has_self = has_self_in_sig ( sig) || has_self_in_block ( block) ;
102103 transform_block ( context, sig, block) ;
103104 transform_sig ( context, sig, has_self, false , is_local) ;
104105 method. attrs . push ( lint_suppress_with_body ( ) ) ;
105106 }
107+ ImplItem :: Verbatim ( tokens) => {
108+ let mut method = match syn:: parse2 :: < VerbatimFn > ( tokens. clone ( ) ) {
109+ Ok ( method) if method. sig . asyncness . is_some ( ) => method,
110+ _ => continue ,
111+ } ;
112+ let sig = & mut method. sig ;
113+ let has_self = has_self_in_sig ( sig) ;
114+ transform_sig ( context, sig, has_self, false , is_local) ;
115+ method. attrs . push ( lint_suppress_with_body ( ) ) ;
116+ * tokens = quote ! ( #method) ;
117+ }
118+ _ => { }
106119 }
107120 }
108121 }
@@ -329,12 +342,6 @@ fn transform_sig(
329342// ___ret
330343// })
331344fn transform_block ( context : Context , sig : & mut Signature , block : & mut Block ) {
332- if let Some ( Stmt :: Item ( syn:: Item :: Verbatim ( item) ) ) = block. stmts . first ( ) {
333- if block. stmts . len ( ) == 1 && item. to_string ( ) == ";" {
334- return ;
335- }
336- }
337-
338345 let mut self_span = None ;
339346 let decls = sig
340347 . inputs
0 commit comments