@@ -3,29 +3,34 @@ use quote::{format_ident, quote, quote_spanned, ToTokens};
3
3
use syn:: spanned:: Spanned ;
4
4
use syn:: {
5
5
parse:: { Parse , ParseStream } ,
6
- parse_macro_input, parse_quote, Attribute , Data , DeriveInput ,
7
- Fields , GenericParam , Generics , Ident , Index , LitStr , Meta , Token
6
+ parse_macro_input, parse_quote, Attribute , Data , DeriveInput , Fields , GenericParam , Generics ,
7
+ Ident , Index , LitStr , Meta , Token ,
8
8
} ;
9
9
10
-
11
10
/// Implementation of `[#derive(Visit)]`
12
11
#[ proc_macro_derive( VisitMut , attributes( visit) ) ]
13
12
pub fn derive_visit_mut ( input : proc_macro:: TokenStream ) -> proc_macro:: TokenStream {
14
- derive_visit ( input, & VisitType {
15
- visit_trait : quote ! ( VisitMut ) ,
16
- visitor_trait : quote ! ( VisitorMut ) ,
17
- modifier : Some ( quote ! ( mut ) ) ,
18
- } )
13
+ derive_visit (
14
+ input,
15
+ & VisitType {
16
+ visit_trait : quote ! ( VisitMut ) ,
17
+ visitor_trait : quote ! ( VisitorMut ) ,
18
+ modifier : Some ( quote ! ( mut ) ) ,
19
+ } ,
20
+ )
19
21
}
20
22
21
23
/// Implementation of `[#derive(Visit)]`
22
24
#[ proc_macro_derive( Visit , attributes( visit) ) ]
23
25
pub fn derive_visit_immutable ( input : proc_macro:: TokenStream ) -> proc_macro:: TokenStream {
24
- derive_visit ( input, & VisitType {
25
- visit_trait : quote ! ( Visit ) ,
26
- visitor_trait : quote ! ( Visitor ) ,
27
- modifier : None ,
28
- } )
26
+ derive_visit (
27
+ input,
28
+ & VisitType {
29
+ visit_trait : quote ! ( Visit ) ,
30
+ visitor_trait : quote ! ( Visitor ) ,
31
+ modifier : None ,
32
+ } ,
33
+ )
29
34
}
30
35
31
36
struct VisitType {
@@ -34,15 +39,16 @@ struct VisitType {
34
39
modifier : Option < TokenStream > ,
35
40
}
36
41
37
- fn derive_visit (
38
- input : proc_macro:: TokenStream ,
39
- visit_type : & VisitType ,
40
- ) -> proc_macro:: TokenStream {
42
+ fn derive_visit ( input : proc_macro:: TokenStream , visit_type : & VisitType ) -> proc_macro:: TokenStream {
41
43
// Parse the input tokens into a syntax tree.
42
44
let input = parse_macro_input ! ( input as DeriveInput ) ;
43
45
let name = input. ident ;
44
46
45
- let VisitType { visit_trait, visitor_trait, modifier } = visit_type;
47
+ let VisitType {
48
+ visit_trait,
49
+ visitor_trait,
50
+ modifier,
51
+ } = visit_type;
46
52
47
53
let attributes = Attributes :: parse ( & input. attrs ) ;
48
54
// Add a bound `T: Visit` to every type parameter T.
@@ -87,7 +93,10 @@ impl Parse for WithIdent {
87
93
let mut result = WithIdent { with : None } ;
88
94
let ident = input. parse :: < Ident > ( ) ?;
89
95
if ident != "with" {
90
- return Err ( syn:: Error :: new ( ident. span ( ) , "Expected identifier to be `with`" ) ) ;
96
+ return Err ( syn:: Error :: new (
97
+ ident. span ( ) ,
98
+ "Expected identifier to be `with`" ,
99
+ ) ) ;
91
100
}
92
101
input. parse :: < Token ! ( =) > ( ) ?;
93
102
let s = input. parse :: < LitStr > ( ) ?;
@@ -131,17 +140,26 @@ impl Attributes {
131
140
}
132
141
133
142
// Add a bound `T: Visit` to every type parameter T.
134
- fn add_trait_bounds ( mut generics : Generics , VisitType { visit_trait, ..} : & VisitType ) -> Generics {
143
+ fn add_trait_bounds ( mut generics : Generics , VisitType { visit_trait, .. } : & VisitType ) -> Generics {
135
144
for param in & mut generics. params {
136
145
if let GenericParam :: Type ( ref mut type_param) = * param {
137
- type_param. bounds . push ( parse_quote ! ( sqlparser:: ast:: #visit_trait) ) ;
146
+ type_param
147
+ . bounds
148
+ . push ( parse_quote ! ( sqlparser:: ast:: #visit_trait) ) ;
138
149
}
139
150
}
140
151
generics
141
152
}
142
153
143
154
// Generate the body of the visit implementation for the given type
144
- fn visit_children ( data : & Data , VisitType { visit_trait, modifier, ..} : & VisitType ) -> TokenStream {
155
+ fn visit_children (
156
+ data : & Data ,
157
+ VisitType {
158
+ visit_trait,
159
+ modifier,
160
+ ..
161
+ } : & VisitType ,
162
+ ) -> TokenStream {
145
163
match data {
146
164
Data :: Struct ( data) => match & data. fields {
147
165
Fields :: Named ( fields) => {
0 commit comments