@@ -1560,14 +1560,23 @@ impl<'tcx> Clean<Constant> for ty::Const<'tcx> {
1560
1560
1561
1561
impl Clean < Item > for hir:: FieldDef < ' _ > {
1562
1562
fn clean ( & self , cx : & mut DocContext < ' _ > ) -> Item {
1563
- let what_rustc_thinks = Item :: from_hir_id_and_parts (
1564
- self . hir_id ,
1563
+ let def_id = cx. tcx . hir ( ) . local_def_id ( self . hir_id ) . to_def_id ( ) ;
1564
+ let what_rustc_thinks = Item :: from_def_id_and_parts (
1565
+ def_id,
1565
1566
Some ( self . ident . name ) ,
1566
1567
StructFieldItem ( self . ty . clean ( cx) ) ,
1567
1568
cx,
1568
1569
) ;
1569
- // Don't show `pub` for fields on enum variants; they are always public
1570
- Item { visibility : self . vis . clean ( cx) , ..what_rustc_thinks }
1570
+ let parent = cx. tcx . parent ( def_id) . unwrap ( ) ;
1571
+ match cx. tcx . def_kind ( parent) {
1572
+ DefKind :: Struct | DefKind :: Union => what_rustc_thinks,
1573
+ DefKind :: Variant => {
1574
+ // Variant fields inherit their enum's visibility.
1575
+ Item { visibility : Visibility :: Inherited , ..what_rustc_thinks }
1576
+ }
1577
+ // FIXME: what about DefKind::Ctor?
1578
+ parent_kind => panic ! ( "unexpected parent kind: {:?}" , parent_kind) ,
1579
+ }
1571
1580
}
1572
1581
}
1573
1582
@@ -1584,24 +1593,6 @@ impl Clean<Item> for ty::FieldDef {
1584
1593
}
1585
1594
}
1586
1595
1587
- impl Clean < Visibility > for hir:: Visibility < ' _ > {
1588
- fn clean ( & self , cx : & mut DocContext < ' _ > ) -> Visibility {
1589
- match self . node {
1590
- hir:: VisibilityKind :: Public => Visibility :: Public ,
1591
- hir:: VisibilityKind :: Inherited => Visibility :: Inherited ,
1592
- hir:: VisibilityKind :: Crate ( _) => {
1593
- let krate = DefId :: local ( CRATE_DEF_INDEX ) ;
1594
- Visibility :: Restricted ( krate)
1595
- }
1596
- hir:: VisibilityKind :: Restricted { ref path, .. } => {
1597
- let path = path. clean ( cx) ;
1598
- let did = register_res ( cx, path. res ) ;
1599
- Visibility :: Restricted ( did)
1600
- }
1601
- }
1602
- }
1603
- }
1604
-
1605
1596
impl Clean < Visibility > for ty:: Visibility {
1606
1597
fn clean ( & self , _cx : & mut DocContext < ' _ > ) -> Visibility {
1607
1598
match * self {
@@ -1793,9 +1784,9 @@ impl Clean<Vec<Item>> for (&hir::Item<'_>, Option<Symbol>) {
1793
1784
clean_fn_or_proc_macro ( item, sig, generics, body_id, & mut name, cx)
1794
1785
}
1795
1786
ItemKind :: Macro ( ref macro_def) => {
1796
- let vis = item . vis . clean ( cx) ;
1787
+ let ty_vis = cx . tcx . visibility ( def_id ) . clean ( cx) ;
1797
1788
MacroItem ( Macro {
1798
- source : display_macro_source ( cx, name, macro_def, def_id, vis ) ,
1789
+ source : display_macro_source ( cx, name, macro_def, def_id, ty_vis ) ,
1799
1790
} )
1800
1791
}
1801
1792
ItemKind :: Trait ( is_auto, unsafety, ref generics, bounds, item_ids) => {
@@ -1884,7 +1875,8 @@ fn clean_extern_crate(
1884
1875
// this is the ID of the crate itself
1885
1876
let crate_def_id = DefId { krate : cnum, index : CRATE_DEF_INDEX } ;
1886
1877
let attrs = cx. tcx . hir ( ) . attrs ( krate. hir_id ( ) ) ;
1887
- let please_inline = cx. tcx . visibility ( krate. def_id ) . is_public ( )
1878
+ let ty_vis = cx. tcx . visibility ( krate. def_id ) ;
1879
+ let please_inline = ty_vis. is_public ( )
1888
1880
&& attrs. iter ( ) . any ( |a| {
1889
1881
a. has_name ( sym:: doc)
1890
1882
&& match a. meta_item_list ( ) {
@@ -1916,7 +1908,7 @@ fn clean_extern_crate(
1916
1908
name: Some ( name) ,
1917
1909
attrs: box attrs. clean( cx) ,
1918
1910
def_id: crate_def_id. into( ) ,
1919
- visibility: krate . vis . clean( cx) ,
1911
+ visibility: ty_vis . clean( cx) ,
1920
1912
kind: box ExternCrateItem { src: orig_name } ,
1921
1913
cfg: attrs. cfg( cx. tcx, & cx. cache. hidden_cfg) ,
1922
1914
} ]
0 commit comments