@@ -1560,14 +1560,23 @@ impl<'tcx> Clean<Constant> for ty::Const<'tcx> {
15601560
15611561impl Clean < Item > for hir:: FieldDef < ' _ > {
15621562 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,
15651566 Some ( self . ident . name ) ,
15661567 StructFieldItem ( self . ty . clean ( cx) ) ,
15671568 cx,
15681569 ) ;
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+ }
15711580 }
15721581}
15731582
@@ -1584,24 +1593,6 @@ impl Clean<Item> for ty::FieldDef {
15841593 }
15851594}
15861595
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-
16051596impl Clean < Visibility > for ty:: Visibility {
16061597 fn clean ( & self , _cx : & mut DocContext < ' _ > ) -> Visibility {
16071598 match * self {
@@ -1793,9 +1784,9 @@ impl Clean<Vec<Item>> for (&hir::Item<'_>, Option<Symbol>) {
17931784 clean_fn_or_proc_macro ( item, sig, generics, body_id, & mut name, cx)
17941785 }
17951786 ItemKind :: Macro ( ref macro_def) => {
1796- let vis = item . vis . clean ( cx) ;
1787+ let ty_vis = cx . tcx . visibility ( def_id ) . clean ( cx) ;
17971788 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 ) ,
17991790 } )
18001791 }
18011792 ItemKind :: Trait ( is_auto, unsafety, ref generics, bounds, item_ids) => {
@@ -1884,7 +1875,8 @@ fn clean_extern_crate(
18841875 // this is the ID of the crate itself
18851876 let crate_def_id = DefId { krate : cnum, index : CRATE_DEF_INDEX } ;
18861877 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 ( )
18881880 && attrs. iter ( ) . any ( |a| {
18891881 a. has_name ( sym:: doc)
18901882 && match a. meta_item_list ( ) {
@@ -1916,7 +1908,7 @@ fn clean_extern_crate(
19161908 name: Some ( name) ,
19171909 attrs: box attrs. clean( cx) ,
19181910 def_id: crate_def_id. into( ) ,
1919- visibility: krate . vis . clean( cx) ,
1911+ visibility: ty_vis . clean( cx) ,
19201912 kind: box ExternCrateItem { src: orig_name } ,
19211913 cfg: attrs. cfg( cx. tcx, & cx. cache. hidden_cfg) ,
19221914 } ]
0 commit comments