@@ -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 ) ,
@@ -533,36 +536,36 @@ impl <'l, 'tcx> DumpCsvVisitor<'l, 'tcx> {
533
536
trait_ref : & Option < ast:: TraitRef > ,
534
537
typ : & ast:: Ty ,
535
538
impl_items : & [ P < ast:: ImplItem > ] ) {
536
- let impl_data = self . save_ctxt . get_item_data ( item) ;
537
- down_cast_data ! ( impl_data, ImplData , self , item. span) ;
538
- match impl_data. self_ref {
539
- Some ( ref self_ref) => {
539
+ let mut has_self_ref = false ;
540
+ if let Some ( impl_data) = self . save_ctxt . get_item_data ( item) {
541
+ down_cast_data ! ( impl_data, ImplData , self , item. span) ;
542
+ if let Some ( ref self_ref) = impl_data. self_ref {
543
+ has_self_ref = true ;
540
544
self . fmt . ref_str ( recorder:: TypeRef ,
541
545
item. span ,
542
546
Some ( self_ref. span ) ,
543
547
self_ref. ref_id ,
544
548
self_ref. scope ) ;
545
549
}
546
- None => {
547
- self . visit_ty ( & typ) ;
550
+ if let Some ( ref trait_ref_data) = impl_data. trait_ref {
551
+ self . fmt . ref_str ( recorder:: TypeRef ,
552
+ item. span ,
553
+ Some ( trait_ref_data. span ) ,
554
+ trait_ref_data. ref_id ,
555
+ trait_ref_data. scope ) ;
556
+ visit:: walk_path ( self , & trait_ref. as_ref ( ) . unwrap ( ) . path ) ;
548
557
}
558
+
559
+ self . fmt . impl_str ( item. span ,
560
+ Some ( impl_data. span ) ,
561
+ impl_data. id ,
562
+ impl_data. self_ref . map ( |data| data. ref_id ) ,
563
+ impl_data. trait_ref . map ( |data| data. ref_id ) ,
564
+ impl_data. scope ) ;
549
565
}
550
- if let Some ( ref trait_ref_data) = impl_data. trait_ref {
551
- self . fmt . ref_str ( recorder:: TypeRef ,
552
- item. span ,
553
- Some ( trait_ref_data. span ) ,
554
- trait_ref_data. ref_id ,
555
- trait_ref_data. scope ) ;
556
- visit:: walk_path ( self , & trait_ref. as_ref ( ) . unwrap ( ) . path ) ;
566
+ if !has_self_ref {
567
+ self . visit_ty ( & typ) ;
557
568
}
558
-
559
- self . fmt . impl_str ( item. span ,
560
- Some ( impl_data. span ) ,
561
- impl_data. id ,
562
- impl_data. self_ref . map ( |data| data. ref_id ) ,
563
- impl_data. trait_ref . map ( |data| data. ref_id ) ,
564
- impl_data. scope ) ;
565
-
566
569
self . process_generic_params ( type_parameters, item. span , "" , item. id ) ;
567
570
for impl_item in impl_items {
568
571
self . visit_impl_item ( impl_item) ;
@@ -619,22 +622,23 @@ impl <'l, 'tcx> DumpCsvVisitor<'l, 'tcx> {
619
622
620
623
// `item` is the module in question, represented as an item.
621
624
fn process_mod ( & mut self , item : & ast:: Item ) {
622
- let mod_data = self . save_ctxt . get_item_data ( item) ;
623
- down_cast_data ! ( mod_data, ModData , self , item. span) ;
624
- self . fmt . mod_str ( item. span ,
625
- Some ( mod_data. span ) ,
626
- mod_data. id ,
627
- & mod_data. qualname ,
628
- mod_data. scope ,
629
- & mod_data. filename ) ;
625
+ if let Some ( mod_data) = self . save_ctxt . get_item_data ( item) {
626
+ down_cast_data ! ( mod_data, ModData , self , item. span) ;
627
+ self . fmt . mod_str ( item. span ,
628
+ Some ( mod_data. span ) ,
629
+ mod_data. id ,
630
+ & mod_data. qualname ,
631
+ mod_data. scope ,
632
+ & mod_data. filename ) ;
633
+ }
630
634
}
631
635
632
636
fn process_path ( & mut self , id : NodeId , path : & ast:: Path , ref_kind : Option < recorder:: Row > ) {
633
- if generated_code ( path. span ) {
637
+ let path_data = self . save_ctxt . get_path_data ( id, path) ;
638
+ if generated_code ( path. span ) && path_data. is_none ( ) {
634
639
return ;
635
640
}
636
641
637
- let path_data = self . save_ctxt . get_path_data ( id, path) ;
638
642
let path_data = match path_data {
639
643
Some ( pd) => pd,
640
644
None => {
@@ -705,10 +709,6 @@ impl <'l, 'tcx> DumpCsvVisitor<'l, 'tcx> {
705
709
fields : & Vec < ast:: Field > ,
706
710
variant : ty:: VariantDef ,
707
711
base : & Option < P < ast:: Expr > > ) {
708
- if generated_code ( path. span ) {
709
- return
710
- }
711
-
712
712
self . write_sub_paths_truncated ( path, false ) ;
713
713
714
714
if let Some ( struct_lit_data) = self . save_ctxt . get_expr_data ( ex) {
@@ -721,16 +721,15 @@ impl <'l, 'tcx> DumpCsvVisitor<'l, 'tcx> {
721
721
let scope = self . save_ctxt . enclosing_scope ( ex. id ) ;
722
722
723
723
for field in fields {
724
- if generated_code ( field. ident . span ) {
725
- continue ;
726
- }
724
+ if let Some ( field_data) = self . save_ctxt
725
+ . get_field_ref_data ( field, variant, scope) {
727
726
728
- let field_data = self . save_ctxt . get_field_ref_data ( field , variant , scope ) ;
729
- self . fmt . ref_str ( recorder :: VarRef ,
730
- field . ident . span ,
731
- Some ( field_data. span ) ,
732
- field_data. ref_id ,
733
- field_data . scope ) ;
727
+ self . fmt . ref_str ( recorder :: VarRef ,
728
+ field . ident . span ,
729
+ Some ( field_data . span ) ,
730
+ field_data. ref_id ,
731
+ field_data. scope ) ;
732
+ }
734
733
735
734
self . visit_expr ( & field. expr )
736
735
}
@@ -754,10 +753,6 @@ impl <'l, 'tcx> DumpCsvVisitor<'l, 'tcx> {
754
753
}
755
754
756
755
fn process_pat ( & mut self , p : & ast:: Pat ) {
757
- if generated_code ( p. span ) {
758
- return ;
759
- }
760
-
761
756
match p. node {
762
757
ast:: PatStruct ( ref path, ref fields, _) => {
763
758
visit:: walk_path ( self , path) ;
@@ -766,10 +761,6 @@ impl <'l, 'tcx> DumpCsvVisitor<'l, 'tcx> {
766
761
let variant = adt. variant_of_def ( def) ;
767
762
768
763
for & Spanned { node : ref field, span } in fields {
769
- if generated_code ( span) {
770
- continue ;
771
- }
772
-
773
764
let sub_span = self . span . span_for_first_ident ( span) ;
774
765
if let Some ( f) = variant. find_field_named ( field. ident . name ) {
775
766
self . fmt . ref_str ( recorder:: VarRef , span, sub_span, f. did , self . cur_scope ) ;
@@ -813,10 +804,6 @@ impl <'l, 'tcx> DumpCsvVisitor<'l, 'tcx> {
813
804
814
805
impl < ' l , ' tcx , ' v > Visitor < ' v > for DumpCsvVisitor < ' l , ' tcx > {
815
806
fn visit_item ( & mut self , item : & ast:: Item ) {
816
- if generated_code ( item. span ) {
817
- return
818
- }
819
-
820
807
match item. node {
821
808
ast:: ItemUse ( ref use_item) => {
822
809
match use_item. node {
@@ -1011,10 +998,6 @@ impl<'l, 'tcx, 'v> Visitor<'v> for DumpCsvVisitor<'l, 'tcx> {
1011
998
}
1012
999
1013
1000
fn visit_ty ( & mut self , t : & ast:: Ty ) {
1014
- if generated_code ( t. span ) {
1015
- return
1016
- }
1017
-
1018
1001
match t. node {
1019
1002
ast:: TyPath ( _, ref path) => {
1020
1003
match self . lookup_type_ref ( t. id ) {
@@ -1034,10 +1017,6 @@ impl<'l, 'tcx, 'v> Visitor<'v> for DumpCsvVisitor<'l, 'tcx> {
1034
1017
}
1035
1018
1036
1019
fn visit_expr ( & mut self , ex : & ast:: Expr ) {
1037
- if generated_code ( ex. span ) {
1038
- return
1039
- }
1040
-
1041
1020
match ex. node {
1042
1021
ast:: ExprCall ( ref _f, ref _args) => {
1043
1022
// Don't need to do anything for function calls,
@@ -1056,10 +1035,6 @@ impl<'l, 'tcx, 'v> Visitor<'v> for DumpCsvVisitor<'l, 'tcx> {
1056
1035
}
1057
1036
ast:: ExprMethodCall ( _, _, ref args) => self . process_method_call ( ex, args) ,
1058
1037
ast:: ExprField ( ref sub_ex, _) => {
1059
- if generated_code ( sub_ex. span ) {
1060
- return
1061
- }
1062
-
1063
1038
self . visit_expr ( & sub_ex) ;
1064
1039
1065
1040
if let Some ( field_data) = self . save_ctxt . get_expr_data ( ex) {
@@ -1072,10 +1047,6 @@ impl<'l, 'tcx, 'v> Visitor<'v> for DumpCsvVisitor<'l, 'tcx> {
1072
1047
}
1073
1048
}
1074
1049
ast:: ExprTupField ( ref sub_ex, idx) => {
1075
- if generated_code ( sub_ex. span ) {
1076
- return
1077
- }
1078
-
1079
1050
self . visit_expr ( & * * sub_ex) ;
1080
1051
1081
1052
let hir_node = lower_expr ( self . save_ctxt . lcx , sub_ex) ;
@@ -1096,10 +1067,6 @@ impl<'l, 'tcx, 'v> Visitor<'v> for DumpCsvVisitor<'l, 'tcx> {
1096
1067
}
1097
1068
}
1098
1069
ast:: ExprClosure ( _, ref decl, ref body) => {
1099
- if generated_code ( body. span ) {
1100
- return
1101
- }
1102
-
1103
1070
let mut id = String :: from ( "$" ) ;
1104
1071
id. push_str ( & ex. id . to_string ( ) ) ;
1105
1072
self . process_formals ( & decl. inputs , & id) ;
@@ -1196,18 +1163,10 @@ impl<'l, 'tcx, 'v> Visitor<'v> for DumpCsvVisitor<'l, 'tcx> {
1196
1163
}
1197
1164
1198
1165
fn visit_stmt ( & mut self , s : & ast:: Stmt ) {
1199
- if generated_code ( s. span ) {
1200
- return
1201
- }
1202
-
1203
1166
visit:: walk_stmt ( self , s)
1204
1167
}
1205
1168
1206
1169
fn visit_local ( & mut self , l : & ast:: Local ) {
1207
- if generated_code ( l. span ) {
1208
- return
1209
- }
1210
-
1211
1170
let value = self . span . snippet ( l. span ) ;
1212
1171
self . process_var_decl ( & l. pat , value) ;
1213
1172
0 commit comments