Auto merge of #80099 - jyn514:visibility-on-demand, r=GuillaumeGomez
Remove `DefPath` from `Visibility` and calculate it on demand Depends on #80090 and should not be merged before. Helps with https://github.com/rust-lang/rust/issues/79103 and https://github.com/rust-lang/rust/issues/76382. cc https://github.com/rust-lang/rust/pull/80014#issuecomment-746810284 - `@nnethercote` I figured it out! It was simpler than I expected :) This brings the size of `clean::Visibility` down from 40 bytes to 8. Note that this does *not* remove `clean::Visibility`, even though it's now basically the same as `ty::Visibility`, because the `Invsible` variant means something different from `Inherited` and I thought it would be be confusing to merge the two. See the new comments on `impl Clean for ty::Visibility` for details.
This commit is contained in:
commit
28d73a3ee3
5 changed files with 71 additions and 61 deletions
|
@ -2157,14 +2157,14 @@ fn item_module(w: &mut Buffer, cx: &Context<'_>, item: &clean::Item, items: &[cl
|
|||
Some(ref src) => write!(
|
||||
w,
|
||||
"<tr><td><code>{}extern crate {} as {};",
|
||||
myitem.visibility.print_with_space(),
|
||||
myitem.visibility.print_with_space(cx.tcx()),
|
||||
anchor(myitem.def_id, &*src.as_str()),
|
||||
name
|
||||
),
|
||||
None => write!(
|
||||
w,
|
||||
"<tr><td><code>{}extern crate {};",
|
||||
myitem.visibility.print_with_space(),
|
||||
myitem.visibility.print_with_space(cx.tcx()),
|
||||
anchor(myitem.def_id, &*name.as_str())
|
||||
),
|
||||
}
|
||||
|
@ -2175,7 +2175,7 @@ fn item_module(w: &mut Buffer, cx: &Context<'_>, item: &clean::Item, items: &[cl
|
|||
write!(
|
||||
w,
|
||||
"<tr><td><code>{}{}</code></td></tr>",
|
||||
myitem.visibility.print_with_space(),
|
||||
myitem.visibility.print_with_space(cx.tcx()),
|
||||
import.print()
|
||||
);
|
||||
}
|
||||
|
@ -2392,7 +2392,7 @@ fn item_constant(w: &mut Buffer, cx: &Context<'_>, it: &clean::Item, c: &clean::
|
|||
write!(
|
||||
w,
|
||||
"{vis}const {name}: {typ}",
|
||||
vis = it.visibility.print_with_space(),
|
||||
vis = it.visibility.print_with_space(cx.tcx()),
|
||||
name = it.name.as_ref().unwrap(),
|
||||
typ = c.type_.print(),
|
||||
);
|
||||
|
@ -2426,7 +2426,7 @@ fn item_static(w: &mut Buffer, cx: &Context<'_>, it: &clean::Item, s: &clean::St
|
|||
write!(
|
||||
w,
|
||||
"{vis}static {mutability}{name}: {typ}</pre>",
|
||||
vis = it.visibility.print_with_space(),
|
||||
vis = it.visibility.print_with_space(cx.tcx()),
|
||||
mutability = s.mutability.print_with_space(),
|
||||
name = it.name.as_ref().unwrap(),
|
||||
typ = s.type_.print()
|
||||
|
@ -2437,7 +2437,7 @@ fn item_static(w: &mut Buffer, cx: &Context<'_>, it: &clean::Item, s: &clean::St
|
|||
fn item_function(w: &mut Buffer, cx: &Context<'_>, it: &clean::Item, f: &clean::Function) {
|
||||
let header_len = format!(
|
||||
"{}{}{}{}{:#}fn {}{:#}",
|
||||
it.visibility.print_with_space(),
|
||||
it.visibility.print_with_space(cx.tcx()),
|
||||
f.header.constness.print_with_space(),
|
||||
f.header.asyncness.print_with_space(),
|
||||
f.header.unsafety.print_with_space(),
|
||||
|
@ -2452,7 +2452,7 @@ fn item_function(w: &mut Buffer, cx: &Context<'_>, it: &clean::Item, f: &clean::
|
|||
w,
|
||||
"{vis}{constness}{asyncness}{unsafety}{abi}fn \
|
||||
{name}{generics}{decl}{spotlight}{where_clause}</pre>",
|
||||
vis = it.visibility.print_with_space(),
|
||||
vis = it.visibility.print_with_space(cx.tcx()),
|
||||
constness = f.header.constness.print_with_space(),
|
||||
asyncness = f.header.asyncness.print_with_space(),
|
||||
unsafety = f.header.unsafety.print_with_space(),
|
||||
|
@ -2578,7 +2578,7 @@ fn item_trait(w: &mut Buffer, cx: &Context<'_>, it: &clean::Item, t: &clean::Tra
|
|||
write!(
|
||||
w,
|
||||
"{}{}{}trait {}{}{}",
|
||||
it.visibility.print_with_space(),
|
||||
it.visibility.print_with_space(cx.tcx()),
|
||||
t.unsafety.print_with_space(),
|
||||
if t.is_auto { "auto " } else { "" },
|
||||
it.name.as_ref().unwrap(),
|
||||
|
@ -2598,21 +2598,21 @@ fn item_trait(w: &mut Buffer, cx: &Context<'_>, it: &clean::Item, t: &clean::Tra
|
|||
// FIXME: we should be using a derived_id for the Anchors here
|
||||
write!(w, "{{\n");
|
||||
for t in &types {
|
||||
render_assoc_item(w, t, AssocItemLink::Anchor(None), ItemType::Trait);
|
||||
render_assoc_item(w, t, AssocItemLink::Anchor(None), ItemType::Trait, cx);
|
||||
write!(w, ";\n");
|
||||
}
|
||||
if !types.is_empty() && !consts.is_empty() {
|
||||
w.write_str("\n");
|
||||
}
|
||||
for t in &consts {
|
||||
render_assoc_item(w, t, AssocItemLink::Anchor(None), ItemType::Trait);
|
||||
render_assoc_item(w, t, AssocItemLink::Anchor(None), ItemType::Trait, cx);
|
||||
write!(w, ";\n");
|
||||
}
|
||||
if !consts.is_empty() && !required.is_empty() {
|
||||
w.write_str("\n");
|
||||
}
|
||||
for (pos, m) in required.iter().enumerate() {
|
||||
render_assoc_item(w, m, AssocItemLink::Anchor(None), ItemType::Trait);
|
||||
render_assoc_item(w, m, AssocItemLink::Anchor(None), ItemType::Trait, cx);
|
||||
write!(w, ";\n");
|
||||
|
||||
if pos < required.len() - 1 {
|
||||
|
@ -2623,7 +2623,7 @@ fn item_trait(w: &mut Buffer, cx: &Context<'_>, it: &clean::Item, t: &clean::Tra
|
|||
w.write_str("\n");
|
||||
}
|
||||
for (pos, m) in provided.iter().enumerate() {
|
||||
render_assoc_item(w, m, AssocItemLink::Anchor(None), ItemType::Trait);
|
||||
render_assoc_item(w, m, AssocItemLink::Anchor(None), ItemType::Trait, cx);
|
||||
match m.kind {
|
||||
clean::MethodItem(ref inner, _)
|
||||
if !inner.generics.where_predicates.is_empty() =>
|
||||
|
@ -2672,7 +2672,7 @@ fn item_trait(w: &mut Buffer, cx: &Context<'_>, it: &clean::Item, t: &clean::Tra
|
|||
let item_type = m.type_();
|
||||
let id = cx.derive_id(format!("{}.{}", item_type, name));
|
||||
write!(w, "<h3 id=\"{id}\" class=\"method\"><code>", id = id,);
|
||||
render_assoc_item(w, m, AssocItemLink::Anchor(Some(&id)), ItemType::Impl);
|
||||
render_assoc_item(w, m, AssocItemLink::Anchor(Some(&id)), ItemType::Impl, cx);
|
||||
write!(w, "</code>");
|
||||
render_stability_since(w, m, t, cx.tcx());
|
||||
write_srclink(cx, m, w, cache);
|
||||
|
@ -2890,12 +2890,13 @@ fn assoc_const(
|
|||
_default: Option<&String>,
|
||||
link: AssocItemLink<'_>,
|
||||
extra: &str,
|
||||
cx: &Context<'_>,
|
||||
) {
|
||||
write!(
|
||||
w,
|
||||
"{}{}const <a href=\"{}\" class=\"constant\"><b>{}</b></a>: {}",
|
||||
extra,
|
||||
it.visibility.print_with_space(),
|
||||
it.visibility.print_with_space(cx.tcx()),
|
||||
naive_assoc_href(it, link),
|
||||
it.name.as_ref().unwrap(),
|
||||
ty.print()
|
||||
|
@ -2983,6 +2984,7 @@ fn render_assoc_item(
|
|||
item: &clean::Item,
|
||||
link: AssocItemLink<'_>,
|
||||
parent: ItemType,
|
||||
cx: &Context<'_>,
|
||||
) {
|
||||
fn method(
|
||||
w: &mut Buffer,
|
||||
|
@ -2992,6 +2994,7 @@ fn render_assoc_item(
|
|||
d: &clean::FnDecl,
|
||||
link: AssocItemLink<'_>,
|
||||
parent: ItemType,
|
||||
cx: &Context<'_>,
|
||||
) {
|
||||
let name = meth.name.as_ref().unwrap();
|
||||
let anchor = format!("#{}.{}", meth.type_(), name);
|
||||
|
@ -3012,7 +3015,7 @@ fn render_assoc_item(
|
|||
};
|
||||
let mut header_len = format!(
|
||||
"{}{}{}{}{}{:#}fn {}{:#}",
|
||||
meth.visibility.print_with_space(),
|
||||
meth.visibility.print_with_space(cx.tcx()),
|
||||
header.constness.print_with_space(),
|
||||
header.asyncness.print_with_space(),
|
||||
header.unsafety.print_with_space(),
|
||||
|
@ -3034,7 +3037,7 @@ fn render_assoc_item(
|
|||
"{}{}{}{}{}{}{}fn <a href=\"{href}\" class=\"fnname\">{name}</a>\
|
||||
{generics}{decl}{spotlight}{where_clause}",
|
||||
if parent == ItemType::Trait { " " } else { "" },
|
||||
meth.visibility.print_with_space(),
|
||||
meth.visibility.print_with_space(cx.tcx()),
|
||||
header.constness.print_with_space(),
|
||||
header.asyncness.print_with_space(),
|
||||
header.unsafety.print_with_space(),
|
||||
|
@ -3050,9 +3053,11 @@ fn render_assoc_item(
|
|||
}
|
||||
match item.kind {
|
||||
clean::StrippedItem(..) => {}
|
||||
clean::TyMethodItem(ref m) => method(w, item, m.header, &m.generics, &m.decl, link, parent),
|
||||
clean::TyMethodItem(ref m) => {
|
||||
method(w, item, m.header, &m.generics, &m.decl, link, parent, cx)
|
||||
}
|
||||
clean::MethodItem(ref m, _) => {
|
||||
method(w, item, m.header, &m.generics, &m.decl, link, parent)
|
||||
method(w, item, m.header, &m.generics, &m.decl, link, parent, cx)
|
||||
}
|
||||
clean::AssocConstItem(ref ty, ref default) => assoc_const(
|
||||
w,
|
||||
|
@ -3061,6 +3066,7 @@ fn render_assoc_item(
|
|||
default.as_ref(),
|
||||
link,
|
||||
if parent == ItemType::Trait { " " } else { "" },
|
||||
cx,
|
||||
),
|
||||
clean::AssocTypeItem(ref bounds, ref default) => assoc_type(
|
||||
w,
|
||||
|
@ -3084,7 +3090,7 @@ fn item_struct(
|
|||
wrap_into_docblock(w, |w| {
|
||||
write!(w, "<pre class=\"rust struct\">");
|
||||
render_attributes(w, it, true);
|
||||
render_struct(w, it, Some(&s.generics), s.struct_type, &s.fields, "", true);
|
||||
render_struct(w, it, Some(&s.generics), s.struct_type, &s.fields, "", true, cx);
|
||||
write!(w, "</pre>")
|
||||
});
|
||||
|
||||
|
@ -3134,7 +3140,7 @@ fn item_union(w: &mut Buffer, cx: &Context<'_>, it: &clean::Item, s: &clean::Uni
|
|||
wrap_into_docblock(w, |w| {
|
||||
write!(w, "<pre class=\"rust union\">");
|
||||
render_attributes(w, it, true);
|
||||
render_union(w, it, Some(&s.generics), &s.fields, "", true);
|
||||
render_union(w, it, Some(&s.generics), &s.fields, "", true, cx);
|
||||
write!(w, "</pre>")
|
||||
});
|
||||
|
||||
|
@ -3183,7 +3189,7 @@ fn item_enum(w: &mut Buffer, cx: &Context<'_>, it: &clean::Item, e: &clean::Enum
|
|||
write!(
|
||||
w,
|
||||
"{}enum {}{}{}",
|
||||
it.visibility.print_with_space(),
|
||||
it.visibility.print_with_space(cx.tcx()),
|
||||
it.name.as_ref().unwrap(),
|
||||
e.generics.print(),
|
||||
WhereClause { gens: &e.generics, indent: 0, end_newline: true }
|
||||
|
@ -3209,7 +3215,7 @@ fn item_enum(w: &mut Buffer, cx: &Context<'_>, it: &clean::Item, e: &clean::Enum
|
|||
write!(w, ")");
|
||||
}
|
||||
clean::VariantKind::Struct(ref s) => {
|
||||
render_struct(w, v, None, s.struct_type, &s.fields, " ", false);
|
||||
render_struct(w, v, None, s.struct_type, &s.fields, " ", false, cx);
|
||||
}
|
||||
},
|
||||
_ => unreachable!(),
|
||||
|
@ -3353,11 +3359,12 @@ fn render_struct(
|
|||
fields: &[clean::Item],
|
||||
tab: &str,
|
||||
structhead: bool,
|
||||
cx: &Context<'_>,
|
||||
) {
|
||||
write!(
|
||||
w,
|
||||
"{}{}{}",
|
||||
it.visibility.print_with_space(),
|
||||
it.visibility.print_with_space(cx.tcx()),
|
||||
if structhead { "struct " } else { "" },
|
||||
it.name.as_ref().unwrap()
|
||||
);
|
||||
|
@ -3377,7 +3384,7 @@ fn render_struct(
|
|||
w,
|
||||
"\n{} {}{}: {},",
|
||||
tab,
|
||||
field.visibility.print_with_space(),
|
||||
field.visibility.print_with_space(cx.tcx()),
|
||||
field.name.as_ref().unwrap(),
|
||||
ty.print()
|
||||
);
|
||||
|
@ -3406,7 +3413,7 @@ fn render_struct(
|
|||
match field.kind {
|
||||
clean::StrippedItem(box clean::StructFieldItem(..)) => write!(w, "_"),
|
||||
clean::StructFieldItem(ref ty) => {
|
||||
write!(w, "{}{}", field.visibility.print_with_space(), ty.print())
|
||||
write!(w, "{}{}", field.visibility.print_with_space(cx.tcx()), ty.print())
|
||||
}
|
||||
_ => unreachable!(),
|
||||
}
|
||||
|
@ -3434,11 +3441,12 @@ fn render_union(
|
|||
fields: &[clean::Item],
|
||||
tab: &str,
|
||||
structhead: bool,
|
||||
cx: &Context<'_>,
|
||||
) {
|
||||
write!(
|
||||
w,
|
||||
"{}{}{}",
|
||||
it.visibility.print_with_space(),
|
||||
it.visibility.print_with_space(cx.tcx()),
|
||||
if structhead { "union " } else { "" },
|
||||
it.name.as_ref().unwrap()
|
||||
);
|
||||
|
@ -3453,7 +3461,7 @@ fn render_union(
|
|||
write!(
|
||||
w,
|
||||
" {}{}: {},\n{}",
|
||||
field.visibility.print_with_space(),
|
||||
field.visibility.print_with_space(cx.tcx()),
|
||||
field.name.as_ref().unwrap(),
|
||||
ty.print(),
|
||||
tab
|
||||
|
@ -3845,7 +3853,7 @@ fn render_impl(
|
|||
let id = cx.derive_id(format!("{}.{}", item_type, name));
|
||||
write!(w, "<h4 id=\"{}\" class=\"{}{}\">", id, item_type, extra_class);
|
||||
write!(w, "<code>");
|
||||
render_assoc_item(w, item, link.anchor(&id), ItemType::Impl);
|
||||
render_assoc_item(w, item, link.anchor(&id), ItemType::Impl, cx);
|
||||
write!(w, "</code>");
|
||||
render_stability_since_raw(
|
||||
w,
|
||||
|
@ -3867,7 +3875,7 @@ fn render_impl(
|
|||
clean::AssocConstItem(ref ty, ref default) => {
|
||||
let id = cx.derive_id(format!("{}.{}", item_type, name));
|
||||
write!(w, "<h4 id=\"{}\" class=\"{}{}\"><code>", id, item_type, extra_class);
|
||||
assoc_const(w, item, ty, default.as_ref(), link.anchor(&id), "");
|
||||
assoc_const(w, item, ty, default.as_ref(), link.anchor(&id), "", cx);
|
||||
write!(w, "</code>");
|
||||
render_stability_since_raw(
|
||||
w,
|
||||
|
@ -4092,7 +4100,7 @@ fn item_foreign_type(w: &mut Buffer, cx: &Context<'_>, it: &clean::Item, cache:
|
|||
write!(
|
||||
w,
|
||||
" {}type {};\n}}</pre>",
|
||||
it.visibility.print_with_space(),
|
||||
it.visibility.print_with_space(cx.tcx()),
|
||||
it.name.as_ref().unwrap(),
|
||||
);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue