1313//! The `Dump` trait can be used together with `DumpVisitor` in order to
1414//! retrieve the data from a crate.
1515
16+ use rustc:: hir;
1617use rustc:: hir:: def_id:: DefId ;
17- use syntax:: ast:: { CrateNum , NodeId } ;
18+ use syntax:: ast:: { self , CrateNum , NodeId } ;
1819use syntax_pos:: Span ;
1920
2021pub struct CrateData {
@@ -76,6 +77,35 @@ pub enum Data {
7677 VariableRefData ( VariableRefData ) ,
7778}
7879
80+ #[ derive( Eq , PartialEq , Clone , Copy , Debug , RustcEncodable ) ]
81+ pub enum Visibility {
82+ Public ,
83+ Restricted ,
84+ Inherited ,
85+ }
86+
87+ impl < ' a > From < & ' a ast:: Visibility > for Visibility {
88+ fn from ( v : & ' a ast:: Visibility ) -> Visibility {
89+ match * v {
90+ ast:: Visibility :: Public => Visibility :: Public ,
91+ ast:: Visibility :: Crate ( _) => Visibility :: Restricted ,
92+ ast:: Visibility :: Restricted { .. } => Visibility :: Restricted ,
93+ ast:: Visibility :: Inherited => Visibility :: Inherited ,
94+ }
95+ }
96+ }
97+
98+ impl < ' a > From < & ' a hir:: Visibility > for Visibility {
99+ fn from ( v : & ' a hir:: Visibility ) -> Visibility {
100+ match * v {
101+ hir:: Visibility :: Public => Visibility :: Public ,
102+ hir:: Visibility :: Crate => Visibility :: Restricted ,
103+ hir:: Visibility :: Restricted { .. } => Visibility :: Restricted ,
104+ hir:: Visibility :: Inherited => Visibility :: Inherited ,
105+ }
106+ }
107+ }
108+
79109/// Data for the prelude of a crate.
80110#[ derive( Debug , RustcEncodable ) ]
81111pub struct CratePreludeData {
@@ -103,7 +133,7 @@ pub struct EnumData {
103133 pub span : Span ,
104134 pub scope : NodeId ,
105135 pub variants : Vec < NodeId > ,
106-
136+ pub visibility : Visibility ,
107137}
108138
109139/// Data for extern crates.
@@ -135,6 +165,8 @@ pub struct FunctionData {
135165 pub span : Span ,
136166 pub scope : NodeId ,
137167 pub value : String ,
168+ pub visibility : Visibility ,
169+ pub parent : Option < NodeId > ,
138170}
139171
140172/// Data about a function call.
@@ -215,6 +247,7 @@ pub struct MethodData {
215247 pub scope : NodeId ,
216248 pub value : String ,
217249 pub decl_id : Option < DefId > ,
250+ pub visibility : Visibility ,
218251}
219252
220253/// Data for modules.
@@ -227,6 +260,7 @@ pub struct ModData {
227260 pub scope : NodeId ,
228261 pub filename : String ,
229262 pub items : Vec < NodeId > ,
263+ pub visibility : Visibility ,
230264}
231265
232266/// Data for a reference to a module.
@@ -248,6 +282,7 @@ pub struct StructData {
248282 pub scope : NodeId ,
249283 pub value : String ,
250284 pub fields : Vec < NodeId > ,
285+ pub visibility : Visibility ,
251286}
252287
253288#[ derive( Debug , RustcEncodable ) ]
@@ -258,7 +293,8 @@ pub struct StructVariantData {
258293 pub qualname : String ,
259294 pub type_value : String ,
260295 pub value : String ,
261- pub scope : NodeId
296+ pub scope : NodeId ,
297+ pub parent : Option < NodeId > ,
262298}
263299
264300#[ derive( Debug , RustcEncodable ) ]
@@ -270,6 +306,7 @@ pub struct TraitData {
270306 pub scope : NodeId ,
271307 pub value : String ,
272308 pub items : Vec < NodeId > ,
309+ pub visibility : Visibility ,
273310}
274311
275312#[ derive( Debug , RustcEncodable ) ]
@@ -280,7 +317,8 @@ pub struct TupleVariantData {
280317 pub qualname : String ,
281318 pub type_value : String ,
282319 pub value : String ,
283- pub scope : NodeId
320+ pub scope : NodeId ,
321+ pub parent : Option < NodeId > ,
284322}
285323
286324/// Data for a typedef.
@@ -291,6 +329,8 @@ pub struct TypeDefData {
291329 pub span : Span ,
292330 pub qualname : String ,
293331 pub value : String ,
332+ pub visibility : Visibility ,
333+ pub parent : Option < NodeId > ,
294334}
295335
296336/// Data for a reference to a type or trait.
@@ -308,15 +348,17 @@ pub struct UseData {
308348 pub span : Span ,
309349 pub name : String ,
310350 pub mod_id : Option < DefId > ,
311- pub scope : NodeId
351+ pub scope : NodeId ,
352+ pub visibility : Visibility ,
312353}
313354
314355#[ derive( Debug , RustcEncodable ) ]
315356pub struct UseGlobData {
316357 pub id : NodeId ,
317358 pub span : Span ,
318359 pub names : Vec < String > ,
319- pub scope : NodeId
360+ pub scope : NodeId ,
361+ pub visibility : Visibility ,
320362}
321363
322364/// Data for local and global variables (consts and statics).
@@ -328,8 +370,10 @@ pub struct VariableData {
328370 pub qualname : String ,
329371 pub span : Span ,
330372 pub scope : NodeId ,
373+ pub parent : Option < NodeId > ,
331374 pub value : String ,
332375 pub type_value : String ,
376+ pub visibility : Visibility ,
333377}
334378
335379#[ derive( Debug , RustcEncodable ) ]
0 commit comments