@@ -42,7 +42,7 @@ use syntax::codemap::Spanned;
42
42
use syntax_pos:: * ;
43
43
44
44
use { escape, generated_code, lower_attributes, PathCollector , SaveContext } ;
45
- use json_dumper:: { DumpOutput , JsonDumper } ;
45
+ use json_dumper:: { Access , DumpOutput , JsonDumper } ;
46
46
use span_utils:: SpanUtils ;
47
47
use sig;
48
48
@@ -341,7 +341,10 @@ impl<'l, 'tcx: 'l, 'll, O: DumpOutput + 'll> DumpVisitor<'l, 'tcx, 'll, O> {
341
341
let span = self . span_from_span ( sub_span. expect ( "No span found for variable" ) ) ;
342
342
343
343
self . dumper . dump_def (
344
- false ,
344
+ & Access {
345
+ public : false ,
346
+ reachable : false ,
347
+ } ,
345
348
Def {
346
349
kind : DefKind :: Local ,
347
350
id,
@@ -387,8 +390,12 @@ impl<'l, 'tcx: 'l, 'll, O: DumpOutput + 'll> DumpVisitor<'l, 'tcx, 'll, O> {
387
390
388
391
method_data. value = sig_str;
389
392
method_data. sig = sig:: method_signature ( id, name, generics, sig, & self . save_ctxt ) ;
390
- self . dumper
391
- . dump_def ( vis == ast:: Visibility :: Public , method_data) ;
393
+ self . dumper . dump_def (
394
+ & Access {
395
+ public : vis == ast:: Visibility :: Public ,
396
+ reachable : self . save_ctxt . analysis . access_levels . is_reachable ( id) ,
397
+ } ,
398
+ method_data) ;
392
399
}
393
400
394
401
// walk arg and return types
@@ -409,8 +416,13 @@ impl<'l, 'tcx: 'l, 'll, O: DumpOutput + 'll> DumpVisitor<'l, 'tcx, 'll, O> {
409
416
fn process_struct_field_def ( & mut self , field : & ast:: StructField , parent_id : NodeId ) {
410
417
let field_data = self . save_ctxt . get_field_data ( field, parent_id) ;
411
418
if let Some ( field_data) = field_data {
412
- self . dumper
413
- . dump_def ( field. vis == ast:: Visibility :: Public , field_data) ;
419
+ self . dumper . dump_def (
420
+ & Access {
421
+ public : field. vis == ast:: Visibility :: Public ,
422
+ reachable : self . save_ctxt . analysis . access_levels . is_reachable ( field. id ) ,
423
+ } ,
424
+ field_data,
425
+ ) ;
414
426
}
415
427
}
416
428
@@ -432,7 +444,10 @@ impl<'l, 'tcx: 'l, 'll, O: DumpOutput + 'll> DumpVisitor<'l, 'tcx, 'll, O> {
432
444
let span = self . span_from_span ( param_ss) ;
433
445
434
446
self . dumper . dump_def (
435
- false ,
447
+ & Access {
448
+ public : false ,
449
+ reachable : false ,
450
+ } ,
436
451
Def {
437
452
kind : DefKind :: Type ,
438
453
id,
@@ -467,8 +482,13 @@ impl<'l, 'tcx: 'l, 'll, O: DumpOutput + 'll> DumpVisitor<'l, 'tcx, 'll, O> {
467
482
|v| v. process_formals ( & decl. inputs , & fn_data. qualname ) ,
468
483
) ;
469
484
self . process_generic_params ( ty_params, item. span , & fn_data. qualname , item. id ) ;
470
- self . dumper
471
- . dump_def ( item. vis == ast:: Visibility :: Public , fn_data) ;
485
+ self . dumper . dump_def (
486
+ & Access {
487
+ public : item. vis == ast:: Visibility :: Public ,
488
+ reachable : self . save_ctxt . analysis . access_levels . is_reachable ( item. id ) ,
489
+ } ,
490
+ fn_data,
491
+ ) ;
472
492
}
473
493
474
494
for arg in & decl. inputs {
@@ -491,8 +511,13 @@ impl<'l, 'tcx: 'l, 'll, O: DumpOutput + 'll> DumpVisitor<'l, 'tcx, 'll, O> {
491
511
self . nest_tables ( item. id , |v| {
492
512
if let Some ( var_data) = v. save_ctxt . get_item_data ( item) {
493
513
down_cast_data ! ( var_data, DefData , item. span) ;
494
- v. dumper
495
- . dump_def ( item. vis == ast:: Visibility :: Public , var_data) ;
514
+ v. dumper . dump_def (
515
+ & Access {
516
+ public : item. vis == ast:: Visibility :: Public ,
517
+ reachable : v. save_ctxt . analysis . access_levels . is_reachable ( item. id ) ,
518
+ } ,
519
+ var_data,
520
+ ) ;
496
521
}
497
522
v. visit_ty ( & typ) ;
498
523
v. visit_expr ( expr) ;
@@ -516,14 +541,16 @@ impl<'l, 'tcx: 'l, 'll, O: DumpOutput + 'll> DumpVisitor<'l, 'tcx, 'll, O> {
516
541
517
542
if !self . span . filter_generated ( sub_span, span) {
518
543
let sig = sig:: assoc_const_signature ( id, name, typ, expr, & self . save_ctxt ) ;
519
- let id = :: id_from_node_id ( id, & self . save_ctxt ) ;
520
544
let span = self . span_from_span ( sub_span. expect ( "No span found for variable" ) ) ;
521
545
522
546
self . dumper . dump_def (
523
- vis == ast:: Visibility :: Public ,
547
+ & Access {
548
+ public : vis == ast:: Visibility :: Public ,
549
+ reachable : self . save_ctxt . analysis . access_levels . is_reachable ( id) ,
550
+ } ,
524
551
Def {
525
552
kind : DefKind :: Const ,
526
- id,
553
+ id : :: id_from_node_id ( id , & self . save_ctxt ) ,
527
554
span,
528
555
name : name. to_string ( ) ,
529
556
qualname,
@@ -596,7 +623,10 @@ impl<'l, 'tcx: 'l, 'll, O: DumpOutput + 'll> DumpVisitor<'l, 'tcx, 'll, O> {
596
623
if !self . span . filter_generated ( sub_span, item. span ) {
597
624
let span = self . span_from_span ( sub_span. expect ( "No span found for struct" ) ) ;
598
625
self . dumper . dump_def (
599
- item. vis == ast:: Visibility :: Public ,
626
+ & Access {
627
+ public : item. vis == ast:: Visibility :: Public ,
628
+ reachable : self . save_ctxt . analysis . access_levels . is_reachable ( item. id ) ,
629
+ } ,
600
630
Def {
601
631
kind,
602
632
id : :: id_from_node_id ( item. id , & self . save_ctxt ) ,
@@ -635,6 +665,11 @@ impl<'l, 'tcx: 'l, 'll, O: DumpOutput + 'll> DumpVisitor<'l, 'tcx, 'll, O> {
635
665
} ;
636
666
down_cast_data ! ( enum_data, DefData , item. span) ;
637
667
668
+ let access = Access {
669
+ public : item. vis == ast:: Visibility :: Public ,
670
+ reachable : self . save_ctxt . analysis . access_levels . is_reachable ( item. id ) ,
671
+ } ;
672
+
638
673
for variant in & enum_definition. variants {
639
674
let name = variant. node . name . name . to_string ( ) ;
640
675
let mut qualname = enum_data. qualname . clone ( ) ;
@@ -660,7 +695,7 @@ impl<'l, 'tcx: 'l, 'll, O: DumpOutput + 'll> DumpVisitor<'l, 'tcx, 'll, O> {
660
695
let parent = Some ( :: id_from_node_id ( item. id , & self . save_ctxt ) ) ;
661
696
662
697
self . dumper . dump_def (
663
- item . vis == ast :: Visibility :: Public ,
698
+ & access ,
664
699
Def {
665
700
kind : DefKind :: StructVariant ,
666
701
id,
@@ -700,7 +735,7 @@ impl<'l, 'tcx: 'l, 'll, O: DumpOutput + 'll> DumpVisitor<'l, 'tcx, 'll, O> {
700
735
let parent = Some ( :: id_from_node_id ( item. id , & self . save_ctxt ) ) ;
701
736
702
737
self . dumper . dump_def (
703
- item . vis == ast :: Visibility :: Public ,
738
+ & access ,
704
739
Def {
705
740
kind : DefKind :: TupleVariant ,
706
741
id,
@@ -730,8 +765,7 @@ impl<'l, 'tcx: 'l, 'll, O: DumpOutput + 'll> DumpVisitor<'l, 'tcx, 'll, O> {
730
765
}
731
766
}
732
767
self . process_generic_params ( ty_params, item. span , & enum_data. qualname , item. id ) ;
733
- self . dumper
734
- . dump_def ( item. vis == ast:: Visibility :: Public , enum_data) ;
768
+ self . dumper . dump_def ( & access, enum_data) ;
735
769
}
736
770
737
771
fn process_impl (
@@ -783,7 +817,10 @@ impl<'l, 'tcx: 'l, 'll, O: DumpOutput + 'll> DumpVisitor<'l, 'tcx, 'll, O> {
783
817
. map ( |i| :: id_from_node_id ( i. id , & self . save_ctxt ) )
784
818
. collect ( ) ;
785
819
self . dumper . dump_def (
786
- item. vis == ast:: Visibility :: Public ,
820
+ & Access {
821
+ public : item. vis == ast:: Visibility :: Public ,
822
+ reachable : self . save_ctxt . analysis . access_levels . is_reachable ( item. id ) ,
823
+ } ,
787
824
Def {
788
825
kind : DefKind :: Trait ,
789
826
id,
@@ -846,8 +883,13 @@ impl<'l, 'tcx: 'l, 'll, O: DumpOutput + 'll> DumpVisitor<'l, 'tcx, 'll, O> {
846
883
fn process_mod ( & mut self , item : & ast:: Item ) {
847
884
if let Some ( mod_data) = self . save_ctxt . get_item_data ( item) {
848
885
down_cast_data ! ( mod_data, DefData , item. span) ;
849
- self . dumper
850
- . dump_def ( item. vis == ast:: Visibility :: Public , mod_data) ;
886
+ self . dumper . dump_def (
887
+ & Access {
888
+ public : item. vis == ast:: Visibility :: Public ,
889
+ reachable : self . save_ctxt . analysis . access_levels . is_reachable ( item. id ) ,
890
+ } ,
891
+ mod_data,
892
+ ) ;
851
893
}
852
894
}
853
895
@@ -1038,7 +1080,10 @@ impl<'l, 'tcx: 'l, 'll, O: DumpOutput + 'll> DumpVisitor<'l, 'tcx, 'll, O> {
1038
1080
let span = self . span_from_span ( sub_span. expect ( "No span found for variable" ) ) ;
1039
1081
1040
1082
self . dumper . dump_def (
1041
- false ,
1083
+ & Access {
1084
+ public : false ,
1085
+ reachable : false ,
1086
+ } ,
1042
1087
Def {
1043
1088
kind : DefKind :: Local ,
1044
1089
id,
@@ -1138,7 +1183,10 @@ impl<'l, 'tcx: 'l, 'll, O: DumpOutput + 'll> DumpVisitor<'l, 'tcx, 'll, O> {
1138
1183
let id = :: id_from_node_id ( trait_item. id , & self . save_ctxt ) ;
1139
1184
1140
1185
self . dumper . dump_def (
1141
- true ,
1186
+ & Access {
1187
+ public : true ,
1188
+ reachable : true ,
1189
+ } ,
1142
1190
Def {
1143
1191
kind : DefKind :: Type ,
1144
1192
id,
@@ -1225,7 +1273,10 @@ impl<'l, 'tcx: 'l, 'll, O: DumpOutput + 'll> Visitor<'l> for DumpVisitor<'l, 'tc
1225
1273
let span = self . span_from_span ( span) ;
1226
1274
1227
1275
self . dumper . dump_def (
1228
- true ,
1276
+ & Access {
1277
+ public : true ,
1278
+ reachable : true ,
1279
+ } ,
1229
1280
Def {
1230
1281
kind : DefKind :: Mod ,
1231
1282
id : data_id,
@@ -1249,6 +1300,11 @@ impl<'l, 'tcx: 'l, 'll, O: DumpOutput + 'll> Visitor<'l> for DumpVisitor<'l, 'tc
1249
1300
self . process_macro_use ( item. span ) ;
1250
1301
match item. node {
1251
1302
Use ( ref use_item) => {
1303
+ let access = Access {
1304
+ public : item. vis == ast:: Visibility :: Public ,
1305
+ reachable : self . save_ctxt . analysis . access_levels . is_reachable ( item. id ) ,
1306
+ } ;
1307
+
1252
1308
match use_item. node {
1253
1309
ast:: ViewPathSimple ( ident, ref path) => {
1254
1310
let sub_span = self . span . span_for_last_ident ( path. span ) ;
@@ -1273,7 +1329,7 @@ impl<'l, 'tcx: 'l, 'll, O: DumpOutput + 'll> Visitor<'l> for DumpVisitor<'l, 'tc
1273
1329
let span =
1274
1330
self . span_from_span ( sub_span. expect ( "No span found for use" ) ) ;
1275
1331
self . dumper . import (
1276
- item . vis == ast :: Visibility :: Public ,
1332
+ & access ,
1277
1333
Import {
1278
1334
kind : ImportKind :: Use ,
1279
1335
ref_id : mod_id. map ( |id| :: id_from_def_id ( id) ) ,
@@ -1302,7 +1358,7 @@ impl<'l, 'tcx: 'l, 'll, O: DumpOutput + 'll> Visitor<'l> for DumpVisitor<'l, 'tc
1302
1358
let span =
1303
1359
self . span_from_span ( sub_span. expect ( "No span found for use glob" ) ) ;
1304
1360
self . dumper . import (
1305
- item . vis == ast :: Visibility :: Public ,
1361
+ & access ,
1306
1362
Import {
1307
1363
kind : ImportKind :: GlobUse ,
1308
1364
ref_id : None ,
@@ -1334,7 +1390,10 @@ impl<'l, 'tcx: 'l, 'll, O: DumpOutput + 'll> Visitor<'l> for DumpVisitor<'l, 'tc
1334
1390
let span =
1335
1391
self . span_from_span ( alias_span. expect ( "No span found for extern crate" ) ) ;
1336
1392
self . dumper . import (
1337
- false ,
1393
+ & Access {
1394
+ public : false ,
1395
+ reachable : false ,
1396
+ } ,
1338
1397
Import {
1339
1398
kind : ImportKind :: ExternCrate ,
1340
1399
ref_id : None ,
@@ -1373,7 +1432,10 @@ impl<'l, 'tcx: 'l, 'll, O: DumpOutput + 'll> Visitor<'l> for DumpVisitor<'l, 'tc
1373
1432
let id = :: id_from_node_id ( item. id , & self . save_ctxt ) ;
1374
1433
1375
1434
self . dumper . dump_def (
1376
- item. vis == ast:: Visibility :: Public ,
1435
+ & Access {
1436
+ public : item. vis == ast:: Visibility :: Public ,
1437
+ reachable : self . save_ctxt . analysis . access_levels . is_reachable ( item. id ) ,
1438
+ } ,
1377
1439
Def {
1378
1440
kind : DefKind :: Type ,
1379
1441
id,
@@ -1596,7 +1658,10 @@ impl<'l, 'tcx: 'l, 'll, O: DumpOutput + 'll> Visitor<'l> for DumpVisitor<'l, 'tc
1596
1658
let span = self . span_from_span ( sp) ;
1597
1659
1598
1660
self . dumper . dump_def (
1599
- false ,
1661
+ & Access {
1662
+ public : false ,
1663
+ reachable : false ,
1664
+ } ,
1600
1665
Def {
1601
1666
kind : DefKind :: Local ,
1602
1667
id,
@@ -1662,6 +1727,11 @@ impl<'l, 'tcx: 'l, 'll, O: DumpOutput + 'll> Visitor<'l> for DumpVisitor<'l, 'tc
1662
1727
}
1663
1728
1664
1729
fn visit_foreign_item ( & mut self , item : & ' l ast:: ForeignItem ) {
1730
+ let access = Access {
1731
+ public : item. vis == ast:: Visibility :: Public ,
1732
+ reachable : self . save_ctxt . analysis . access_levels . is_reachable ( item. id ) ,
1733
+ } ;
1734
+
1665
1735
match item. node {
1666
1736
ast:: ForeignItemKind :: Fn ( ref decl, ref generics) => {
1667
1737
if let Some ( fn_data) = self . save_ctxt . get_extern_item_data ( item) {
@@ -1672,8 +1742,7 @@ impl<'l, 'tcx: 'l, 'll, O: DumpOutput + 'll> Visitor<'l> for DumpVisitor<'l, 'tc
1672
1742
|v| v. process_formals ( & decl. inputs , & fn_data. qualname ) ,
1673
1743
) ;
1674
1744
self . process_generic_params ( generics, item. span , & fn_data. qualname , item. id ) ;
1675
- self . dumper
1676
- . dump_def ( item. vis == ast:: Visibility :: Public , fn_data) ;
1745
+ self . dumper . dump_def ( & access, fn_data) ;
1677
1746
}
1678
1747
1679
1748
for arg in & decl. inputs {
@@ -1687,17 +1756,15 @@ impl<'l, 'tcx: 'l, 'll, O: DumpOutput + 'll> Visitor<'l> for DumpVisitor<'l, 'tc
1687
1756
ast:: ForeignItemKind :: Static ( ref ty, _) => {
1688
1757
if let Some ( var_data) = self . save_ctxt . get_extern_item_data ( item) {
1689
1758
down_cast_data ! ( var_data, DefData , item. span) ;
1690
- self . dumper
1691
- . dump_def ( item. vis == ast:: Visibility :: Public , var_data) ;
1759
+ self . dumper . dump_def ( & access, var_data) ;
1692
1760
}
1693
1761
1694
1762
self . visit_ty ( ty) ;
1695
1763
}
1696
1764
ast:: ForeignItemKind :: Ty => {
1697
1765
if let Some ( var_data) = self . save_ctxt . get_extern_item_data ( item) {
1698
1766
down_cast_data ! ( var_data, DefData , item. span) ;
1699
- self . dumper
1700
- . dump_def ( item. vis == ast:: Visibility :: Public , var_data) ;
1767
+ self . dumper . dump_def ( & access, var_data) ;
1701
1768
}
1702
1769
}
1703
1770
}
0 commit comments