Skip to content

Commit 94ae60a

Browse files
committed
rustdoc: Remove Clean impl for hir::Visibility
This should be the last bit of the transition to computed visibility, rather than syntactic visibility.
1 parent 7a7698a commit 94ae60a

File tree

1 file changed

+18
-26
lines changed

1 file changed

+18
-26
lines changed

Diff for: src/librustdoc/clean/mod.rs

+18-26
Original file line numberDiff line numberDiff line change
@@ -1560,14 +1560,23 @@ impl<'tcx> Clean<Constant> for ty::Const<'tcx> {
15601560

15611561
impl 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-
16051596
impl 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

Comments
 (0)