@@ -2,6 +2,7 @@ use crate::bound::{has_bound, InferredBound, Supertraits};
2
2
use crate :: lifetime:: { AddLifetimeToImplTrait , CollectLifetimes } ;
3
3
use crate :: parse:: Item ;
4
4
use crate :: receiver:: { has_self_in_block, has_self_in_sig, mut_pat, ReplaceSelf } ;
5
+ use crate :: verbatim:: VerbatimFn ;
5
6
use proc_macro2:: { Span , TokenStream } ;
6
7
use quote:: { format_ident, quote, quote_spanned, ToTokens } ;
7
8
use std:: collections:: BTreeSet as Set ;
@@ -11,7 +12,7 @@ use syn::visit_mut::{self, VisitMut};
11
12
use syn:: {
12
13
parse_quote, parse_quote_spanned, Attribute , Block , FnArg , GenericArgument , GenericParam ,
13
14
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 ,
15
16
} ;
16
17
17
18
impl ToTokens for Item {
@@ -94,15 +95,27 @@ pub fn expand(input: &mut Item, is_local: bool) {
94
95
associated_type_impl_traits : & associated_type_impl_traits,
95
96
} ;
96
97
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 ;
100
101
let block = & mut method. block ;
101
102
let has_self = has_self_in_sig ( sig) || has_self_in_block ( block) ;
102
103
transform_block ( context, sig, block) ;
103
104
transform_sig ( context, sig, has_self, false , is_local) ;
104
105
method. attrs . push ( lint_suppress_with_body ( ) ) ;
105
106
}
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
+ _ => { }
106
119
}
107
120
}
108
121
}
@@ -329,12 +342,6 @@ fn transform_sig(
329
342
// ___ret
330
343
// })
331
344
fn 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
-
338
345
let mut self_span = None ;
339
346
let decls = sig
340
347
. inputs
0 commit comments