@@ -127,6 +127,9 @@ pub trait Visitor<'v> : Sized {
127
127
fn visit_path ( & mut self , path : & ' v Path , _id : ast:: NodeId ) {
128
128
walk_path ( self , path)
129
129
}
130
+ fn visit_path_list_item ( & mut self , prefix : & ' v Path , item : & ' v PathListItem ) {
131
+ walk_path_list_item ( self , prefix, item)
132
+ }
130
133
fn visit_path_segment ( & mut self , path_span : Span , path_segment : & ' v PathSegment ) {
131
134
walk_path_segment ( self , path_span, path_segment)
132
135
}
@@ -209,33 +212,20 @@ pub fn walk_item<'v, V: Visitor<'v>>(visitor: &mut V, item: &'v Item) {
209
212
ItemExternCrate ( ..) => { }
210
213
ItemUse ( ref vp) => {
211
214
match vp. node {
212
- ViewPathSimple ( ident, ref path) => {
213
- visitor. visit_ident ( vp. span , ident) ;
215
+ ViewPathSimple ( _ident, ref path) => {
214
216
visitor. visit_path ( path, item. id ) ;
215
217
}
216
218
ViewPathGlob ( ref path) => {
217
219
visitor. visit_path ( path, item. id ) ;
218
220
}
219
221
ViewPathList ( ref prefix, ref list) => {
220
- for id in list {
221
- match id. node {
222
- PathListIdent { name, rename, .. } => {
223
- visitor. visit_ident ( id. span , name) ;
224
- if let Some ( ident) = rename {
225
- visitor. visit_ident ( id. span , ident) ;
226
- }
227
- }
228
- PathListMod { rename, .. } => {
229
- if let Some ( ident) = rename {
230
- visitor. visit_ident ( id. span , ident) ;
231
- }
232
- }
222
+ if !list. is_empty ( ) {
223
+ for item in list {
224
+ visitor. visit_path_list_item ( prefix, item)
233
225
}
226
+ } else {
227
+ visitor. visit_path ( prefix, item. id ) ;
234
228
}
235
-
236
- // Note that the `prefix` here is not a complete
237
- // path, so we don't use `visit_path`.
238
- walk_path ( visitor, prefix) ;
239
229
}
240
230
}
241
231
}
@@ -417,6 +407,17 @@ pub fn walk_path<'v, V: Visitor<'v>>(visitor: &mut V, path: &'v Path) {
417
407
}
418
408
}
419
409
410
+ pub fn walk_path_list_item < ' v , V : Visitor < ' v > > ( visitor : & mut V , prefix : & ' v Path ,
411
+ item : & ' v PathListItem ) {
412
+ for segment in & prefix. segments {
413
+ visitor. visit_path_segment ( prefix. span , segment) ;
414
+ }
415
+
416
+ if let PathListIdent { name, .. } = item. node {
417
+ visitor. visit_ident ( item. span , name) ;
418
+ }
419
+ }
420
+
420
421
pub fn walk_path_segment < ' v , V : Visitor < ' v > > ( visitor : & mut V ,
421
422
path_span : Span ,
422
423
segment : & ' v PathSegment ) {
0 commit comments