Skip to content

Commit

Permalink
rustdoc: smartly hide associated items of traits if there are too man…
Browse files Browse the repository at this point in the history
…y of them
  • Loading branch information
Manishearth committed Apr 12, 2021
1 parent f146b97 commit 173cbec
Show file tree
Hide file tree
Showing 5 changed files with 30 additions and 12 deletions.
30 changes: 24 additions & 6 deletions src/librustdoc/html/render/print_item.rs
Expand Up @@ -443,17 +443,36 @@ fn item_trait(w: &mut Buffer, cx: &Context<'_>, it: &clean::Item, t: &clean::Tra
} else {
// FIXME: we should be using a derived_id for the Anchors here
w.write_str("{\n");
let mut toggle = false;

// If there are too many associated types, hide _everything_
if should_hide_fields(types.len()) {
toggle = true;
toggle_open(w, "associated items");
}
for t in &types {
render_assoc_item(w, t, AssocItemLink::Anchor(None), ItemType::Trait, cx);
w.write_str(";\n");
}
// If there are too many associated constants, hide everything after them
// We also do this if the types + consts is large because otherwise we could
// render a bunch of types and _then_ a bunch of consts just because both were
// _just_ under the limit
if !toggle & should_hide_fields(types.len() + consts.len()) {
toggle = true;
toggle_open(w, "associated constants and methods");
}
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, cx);
w.write_str(";\n");
}
if !toggle & should_hide_fields(required.len() + provided.len()) {
toggle = true;
toggle_open(w, "methods");
}
if !consts.is_empty() && !required.is_empty() {
w.write_str("\n");
}
Expand Down Expand Up @@ -484,6 +503,9 @@ fn item_trait(w: &mut Buffer, cx: &Context<'_>, it: &clean::Item, t: &clean::Tra
w.write_str("<div class=\"item-spacer\"></div>");
}
}
if toggle {
toggle_close(w);
}
w.write_str("}");
}
w.write_str("</pre>")
Expand Down Expand Up @@ -1284,9 +1306,7 @@ fn render_union(
write!(w, " {{\n{}", tab);
let count_fields = fields
.iter()
.filter(
|f| if let clean::StructFieldItem(..) = *f.kind { true } else { false },
)
.filter(|f| if let clean::StructFieldItem(..) = *f.kind { true } else { false })
.count();
let toggle = should_hide_fields(count_fields);
if toggle {
Expand Down Expand Up @@ -1343,9 +1363,7 @@ fn render_struct(
w.write_str(" {");
let count_fields = fields
.iter()
.filter(
|f| if let clean::StructFieldItem(..) = *f.kind { true } else { false },
)
.filter(|f| if let clean::StructFieldItem(..) = *f.kind { true } else { false })
.count();
let has_visible_fields = count_fields > 0;
let toggle = should_hide_fields(count_fields);
Expand Down
6 changes: 3 additions & 3 deletions src/librustdoc/html/static/rustdoc.css
Expand Up @@ -1058,8 +1058,8 @@ h3 > .collapse-toggle, h4 > .collapse-toggle {
margin-top: 3px;
}

/* for enum and struct fields */
.enum > .toggle-wrapper + .docblock, .struct > .toggle-wrapper + .docblock, .union > .toggle-wrapper + .docblock {
/* for hiding fields/variants/associated items */
.enum > .toggle-wrapper + .docblock, .struct > .toggle-wrapper + .docblock, .union > .toggle-wrapper + .docblock, .trait > .toggle-wrapper + .docblock {
margin-left: 0px;
}

Expand Down Expand Up @@ -1785,7 +1785,7 @@ div.name.expand::before {
.type-decl > pre > .docblock.attributes.top-attr {
margin-left: 1.8em !important;
}
.type-decl > pre > .toggle-attributes {
.type-decl > pre .toggle-attributes {
margin-left: 2.2em;
}
.type-decl > pre > .docblock.attributes {
Expand Down
2 changes: 1 addition & 1 deletion src/librustdoc/html/static/themes/ayu.css
Expand Up @@ -218,7 +218,7 @@ a {
color: #c5c5c5;
}

.docblock:not(.type-decl) a:not(.srclink):not(.test-arrow),
.docblock:not(.type-decl) a:not(.srclink):not(.test-arrow):not(.collapse-toggle),
.docblock-short a:not(.srclink):not(.test-arrow), .item-info a,
#help a {
color: #39AFD7;
Expand Down
2 changes: 1 addition & 1 deletion src/librustdoc/html/static/themes/dark.css
Expand Up @@ -176,7 +176,7 @@ a {
color: #ddd;
}

.docblock:not(.type-decl) a:not(.srclink):not(.test-arrow),
.docblock:not(.type-decl) a:not(.srclink):not(.test-arrow):not(.collapse-toggle),
.docblock-short a:not(.srclink):not(.test-arrow), .item-info a,
#help a {
color: #D2991D;
Expand Down
2 changes: 1 addition & 1 deletion src/librustdoc/html/static/themes/light.css
Expand Up @@ -174,7 +174,7 @@ a {
color: #000;
}

.docblock:not(.type-decl) a:not(.srclink):not(.test-arrow),
.docblock:not(.type-decl) a:not(.srclink):not(.test-arrow):not(.collapse-toggle),
.docblock-short a:not(.srclink):not(.test-arrow), .item-info a,
#help a {
color: #3873AD;
Expand Down

0 comments on commit 173cbec

Please sign in to comment.