@@ -1812,32 +1812,25 @@ fn is_field_vis_inherited(tcx: TyCtxt<'_>, def_id: DefId) -> bool {
18121812 }
18131813}
18141814
1815- impl<'tcx> Clean<'tcx, Visibility> for ty::Visibility {
1816- fn clean(&self, _cx: &mut DocContext<'_>) -> Visibility {
1817- match *self {
1818- ty::Visibility::Public => Visibility::Public,
1819- // NOTE: this is not quite right: `ty` uses `Invisible` to mean 'private',
1820- // while rustdoc really does mean inherited. That means that for enum variants, such as
1821- // `pub enum E { V }`, `V` will be marked as `Public` by `ty`, but as `Inherited` by rustdoc.
1822- // Various parts of clean override `tcx.visibility` explicitly to make sure this distinction is captured.
1823- ty::Visibility::Invisible => Visibility::Inherited,
1824- ty::Visibility::Restricted(module) => Visibility::Restricted(module),
1825- }
1826- }
1827- }
1828-
1829- impl<'tcx> Clean<'tcx, VariantStruct> for rustc_hir::VariantData<'tcx> {
1830- fn clean(&self, cx: &mut DocContext<'tcx>) -> VariantStruct {
1831- VariantStruct {
1832- struct_type: CtorKind::from_hir(self),
1833- fields: self.fields().iter().map(|x| clean_field(x, cx)).collect(),
1834- }
1815+ pub(crate) fn clean_visibility(vis: ty::Visibility) -> Visibility {
1816+ match vis {
1817+ ty::Visibility::Public => Visibility::Public,
1818+ // NOTE: this is not quite right: `ty` uses `Invisible` to mean 'private',
1819+ // while rustdoc really does mean inherited. That means that for enum variants, such as
1820+ // `pub enum E { V }`, `V` will be marked as `Public` by `ty`, but as `Inherited` by rustdoc.
1821+ // Various parts of clean override `tcx.visibility` explicitly to make sure this distinction is captured.
1822+ ty::Visibility::Invisible => Visibility::Inherited,
1823+ ty::Visibility::Restricted(module) => Visibility::Restricted(module),
18351824 }
18361825}
18371826
1838- impl<'tcx> Clean<'tcx, Vec<Item>> for hir::VariantData<'tcx> {
1839- fn clean(&self, cx: &mut DocContext<'tcx>) -> Vec<Item> {
1840- self.fields().iter().map(|x| clean_field(x, cx)).collect()
1827+ fn clean_variant_data<'tcx>(
1828+ variant: &hir::VariantData<'tcx>,
1829+ cx: &mut DocContext<'tcx>,
1830+ ) -> VariantStruct {
1831+ VariantStruct {
1832+ struct_type: CtorKind::from_hir(variant),
1833+ fields: variant.fields().iter().map(|x| clean_field(x, cx)).collect(),
18411834 }
18421835}
18431836
@@ -1863,8 +1856,10 @@ impl<'tcx> Clean<'tcx, Item> for ty::VariantDef {
18631856impl<'tcx> Clean<'tcx, Variant> for hir::VariantData<'tcx> {
18641857 fn clean(&self, cx: &mut DocContext<'tcx>) -> Variant {
18651858 match self {
1866- hir::VariantData::Struct(..) => Variant::Struct(self.clean(cx)),
1867- hir::VariantData::Tuple(..) => Variant::Tuple(self.clean(cx)),
1859+ hir::VariantData::Struct(..) => Variant::Struct(clean_variant_data(self, cx)),
1860+ hir::VariantData::Tuple(..) => {
1861+ Variant::Tuple(self.fields().iter().map(|x| clean_field(x, cx)).collect())
1862+ }
18681863 hir::VariantData::Unit(..) => Variant::CLike,
18691864 }
18701865 }
@@ -1983,7 +1978,7 @@ fn clean_maybe_renamed_item<'tcx>(
19831978 clean_fn_or_proc_macro(item, sig, generics, body_id, &mut name, cx)
19841979 }
19851980 ItemKind::Macro(ref macro_def, _) => {
1986- let ty_vis = cx.tcx.visibility(def_id).clean(cx );
1981+ let ty_vis = clean_visibility( cx.tcx.visibility(def_id));
19871982 MacroItem(Macro {
19881983 source: display_macro_source(cx, name, macro_def, def_id, ty_vis),
19891984 })
@@ -2112,7 +2107,7 @@ fn clean_extern_crate<'tcx>(
21122107 name: Some(name),
21132108 attrs: Box::new(attrs.clean(cx)),
21142109 item_id: crate_def_id.into(),
2115- visibility: ty_vis.clean(cx ),
2110+ visibility: clean_visibility(ty_vis ),
21162111 kind: box ExternCrateItem { src: orig_name },
21172112 cfg: attrs.cfg(cx.tcx, &cx.cache.hidden_cfg),
21182113 }]
0 commit comments