@@ -107,6 +107,7 @@ pub fn path_to_string<PI: Iterator<Item=PathElem>>(path: PI) -> String {
107
107
#[ derive( Copy , Show ) ]
108
108
pub enum Node < ' ast > {
109
109
NodeItem ( & ' ast Item ) ,
110
+ NodeViewItem ( & ' ast ViewItem ) ,
110
111
NodeForeignItem ( & ' ast ForeignItem ) ,
111
112
NodeTraitItem ( & ' ast TraitItem ) ,
112
113
NodeImplItem ( & ' ast ImplItem ) ,
@@ -133,6 +134,7 @@ enum MapEntry<'ast> {
133
134
134
135
/// All the node types, with a parent ID.
135
136
EntryItem ( NodeId , & ' ast Item ) ,
137
+ EntryViewItem ( NodeId , & ' ast ViewItem ) ,
136
138
EntryForeignItem ( NodeId , & ' ast ForeignItem ) ,
137
139
EntryTraitItem ( NodeId , & ' ast TraitItem ) ,
138
140
EntryImplItem ( NodeId , & ' ast ImplItem ) ,
@@ -167,6 +169,7 @@ impl<'ast> MapEntry<'ast> {
167
169
fn from_node ( p : NodeId , node : Node < ' ast > ) -> MapEntry < ' ast > {
168
170
match node {
169
171
NodeItem ( n) => EntryItem ( p, n) ,
172
+ NodeViewItem ( n) => EntryViewItem ( p, n) ,
170
173
NodeForeignItem ( n) => EntryForeignItem ( p, n) ,
171
174
NodeTraitItem ( n) => EntryTraitItem ( p, n) ,
172
175
NodeImplItem ( n) => EntryImplItem ( p, n) ,
@@ -185,6 +188,7 @@ impl<'ast> MapEntry<'ast> {
185
188
fn parent ( self ) -> Option < NodeId > {
186
189
Some ( match self {
187
190
EntryItem ( id, _) => id,
191
+ EntryViewItem ( id, _) => id,
188
192
EntryForeignItem ( id, _) => id,
189
193
EntryTraitItem ( id, _) => id,
190
194
EntryImplItem ( id, _) => id,
@@ -204,6 +208,7 @@ impl<'ast> MapEntry<'ast> {
204
208
fn to_node ( self ) -> Option < Node < ' ast > > {
205
209
Some ( match self {
206
210
EntryItem ( _, n) => NodeItem ( n) ,
211
+ EntryViewItem ( _, n) => NodeViewItem ( n) ,
207
212
EntryForeignItem ( _, n) => NodeForeignItem ( n) ,
208
213
EntryTraitItem ( _, n) => NodeTraitItem ( n) ,
209
214
EntryImplItem ( _, n) => NodeImplItem ( n) ,
@@ -336,6 +341,13 @@ impl<'ast> Map<'ast> {
336
341
}
337
342
}
338
343
344
+ pub fn expect_view_item ( & self , id : NodeId ) -> & ' ast ViewItem {
345
+ match self . find ( id) {
346
+ Some ( NodeViewItem ( view_item) ) => view_item,
347
+ _ => panic ! ( "expected view item, found {}" , self . node_to_string( id) )
348
+ }
349
+ }
350
+
339
351
pub fn expect_struct ( & self , id : NodeId ) -> & ' ast StructDef {
340
352
match self . find ( id) {
341
353
Some ( NodeItem ( i) ) => {
@@ -521,6 +533,7 @@ impl<'ast> Map<'ast> {
521
533
pub fn opt_span ( & self , id : NodeId ) -> Option < Span > {
522
534
let sp = match self . find ( id) {
523
535
Some ( NodeItem ( item) ) => item. span ,
536
+ Some ( NodeViewItem ( item) ) => item. span ,
524
537
Some ( NodeForeignItem ( foreign_item) ) => foreign_item. span ,
525
538
Some ( NodeTraitItem ( trait_method) ) => {
526
539
match * trait_method {
@@ -813,6 +826,11 @@ impl<'ast> Visitor<'ast> for NodeCollector<'ast> {
813
826
self . parent = parent;
814
827
}
815
828
829
+ fn visit_view_item ( & mut self , item : & ' ast ViewItem ) {
830
+ self . insert ( item. id ( ) , NodeViewItem ( item) ) ;
831
+ visit:: walk_view_item ( self , item) ;
832
+ }
833
+
816
834
fn visit_pat ( & mut self , pat : & ' ast Pat ) {
817
835
self . insert ( pat. id , match pat. node {
818
836
// Note: this is at least *potentially* a pattern...
@@ -1018,6 +1036,7 @@ impl<'a> NodePrinter for pprust::State<'a> {
1018
1036
fn print_node ( & mut self , node : & Node ) -> IoResult < ( ) > {
1019
1037
match * node {
1020
1038
NodeItem ( a) => self . print_item ( & * a) ,
1039
+ NodeViewItem ( a) => self . print_view_item ( & * a) ,
1021
1040
NodeForeignItem ( a) => self . print_foreign_item ( & * a) ,
1022
1041
NodeTraitItem ( a) => self . print_trait_method ( & * a) ,
1023
1042
NodeImplItem ( a) => self . print_impl_item ( & * a) ,
@@ -1060,6 +1079,9 @@ fn node_id_to_string(map: &Map, id: NodeId, include_id: bool) -> String {
1060
1079
} ;
1061
1080
format ! ( "{} {}{}" , item_str, path_str, id_str)
1062
1081
}
1082
+ Some ( NodeViewItem ( item) ) => {
1083
+ format ! ( "view item {}{}" , pprust:: view_item_to_string( & * item) , id_str)
1084
+ }
1063
1085
Some ( NodeForeignItem ( item) ) => {
1064
1086
let path_str = map. path_to_str_with_ident ( id, item. ident ) ;
1065
1087
format ! ( "foreign item {}{}" , path_str, id_str)
0 commit comments