@@ -108,76 +108,80 @@ fn collect_used_generics<'gp>(
108
108
}
109
109
110
110
let mut generics = Vec :: new ( ) ;
111
- walk_ty ( ty, & mut |ty| match ty {
112
- ast:: Type :: PathType ( ty) => {
113
- if let Some ( path) = ty. path ( ) {
114
- if let Some ( name_ref) = path. as_single_name_ref ( ) {
115
- if let Some ( param) = known_generics. iter ( ) . find ( |gp| {
116
- match gp {
117
- ast:: GenericParam :: ConstParam ( cp) => cp. name ( ) ,
118
- ast:: GenericParam :: TypeParam ( tp) => tp. name ( ) ,
119
- _ => None ,
111
+ walk_ty ( ty, & mut |ty| {
112
+ match ty {
113
+ ast:: Type :: PathType ( ty) => {
114
+ if let Some ( path) = ty. path ( ) {
115
+ if let Some ( name_ref) = path. as_single_name_ref ( ) {
116
+ if let Some ( param) = known_generics. iter ( ) . find ( |gp| {
117
+ match gp {
118
+ ast:: GenericParam :: ConstParam ( cp) => cp. name ( ) ,
119
+ ast:: GenericParam :: TypeParam ( tp) => tp. name ( ) ,
120
+ _ => None ,
121
+ }
122
+ . map_or ( false , |n| n. text ( ) == name_ref. text ( ) )
123
+ } ) {
124
+ generics. push ( param) ;
120
125
}
121
- . map_or ( false , |n| n. text ( ) == name_ref. text ( ) )
122
- } ) {
123
- generics. push ( param) ;
124
126
}
127
+ generics. extend (
128
+ path. segments ( )
129
+ . filter_map ( |seg| seg. generic_arg_list ( ) )
130
+ . flat_map ( |it| it. generic_args ( ) )
131
+ . filter_map ( |it| match it {
132
+ ast:: GenericArg :: LifetimeArg ( lt) => {
133
+ let lt = lt. lifetime ( ) ?;
134
+ known_generics. iter ( ) . find ( find_lifetime ( & lt. text ( ) ) )
135
+ }
136
+ _ => None ,
137
+ } ) ,
138
+ ) ;
125
139
}
126
- generics. extend (
127
- path. segments ( )
128
- . filter_map ( |seg| seg. generic_arg_list ( ) )
129
- . flat_map ( |it| it. generic_args ( ) )
130
- . filter_map ( |it| match it {
131
- ast:: GenericArg :: LifetimeArg ( lt) => {
132
- let lt = lt. lifetime ( ) ?;
133
- known_generics. iter ( ) . find ( find_lifetime ( & lt. text ( ) ) )
134
- }
135
- _ => None ,
136
- } ) ,
137
- ) ;
138
140
}
139
- }
140
- ast :: Type :: ImplTraitType ( impl_ty ) => {
141
- if let Some ( it ) = impl_ty . type_bound_list ( ) {
142
- generics . extend (
143
- it . bounds ( )
144
- . filter_map ( |it| it . lifetime ( ) )
145
- . filter_map ( |lt| known_generics . iter ( ) . find ( find_lifetime ( & lt . text ( ) ) ) ) ,
146
- ) ;
141
+ ast :: Type :: ImplTraitType ( impl_ty ) => {
142
+ if let Some ( it ) = impl_ty . type_bound_list ( ) {
143
+ generics . extend (
144
+ it . bounds ( )
145
+ . filter_map ( |it| it . lifetime ( ) )
146
+ . filter_map ( |lt| known_generics . iter ( ) . find ( find_lifetime ( & lt . text ( ) ) ) ) ,
147
+ ) ;
148
+ }
147
149
}
148
- }
149
- ast :: Type :: DynTraitType ( dyn_ty ) => {
150
- if let Some ( it ) = dyn_ty . type_bound_list ( ) {
151
- generics . extend (
152
- it . bounds ( )
153
- . filter_map ( |it| it . lifetime ( ) )
154
- . filter_map ( |lt| known_generics . iter ( ) . find ( find_lifetime ( & lt . text ( ) ) ) ) ,
155
- ) ;
150
+ ast :: Type :: DynTraitType ( dyn_ty ) => {
151
+ if let Some ( it ) = dyn_ty . type_bound_list ( ) {
152
+ generics . extend (
153
+ it . bounds ( )
154
+ . filter_map ( |it| it . lifetime ( ) )
155
+ . filter_map ( |lt| known_generics . iter ( ) . find ( find_lifetime ( & lt . text ( ) ) ) ) ,
156
+ ) ;
157
+ }
156
158
}
157
- }
158
- ast:: Type :: RefType ( ref_) => generics. extend (
159
- ref_. lifetime ( ) . and_then ( |lt| known_generics. iter ( ) . find ( find_lifetime ( & lt. text ( ) ) ) ) ,
160
- ) ,
161
- ast:: Type :: ArrayType ( ar) => {
162
- if let Some ( expr) = ar. expr ( ) {
163
- if let ast:: Expr :: PathExpr ( p) = expr {
164
- if let Some ( path) = p. path ( ) {
165
- if let Some ( name_ref) = path. as_single_name_ref ( ) {
166
- if let Some ( param) = known_generics. iter ( ) . find ( |gp| {
167
- if let ast:: GenericParam :: ConstParam ( cp) = gp {
168
- cp. name ( ) . map_or ( false , |n| n. text ( ) == name_ref. text ( ) )
169
- } else {
170
- false
159
+ ast:: Type :: RefType ( ref_) => generics. extend (
160
+ ref_. lifetime ( )
161
+ . and_then ( |lt| known_generics. iter ( ) . find ( find_lifetime ( & lt. text ( ) ) ) ) ,
162
+ ) ,
163
+ ast:: Type :: ArrayType ( ar) => {
164
+ if let Some ( expr) = ar. expr ( ) {
165
+ if let ast:: Expr :: PathExpr ( p) = expr {
166
+ if let Some ( path) = p. path ( ) {
167
+ if let Some ( name_ref) = path. as_single_name_ref ( ) {
168
+ if let Some ( param) = known_generics. iter ( ) . find ( |gp| {
169
+ if let ast:: GenericParam :: ConstParam ( cp) = gp {
170
+ cp. name ( ) . map_or ( false , |n| n. text ( ) == name_ref. text ( ) )
171
+ } else {
172
+ false
173
+ }
174
+ } ) {
175
+ generics. push ( param) ;
171
176
}
172
- } ) {
173
- generics. push ( param) ;
174
177
}
175
178
}
176
179
}
177
180
}
178
181
}
179
- }
180
- _ => ( ) ,
182
+ _ => ( ) ,
183
+ } ;
184
+ false
181
185
} ) ;
182
186
// stable resort to lifetime, type, const
183
187
generics. sort_by_key ( |gp| match gp {
0 commit comments