@@ -135,6 +135,9 @@ impl <'l, 'tcx> DumpCsvVisitor<'l, 'tcx> {
135
135
// always using the first ones. So, only error out if we don't have enough spans.
136
136
// What could go wrong...?
137
137
if spans. len ( ) < path. segments . len ( ) {
138
+ if generated_code ( path. span ) {
139
+ return vec ! ( ) ;
140
+ }
138
141
error ! ( "Mis-calculated spans for path '{}'. Found {} spans, expected {}. Found spans:" ,
139
142
path_to_string( path) ,
140
143
spans. len( ) ,
@@ -308,28 +311,26 @@ impl <'l, 'tcx> DumpCsvVisitor<'l, 'tcx> {
308
311
id : ast:: NodeId ,
309
312
name : ast:: Name ,
310
313
span : Span ) {
311
- if generated_code ( span) {
312
- return ;
313
- }
314
-
315
314
debug ! ( "process_method: {}:{}" , id, name) ;
316
315
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) {
318
317
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) ;
333
334
}
334
335
335
336
// walk arg and return types
@@ -345,8 +346,6 @@ impl <'l, 'tcx> DumpCsvVisitor<'l, 'tcx> {
345
346
if let Some ( body) = body {
346
347
self . nest ( id, |v| v. visit_block ( body) ) ;
347
348
}
348
-
349
- self . process_generic_params ( & sig. generics , span, & method_data. qualname , id) ;
350
349
}
351
350
352
351
fn process_trait_ref ( & mut self , trait_ref : & ast:: TraitRef ) {
@@ -402,17 +401,17 @@ impl <'l, 'tcx> DumpCsvVisitor<'l, 'tcx> {
402
401
decl : & ast:: FnDecl ,
403
402
ty_params : & ast:: Generics ,
404
403
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
+ }
416
415
417
416
for arg in & decl. inputs {
418
417
self . visit_ty ( & arg. ty ) ;
@@ -426,17 +425,17 @@ impl <'l, 'tcx> DumpCsvVisitor<'l, 'tcx> {
426
425
}
427
426
428
427
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
+ }
440
439
self . visit_ty ( & typ) ;
441
440
self . visit_expr ( expr) ;
442
441
}
@@ -495,6 +494,10 @@ impl <'l, 'tcx> DumpCsvVisitor<'l, 'tcx> {
495
494
enum_definition : & ast:: EnumDef ,
496
495
ty_params : & ast:: Generics ) {
497
496
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
+ } ;
498
501
down_cast_data ! ( enum_data, EnumData , self , item. span) ;
499
502
self . fmt . enum_str ( item. span ,
500
503
Some ( enum_data. span ) ,
@@ -547,36 +550,36 @@ impl <'l, 'tcx> DumpCsvVisitor<'l, 'tcx> {
547
550
trait_ref : & Option < ast:: TraitRef > ,
548
551
typ : & ast:: Ty ,
549
552
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 ;
554
558
self . fmt . ref_str ( recorder:: TypeRef ,
555
559
item. span ,
556
560
Some ( self_ref. span ) ,
557
561
self_ref. ref_id ,
558
562
self_ref. scope ) ;
559
563
}
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 ) ;
562
571
}
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 ) ;
563
579
}
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) ;
571
582
}
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
-
580
583
self . process_generic_params ( type_parameters, item. span , "" , item. id ) ;
581
584
for impl_item in impl_items {
582
585
self . visit_impl_item ( impl_item) ;
@@ -633,22 +636,23 @@ impl <'l, 'tcx> DumpCsvVisitor<'l, 'tcx> {
633
636
634
637
// `item` is the module in question, represented as an item.
635
638
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
+ }
644
648
}
645
649
646
650
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 ( ) {
648
653
return ;
649
654
}
650
655
651
- let path_data = self . save_ctxt . get_path_data ( id, path) ;
652
656
let path_data = match path_data {
653
657
Some ( pd) => pd,
654
658
None => {
@@ -719,10 +723,6 @@ impl <'l, 'tcx> DumpCsvVisitor<'l, 'tcx> {
719
723
fields : & Vec < ast:: Field > ,
720
724
variant : ty:: VariantDef ,
721
725
base : & Option < P < ast:: Expr > > ) {
722
- if generated_code ( path. span ) {
723
- return
724
- }
725
-
726
726
self . write_sub_paths_truncated ( path, false ) ;
727
727
728
728
if let Some ( struct_lit_data) = self . save_ctxt . get_expr_data ( ex) {
@@ -735,16 +735,15 @@ impl <'l, 'tcx> DumpCsvVisitor<'l, 'tcx> {
735
735
let scope = self . save_ctxt . enclosing_scope ( ex. id ) ;
736
736
737
737
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) {
741
740
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
+ }
748
747
749
748
self . visit_expr ( & field. expr )
750
749
}
@@ -768,10 +767,6 @@ impl <'l, 'tcx> DumpCsvVisitor<'l, 'tcx> {
768
767
}
769
768
770
769
fn process_pat ( & mut self , p : & ast:: Pat ) {
771
- if generated_code ( p. span ) {
772
- return ;
773
- }
774
-
775
770
match p. node {
776
771
ast:: PatStruct ( ref path, ref fields, _) => {
777
772
visit:: walk_path ( self , path) ;
@@ -780,10 +775,6 @@ impl <'l, 'tcx> DumpCsvVisitor<'l, 'tcx> {
780
775
let variant = adt. variant_of_def ( def) ;
781
776
782
777
for & Spanned { node : ref field, span } in fields {
783
- if generated_code ( span) {
784
- continue ;
785
- }
786
-
787
778
let sub_span = self . span . span_for_first_ident ( span) ;
788
779
if let Some ( f) = variant. find_field_named ( field. ident . name ) {
789
780
self . fmt . ref_str ( recorder:: VarRef , span, sub_span, f. did , self . cur_scope ) ;
@@ -827,10 +818,6 @@ impl <'l, 'tcx> DumpCsvVisitor<'l, 'tcx> {
827
818
828
819
impl < ' l , ' tcx , ' v > Visitor < ' v > for DumpCsvVisitor < ' l , ' tcx > {
829
820
fn visit_item ( & mut self , item : & ast:: Item ) {
830
- if generated_code ( item. span ) {
831
- return
832
- }
833
-
834
821
match item. node {
835
822
ast:: ItemUse ( ref use_item) => {
836
823
match use_item. node {
@@ -1025,10 +1012,6 @@ impl<'l, 'tcx, 'v> Visitor<'v> for DumpCsvVisitor<'l, 'tcx> {
1025
1012
}
1026
1013
1027
1014
fn visit_ty ( & mut self , t : & ast:: Ty ) {
1028
- if generated_code ( t. span ) {
1029
- return
1030
- }
1031
-
1032
1015
match t. node {
1033
1016
ast:: TyPath ( _, ref path) => {
1034
1017
match self . lookup_type_ref ( t. id ) {
@@ -1048,10 +1031,6 @@ impl<'l, 'tcx, 'v> Visitor<'v> for DumpCsvVisitor<'l, 'tcx> {
1048
1031
}
1049
1032
1050
1033
fn visit_expr ( & mut self , ex : & ast:: Expr ) {
1051
- if generated_code ( ex. span ) {
1052
- return
1053
- }
1054
-
1055
1034
match ex. node {
1056
1035
ast:: ExprCall ( ref _f, ref _args) => {
1057
1036
// Don't need to do anything for function calls,
@@ -1070,10 +1049,6 @@ impl<'l, 'tcx, 'v> Visitor<'v> for DumpCsvVisitor<'l, 'tcx> {
1070
1049
}
1071
1050
ast:: ExprMethodCall ( _, _, ref args) => self . process_method_call ( ex, args) ,
1072
1051
ast:: ExprField ( ref sub_ex, _) => {
1073
- if generated_code ( sub_ex. span ) {
1074
- return
1075
- }
1076
-
1077
1052
self . visit_expr ( & sub_ex) ;
1078
1053
1079
1054
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> {
1086
1061
}
1087
1062
}
1088
1063
ast:: ExprTupField ( ref sub_ex, idx) => {
1089
- if generated_code ( sub_ex. span ) {
1090
- return
1091
- }
1092
-
1093
1064
self . visit_expr ( & * * sub_ex) ;
1094
1065
1095
1066
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> {
1110
1081
}
1111
1082
}
1112
1083
ast:: ExprClosure ( _, ref decl, ref body) => {
1113
- if generated_code ( body. span ) {
1114
- return
1115
- }
1116
-
1117
1084
let mut id = String :: from ( "$" ) ;
1118
1085
id. push_str ( & ex. id . to_string ( ) ) ;
1119
1086
self . process_formals ( & decl. inputs , & id) ;
@@ -1210,18 +1177,10 @@ impl<'l, 'tcx, 'v> Visitor<'v> for DumpCsvVisitor<'l, 'tcx> {
1210
1177
}
1211
1178
1212
1179
fn visit_stmt ( & mut self , s : & ast:: Stmt ) {
1213
- if generated_code ( s. span ) {
1214
- return
1215
- }
1216
-
1217
1180
visit:: walk_stmt ( self , s)
1218
1181
}
1219
1182
1220
1183
fn visit_local ( & mut self , l : & ast:: Local ) {
1221
- if generated_code ( l. span ) {
1222
- return
1223
- }
1224
-
1225
1184
let value = self . span . snippet ( l. span ) ;
1226
1185
self . process_var_decl ( & l. pat , value) ;
1227
1186
0 commit comments