1010
1111use super :: * ;
1212
13- use hir:: * ;
14- use hir:: intravisit:: Visitor ;
1513use hir:: def_id:: { CRATE_DEF_INDEX , DefId , DefIndex } ;
16- use syntax:: ast:: { NodeId , CRATE_NODE_ID , DUMMY_NODE_ID } ;
14+
15+ use syntax:: ast:: * ;
16+ use syntax:: visit;
1717
1818/// Creates def ids for nodes in the HIR.
1919pub struct DefCollector < ' ast > {
@@ -80,31 +80,23 @@ impl<'ast> DefCollector<'ast> {
8080 }
8181}
8282
83- impl < ' ast > Visitor < ' ast > for DefCollector < ' ast > {
84- /// Because we want to track parent items and so forth, enable
85- /// deep walking so that we walk nested items in the context of
86- /// their outer items.
87- fn visit_nested_item ( & mut self , item : ItemId ) {
88- debug ! ( "visit_nested_item: {:?}" , item) ;
89- self . visit_item ( self . krate . item ( item. id ) )
90- }
91-
83+ impl < ' ast > visit:: Visitor < ' ast > for DefCollector < ' ast > {
9284 fn visit_item ( & mut self , i : & ' ast Item ) {
9385 debug ! ( "visit_item: {:?}" , i) ;
9486
9587 // Pick the def data. This need not be unique, but the more
9688 // information we encapsulate into
9789 let def_data = match i. node {
98- ItemDefaultImpl ( ..) | ItemImpl ( ..) =>
90+ ItemKind :: DefaultImpl ( ..) | ItemKind :: Impl ( ..) =>
9991 DefPathData :: Impl ,
100- ItemEnum ( ..) | ItemStruct ( ..) | ItemTrait ( ..) |
101- ItemExternCrate ( ..) | ItemMod ( ..) | ItemForeignMod ( ..) |
102- ItemTy ( ..) =>
103- DefPathData :: TypeNs ( i. name ) ,
104- ItemStatic ( ..) | ItemConst ( ..) | ItemFn ( ..) =>
105- DefPathData :: ValueNs ( i. name ) ,
106- ItemUse ( ..) =>
107- DefPathData :: Misc ,
92+ ItemKind :: Enum ( ..) | ItemKind :: Struct ( ..) | ItemKind :: Trait ( ..) |
93+ ItemKind :: ExternCrate ( ..) | ItemKind :: Mod ( ..) | ItemKind :: ForeignMod ( ..) |
94+ ItemKind :: Ty ( ..) =>
95+ DefPathData :: TypeNs ( i. ident . name ) ,
96+ ItemKind :: Static ( ..) | ItemKind :: Const ( ..) | ItemKind :: Fn ( ..) =>
97+ DefPathData :: ValueNs ( i. ident . name ) ,
98+ ItemKind :: Mac ( ..) => DefPathData :: MacroDef ( i . ident . name ) ,
99+ ItemKind :: Use ( .. ) => DefPathData :: Misc ,
108100 } ;
109101
110102 let def = self . create_def ( i. id , def_data) ;
@@ -113,59 +105,63 @@ impl<'ast> Visitor<'ast> for DefCollector<'ast> {
113105 self . parent_def = Some ( def) ;
114106
115107 match i. node {
116- ItemEnum ( ref enum_definition, _) => {
108+ ItemKind :: Enum ( ref enum_definition, _) => {
117109 for v in & enum_definition. variants {
118110 let variant_def_index =
119111 self . create_def ( v. node . data . id ( ) ,
120- DefPathData :: EnumVariant ( v. node . name ) ) ;
112+ DefPathData :: EnumVariant ( v. node . name . name ) ) ;
121113
122114 for field in v. node . data . fields ( ) {
123- self . create_def_with_parent (
124- Some ( variant_def_index) ,
125- field. id ,
126- DefPathData :: Field ( field. name ) ) ;
115+ if let Some ( ident) = field. ident {
116+ self . create_def_with_parent ( Some ( variant_def_index) ,
117+ field. id ,
118+ DefPathData :: Field ( ident. name ) ) ;
119+ }
127120 }
128121 }
129122 }
130- ItemStruct ( ref struct_def, _) => {
123+ ItemKind :: Struct ( ref struct_def, _) => {
131124 // If this is a tuple-like struct, register the constructor.
132125 if !struct_def. is_struct ( ) {
133126 self . create_def ( struct_def. id ( ) ,
134127 DefPathData :: StructCtor ) ;
135128 }
136129
137130 for field in struct_def. fields ( ) {
138- self . create_def ( field. id , DefPathData :: Field ( field. name ) ) ;
131+ if let Some ( ident) = field. ident {
132+ self . create_def ( field. id , DefPathData :: Field ( ident. name ) ) ;
133+ }
139134 }
140135 }
141136 _ => { }
142137 }
143- intravisit :: walk_item ( self , i) ;
138+ visit :: walk_item ( self , i) ;
144139 self . parent_def = parent_def;
145140 }
146141
147142 fn visit_foreign_item ( & mut self , foreign_item : & ' ast ForeignItem ) {
148- let def = self . create_def ( foreign_item. id , DefPathData :: ValueNs ( foreign_item. name ) ) ;
143+ let def = self . create_def ( foreign_item. id , DefPathData :: ValueNs ( foreign_item. ident . name ) ) ;
149144
150145 let parent_def = self . parent_def ;
151146 self . parent_def = Some ( def) ;
152- intravisit :: walk_foreign_item ( self , foreign_item) ;
147+ visit :: walk_foreign_item ( self , foreign_item) ;
153148 self . parent_def = parent_def;
154149 }
155150
156151 fn visit_generics ( & mut self , generics : & ' ast Generics ) {
157152 for ty_param in generics. ty_params . iter ( ) {
158153 self . create_def ( ty_param. id ,
159- DefPathData :: TypeParam ( ty_param. name ) ) ;
154+ DefPathData :: TypeParam ( ty_param. ident . name ) ) ;
160155 }
161156
162- intravisit :: walk_generics ( self , generics) ;
157+ visit :: walk_generics ( self , generics) ;
163158 }
164159
165160 fn visit_trait_item ( & mut self , ti : & ' ast TraitItem ) {
166161 let def_data = match ti. node {
167- MethodTraitItem ( ..) | ConstTraitItem ( ..) => DefPathData :: ValueNs ( ti. name ) ,
168- TypeTraitItem ( ..) => DefPathData :: TypeNs ( ti. name ) ,
162+ TraitItemKind :: Method ( ..) | TraitItemKind :: Const ( ..) =>
163+ DefPathData :: ValueNs ( ti. ident . name ) ,
164+ TraitItemKind :: Type ( ..) => DefPathData :: TypeNs ( ti. ident . name ) ,
169165 } ;
170166
171167 let def = self . create_def ( ti. id , def_data) ;
@@ -174,21 +170,23 @@ impl<'ast> Visitor<'ast> for DefCollector<'ast> {
174170 self . parent_def = Some ( def) ;
175171
176172 match ti. node {
177- ConstTraitItem ( _, Some ( ref expr) ) => {
173+ TraitItemKind :: Const ( _, Some ( ref expr) ) => {
178174 self . create_def ( expr. id , DefPathData :: Initializer ) ;
179175 }
180176 _ => { }
181177 }
182178
183- intravisit :: walk_trait_item ( self , ti) ;
179+ visit :: walk_trait_item ( self , ti) ;
184180
185181 self . parent_def = parent_def;
186182 }
187183
188184 fn visit_impl_item ( & mut self , ii : & ' ast ImplItem ) {
189185 let def_data = match ii. node {
190- ImplItemKind :: Method ( ..) | ImplItemKind :: Const ( ..) => DefPathData :: ValueNs ( ii. name ) ,
191- ImplItemKind :: Type ( ..) => DefPathData :: TypeNs ( ii. name ) ,
186+ ImplItemKind :: Method ( ..) | ImplItemKind :: Const ( ..) =>
187+ DefPathData :: ValueNs ( ii. ident . name ) ,
188+ ImplItemKind :: Type ( ..) => DefPathData :: TypeNs ( ii. ident . name ) ,
189+ ImplItemKind :: Macro ( ..) => DefPathData :: MacroDef ( ii. ident . name ) ,
192190 } ;
193191
194192 let def = self . create_def ( ii. id , def_data) ;
@@ -203,7 +201,7 @@ impl<'ast> Visitor<'ast> for DefCollector<'ast> {
203201 _ => { }
204202 }
205203
206- intravisit :: walk_impl_item ( self , ii) ;
204+ visit :: walk_impl_item ( self , ii) ;
207205
208206 self . parent_def = parent_def;
209207 }
@@ -220,35 +218,35 @@ impl<'ast> Visitor<'ast> for DefCollector<'ast> {
220218 self . parent_def = Some ( def) ;
221219 }
222220
223- intravisit :: walk_pat ( self , pat) ;
221+ visit :: walk_pat ( self , pat) ;
224222 self . parent_def = parent_def;
225223 }
226224
227225 fn visit_expr ( & mut self , expr : & ' ast Expr ) {
228226 let parent_def = self . parent_def ;
229227
230- if let ExprClosure ( ..) = expr. node {
228+ if let ExprKind :: Closure ( ..) = expr. node {
231229 let def = self . create_def ( expr. id , DefPathData :: ClosureExpr ) ;
232230 self . parent_def = Some ( def) ;
233231 }
234232
235- intravisit :: walk_expr ( self , expr) ;
233+ visit :: walk_expr ( self , expr) ;
236234 self . parent_def = parent_def;
237235 }
238236
239237 fn visit_stmt ( & mut self , stmt : & ' ast Stmt ) {
240- intravisit :: walk_stmt ( self , stmt) ;
238+ visit :: walk_stmt ( self , stmt) ;
241239 }
242240
243241 fn visit_block ( & mut self , block : & ' ast Block ) {
244- intravisit :: walk_block ( self , block) ;
242+ visit :: walk_block ( self , block) ;
245243 }
246244
247245 fn visit_lifetime_def ( & mut self , def : & ' ast LifetimeDef ) {
248246 self . create_def ( def. lifetime . id , DefPathData :: LifetimeDef ( def. lifetime . name ) ) ;
249247 }
250248
251249 fn visit_macro_def ( & mut self , macro_def : & ' ast MacroDef ) {
252- self . create_def ( macro_def. id , DefPathData :: MacroDef ( macro_def. name ) ) ;
250+ self . create_def ( macro_def. id , DefPathData :: MacroDef ( macro_def. ident . name ) ) ;
253251 }
254252}
0 commit comments