@@ -135,6 +135,9 @@ impl <'l, 'tcx> DumpCsvVisitor<'l, 'tcx> {
135135 // always using the first ones. So, only error out if we don't have enough spans.
136136 // What could go wrong...?
137137 if spans. len ( ) < path. segments . len ( ) {
138+ if generated_code ( path. span ) {
139+ return vec ! ( ) ;
140+ }
138141 error ! ( "Mis-calculated spans for path '{}'. Found {} spans, expected {}. Found spans:" ,
139142 path_to_string( path) ,
140143 spans. len( ) ,
@@ -308,28 +311,26 @@ impl <'l, 'tcx> DumpCsvVisitor<'l, 'tcx> {
308311 id : ast:: NodeId ,
309312 name : ast:: Name ,
310313 span : Span ) {
311- if generated_code ( span) {
312- return ;
313- }
314-
315314 debug ! ( "process_method: {}:{}" , id, name) ;
316315
317- let method_data = self . save_ctxt . get_method_data ( id, name, span) ;
316+ if let Some ( method_data) = self . save_ctxt . get_method_data ( id, name, span) {
318317
319- if body. is_some ( ) {
320- self . fmt . method_str ( span,
321- Some ( method_data. span ) ,
322- method_data. id ,
323- & method_data. qualname ,
324- method_data. declaration ,
325- method_data. scope ) ;
326- self . process_formals ( & sig. decl . inputs , & method_data. qualname ) ;
327- } else {
328- self . fmt . method_decl_str ( span,
329- Some ( method_data. span ) ,
330- method_data. id ,
331- & method_data. qualname ,
332- method_data. scope ) ;
318+ if body. is_some ( ) {
319+ self . fmt . method_str ( span,
320+ Some ( method_data. span ) ,
321+ method_data. id ,
322+ & method_data. qualname ,
323+ method_data. declaration ,
324+ method_data. scope ) ;
325+ self . process_formals ( & sig. decl . inputs , & method_data. qualname ) ;
326+ } else {
327+ self . fmt . method_decl_str ( span,
328+ Some ( method_data. span ) ,
329+ method_data. id ,
330+ & method_data. qualname ,
331+ method_data. scope ) ;
332+ }
333+ self . process_generic_params ( & sig. generics , span, & method_data. qualname , id) ;
333334 }
334335
335336 // walk arg and return types
@@ -345,8 +346,6 @@ impl <'l, 'tcx> DumpCsvVisitor<'l, 'tcx> {
345346 if let Some ( body) = body {
346347 self . nest ( id, |v| v. visit_block ( body) ) ;
347348 }
348-
349- self . process_generic_params ( & sig. generics , span, & method_data. qualname , id) ;
350349 }
351350
352351 fn process_trait_ref ( & mut self , trait_ref : & ast:: TraitRef ) {
@@ -402,17 +401,17 @@ impl <'l, 'tcx> DumpCsvVisitor<'l, 'tcx> {
402401 decl : & ast:: FnDecl ,
403402 ty_params : & ast:: Generics ,
404403 body : & ast:: Block ) {
405- let fn_data = self . save_ctxt . get_item_data ( item) ;
406- down_cast_data ! ( fn_data, FunctionData , self , item. span) ;
407- self . fmt . fn_str ( item. span ,
408- Some ( fn_data. span ) ,
409- fn_data. id ,
410- & fn_data. qualname ,
411- fn_data. scope ) ;
412-
413-
414- self . process_formals ( & decl . inputs , & fn_data. qualname ) ;
415- self . process_generic_params ( ty_params , item . span , & fn_data . qualname , item . id ) ;
404+ if let Some ( fn_data) = self . save_ctxt . get_item_data ( item) {
405+ down_cast_data ! ( fn_data, FunctionData , self , item. span) ;
406+ self . fmt . fn_str ( item. span ,
407+ Some ( fn_data. span ) ,
408+ fn_data. id ,
409+ & fn_data. qualname ,
410+ fn_data. scope ) ;
411+
412+ self . process_formals ( & decl . inputs , & fn_data . qualname ) ;
413+ self . process_generic_params ( ty_params , item . span , & fn_data. qualname , item . id ) ;
414+ }
416415
417416 for arg in & decl. inputs {
418417 self . visit_ty ( & arg. ty ) ;
@@ -426,17 +425,17 @@ impl <'l, 'tcx> DumpCsvVisitor<'l, 'tcx> {
426425 }
427426
428427 fn process_static_or_const_item ( & mut self , item : & ast:: Item , typ : & ast:: Ty , expr : & ast:: Expr ) {
429- let var_data = self . save_ctxt . get_item_data ( item) ;
430- down_cast_data ! ( var_data, VariableData , self , item. span) ;
431- self . fmt . static_str ( item. span ,
432- Some ( var_data. span ) ,
433- var_data. id ,
434- & var_data. name ,
435- & var_data. qualname ,
436- & var_data. value ,
437- & var_data. type_value ,
438- var_data. scope ) ;
439-
428+ if let Some ( var_data) = self . save_ctxt . get_item_data ( item) {
429+ down_cast_data ! ( var_data, VariableData , self , item. span) ;
430+ self . fmt . static_str ( item. span ,
431+ Some ( var_data. span ) ,
432+ var_data. id ,
433+ & var_data. name ,
434+ & var_data. qualname ,
435+ & var_data. value ,
436+ & var_data. type_value ,
437+ var_data. scope ) ;
438+ }
440439 self . visit_ty ( & typ) ;
441440 self . visit_expr ( expr) ;
442441 }
@@ -495,6 +494,10 @@ impl <'l, 'tcx> DumpCsvVisitor<'l, 'tcx> {
495494 enum_definition : & ast:: EnumDef ,
496495 ty_params : & ast:: Generics ) {
497496 let enum_data = self . save_ctxt . get_item_data ( item) ;
497+ let enum_data = match enum_data {
498+ None => return ,
499+ Some ( data) => data,
500+ } ;
498501 down_cast_data ! ( enum_data, EnumData , self , item. span) ;
499502 self . fmt . enum_str ( item. span ,
500503 Some ( enum_data. span ) ,
@@ -547,36 +550,36 @@ impl <'l, 'tcx> DumpCsvVisitor<'l, 'tcx> {
547550 trait_ref : & Option < ast:: TraitRef > ,
548551 typ : & ast:: Ty ,
549552 impl_items : & [ P < ast:: ImplItem > ] ) {
550- let impl_data = self . save_ctxt . get_item_data ( item) ;
551- down_cast_data ! ( impl_data, ImplData , self , item. span) ;
552- match impl_data. self_ref {
553- Some ( ref self_ref) => {
553+ let mut has_self_ref = false ;
554+ if let Some ( impl_data) = self . save_ctxt . get_item_data ( item) {
555+ down_cast_data ! ( impl_data, ImplData , self , item. span) ;
556+ if let Some ( ref self_ref) = impl_data. self_ref {
557+ has_self_ref = true ;
554558 self . fmt . ref_str ( recorder:: TypeRef ,
555559 item. span ,
556560 Some ( self_ref. span ) ,
557561 self_ref. ref_id ,
558562 self_ref. scope ) ;
559563 }
560- None => {
561- self . visit_ty ( & typ) ;
564+ if let Some ( ref trait_ref_data) = impl_data. trait_ref {
565+ self . fmt . ref_str ( recorder:: TypeRef ,
566+ item. span ,
567+ Some ( trait_ref_data. span ) ,
568+ trait_ref_data. ref_id ,
569+ trait_ref_data. scope ) ;
570+ visit:: walk_path ( self , & trait_ref. as_ref ( ) . unwrap ( ) . path ) ;
562571 }
572+
573+ self . fmt . impl_str ( item. span ,
574+ Some ( impl_data. span ) ,
575+ impl_data. id ,
576+ impl_data. self_ref . map ( |data| data. ref_id ) ,
577+ impl_data. trait_ref . map ( |data| data. ref_id ) ,
578+ impl_data. scope ) ;
563579 }
564- if let Some ( ref trait_ref_data) = impl_data. trait_ref {
565- self . fmt . ref_str ( recorder:: TypeRef ,
566- item. span ,
567- Some ( trait_ref_data. span ) ,
568- trait_ref_data. ref_id ,
569- trait_ref_data. scope ) ;
570- visit:: walk_path ( self , & trait_ref. as_ref ( ) . unwrap ( ) . path ) ;
580+ if !has_self_ref {
581+ self . visit_ty ( & typ) ;
571582 }
572-
573- self . fmt . impl_str ( item. span ,
574- Some ( impl_data. span ) ,
575- impl_data. id ,
576- impl_data. self_ref . map ( |data| data. ref_id ) ,
577- impl_data. trait_ref . map ( |data| data. ref_id ) ,
578- impl_data. scope ) ;
579-
580583 self . process_generic_params ( type_parameters, item. span , "" , item. id ) ;
581584 for impl_item in impl_items {
582585 self . visit_impl_item ( impl_item) ;
@@ -633,22 +636,23 @@ impl <'l, 'tcx> DumpCsvVisitor<'l, 'tcx> {
633636
634637 // `item` is the module in question, represented as an item.
635638 fn process_mod ( & mut self , item : & ast:: Item ) {
636- let mod_data = self . save_ctxt . get_item_data ( item) ;
637- down_cast_data ! ( mod_data, ModData , self , item. span) ;
638- self . fmt . mod_str ( item. span ,
639- Some ( mod_data. span ) ,
640- mod_data. id ,
641- & mod_data. qualname ,
642- mod_data. scope ,
643- & mod_data. filename ) ;
639+ if let Some ( mod_data) = self . save_ctxt . get_item_data ( item) {
640+ down_cast_data ! ( mod_data, ModData , self , item. span) ;
641+ self . fmt . mod_str ( item. span ,
642+ Some ( mod_data. span ) ,
643+ mod_data. id ,
644+ & mod_data. qualname ,
645+ mod_data. scope ,
646+ & mod_data. filename ) ;
647+ }
644648 }
645649
646650 fn process_path ( & mut self , id : NodeId , path : & ast:: Path , ref_kind : Option < recorder:: Row > ) {
647- if generated_code ( path. span ) {
651+ let path_data = self . save_ctxt . get_path_data ( id, path) ;
652+ if generated_code ( path. span ) && path_data. is_none ( ) {
648653 return ;
649654 }
650655
651- let path_data = self . save_ctxt . get_path_data ( id, path) ;
652656 let path_data = match path_data {
653657 Some ( pd) => pd,
654658 None => {
@@ -719,10 +723,6 @@ impl <'l, 'tcx> DumpCsvVisitor<'l, 'tcx> {
719723 fields : & Vec < ast:: Field > ,
720724 variant : ty:: VariantDef ,
721725 base : & Option < P < ast:: Expr > > ) {
722- if generated_code ( path. span ) {
723- return
724- }
725-
726726 self . write_sub_paths_truncated ( path, false ) ;
727727
728728 if let Some ( struct_lit_data) = self . save_ctxt . get_expr_data ( ex) {
@@ -735,16 +735,15 @@ impl <'l, 'tcx> DumpCsvVisitor<'l, 'tcx> {
735735 let scope = self . save_ctxt . enclosing_scope ( ex. id ) ;
736736
737737 for field in fields {
738- if generated_code ( field. ident . span ) {
739- continue ;
740- }
738+ if let Some ( field_data) = self . save_ctxt
739+ . get_field_ref_data ( field, variant, scope) {
741740
742- let field_data = self . save_ctxt . get_field_ref_data ( field , variant , scope ) ;
743- self . fmt . ref_str ( recorder :: VarRef ,
744- field . ident . span ,
745- Some ( field_data. span ) ,
746- field_data. ref_id ,
747- field_data . scope ) ;
741+ self . fmt . ref_str ( recorder :: VarRef ,
742+ field . ident . span ,
743+ Some ( field_data . span ) ,
744+ field_data. ref_id ,
745+ field_data. scope ) ;
746+ }
748747
749748 self . visit_expr ( & field. expr )
750749 }
@@ -768,10 +767,6 @@ impl <'l, 'tcx> DumpCsvVisitor<'l, 'tcx> {
768767 }
769768
770769 fn process_pat ( & mut self , p : & ast:: Pat ) {
771- if generated_code ( p. span ) {
772- return ;
773- }
774-
775770 match p. node {
776771 ast:: PatStruct ( ref path, ref fields, _) => {
777772 visit:: walk_path ( self , path) ;
@@ -780,10 +775,6 @@ impl <'l, 'tcx> DumpCsvVisitor<'l, 'tcx> {
780775 let variant = adt. variant_of_def ( def) ;
781776
782777 for & Spanned { node : ref field, span } in fields {
783- if generated_code ( span) {
784- continue ;
785- }
786-
787778 let sub_span = self . span . span_for_first_ident ( span) ;
788779 if let Some ( f) = variant. find_field_named ( field. ident . name ) {
789780 self . fmt . ref_str ( recorder:: VarRef , span, sub_span, f. did , self . cur_scope ) ;
@@ -827,10 +818,6 @@ impl <'l, 'tcx> DumpCsvVisitor<'l, 'tcx> {
827818
828819impl < ' l , ' tcx , ' v > Visitor < ' v > for DumpCsvVisitor < ' l , ' tcx > {
829820 fn visit_item ( & mut self , item : & ast:: Item ) {
830- if generated_code ( item. span ) {
831- return
832- }
833-
834821 match item. node {
835822 ast:: ItemUse ( ref use_item) => {
836823 match use_item. node {
@@ -1025,10 +1012,6 @@ impl<'l, 'tcx, 'v> Visitor<'v> for DumpCsvVisitor<'l, 'tcx> {
10251012 }
10261013
10271014 fn visit_ty ( & mut self , t : & ast:: Ty ) {
1028- if generated_code ( t. span ) {
1029- return
1030- }
1031-
10321015 match t. node {
10331016 ast:: TyPath ( _, ref path) => {
10341017 match self . lookup_type_ref ( t. id ) {
@@ -1048,10 +1031,6 @@ impl<'l, 'tcx, 'v> Visitor<'v> for DumpCsvVisitor<'l, 'tcx> {
10481031 }
10491032
10501033 fn visit_expr ( & mut self , ex : & ast:: Expr ) {
1051- if generated_code ( ex. span ) {
1052- return
1053- }
1054-
10551034 match ex. node {
10561035 ast:: ExprCall ( ref _f, ref _args) => {
10571036 // Don't need to do anything for function calls,
@@ -1070,10 +1049,6 @@ impl<'l, 'tcx, 'v> Visitor<'v> for DumpCsvVisitor<'l, 'tcx> {
10701049 }
10711050 ast:: ExprMethodCall ( _, _, ref args) => self . process_method_call ( ex, args) ,
10721051 ast:: ExprField ( ref sub_ex, _) => {
1073- if generated_code ( sub_ex. span ) {
1074- return
1075- }
1076-
10771052 self . visit_expr ( & sub_ex) ;
10781053
10791054 if let Some ( field_data) = self . save_ctxt . get_expr_data ( ex) {
@@ -1086,10 +1061,6 @@ impl<'l, 'tcx, 'v> Visitor<'v> for DumpCsvVisitor<'l, 'tcx> {
10861061 }
10871062 }
10881063 ast:: ExprTupField ( ref sub_ex, idx) => {
1089- if generated_code ( sub_ex. span ) {
1090- return
1091- }
1092-
10931064 self . visit_expr ( & * * sub_ex) ;
10941065
10951066 let hir_node = lower_expr ( self . save_ctxt . lcx , sub_ex) ;
@@ -1110,10 +1081,6 @@ impl<'l, 'tcx, 'v> Visitor<'v> for DumpCsvVisitor<'l, 'tcx> {
11101081 }
11111082 }
11121083 ast:: ExprClosure ( _, ref decl, ref body) => {
1113- if generated_code ( body. span ) {
1114- return
1115- }
1116-
11171084 let mut id = String :: from ( "$" ) ;
11181085 id. push_str ( & ex. id . to_string ( ) ) ;
11191086 self . process_formals ( & decl. inputs , & id) ;
@@ -1210,18 +1177,10 @@ impl<'l, 'tcx, 'v> Visitor<'v> for DumpCsvVisitor<'l, 'tcx> {
12101177 }
12111178
12121179 fn visit_stmt ( & mut self , s : & ast:: Stmt ) {
1213- if generated_code ( s. span ) {
1214- return
1215- }
1216-
12171180 visit:: walk_stmt ( self , s)
12181181 }
12191182
12201183 fn visit_local ( & mut self , l : & ast:: Local ) {
1221- if generated_code ( l. span ) {
1222- return
1223- }
1224-
12251184 let value = self . span . snippet ( l. span ) ;
12261185 self . process_var_decl ( & l. pat , value) ;
12271186
0 commit comments