Skip to content

Commit 71c52ac

Browse files
committed
rustdoc: hide variants of enums > 5
1 parent c96f86d commit 71c52ac

File tree

3 files changed

+34
-7
lines changed

3 files changed

+34
-7
lines changed

src/librustdoc/html/render/print_item.rs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,23 @@ pub(super) fn print_item(cx: &Context<'_>, item: &clean::Item, buf: &mut Buffer)
131131
}
132132
}
133133

134+
/// For large structs, enums, unions, etc, determine whether to hide their fields
135+
fn should_hide_fields(n_fields: usize) -> bool {
136+
// todo: figure out what this should be
137+
n_fields > 5
138+
}
139+
140+
fn toggle_open(w: &mut Buffer, text: &str)
141+
{
142+
write!(w, "<div class=\"docblock type-contents-toggle\" data-toggle-text=\"{}\">", text);
143+
}
144+
145+
fn toggle_close(w: &mut Buffer)
146+
{
147+
w.write_str("</div>");
148+
}
149+
150+
134151
fn item_module(w: &mut Buffer, cx: &Context<'_>, item: &clean::Item, items: &[clean::Item]) {
135152
document(w, cx, item, None);
136153

@@ -816,6 +833,10 @@ fn item_enum(w: &mut Buffer, cx: &Context<'_>, it: &clean::Item, e: &clean::Enum
816833
w.write_str(" {}");
817834
} else {
818835
w.write_str(" {\n");
836+
let toggle = should_hide_fields(e.variants.len());
837+
if toggle {
838+
toggle_open(w, "variants");
839+
}
819840
for v in &e.variants {
820841
w.write_str(" ");
821842
let name = v.name.as_ref().unwrap();
@@ -844,6 +865,9 @@ fn item_enum(w: &mut Buffer, cx: &Context<'_>, it: &clean::Item, e: &clean::Enum
844865
if e.variants_stripped {
845866
w.write_str(" // some variants omitted\n");
846867
}
868+
if toggle {
869+
toggle_close(w);
870+
}
847871
w.write_str("}");
848872
}
849873
w.write_str("</pre>")

src/librustdoc/html/static/main.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2703,6 +2703,10 @@ function hideThemeButtonState() {
27032703
}
27042704
});
27052705
}
2706+
} else if (hasClass(e, "type-contents-toggle")) {
2707+
let text = e.getAttribute("data-toggle-text");
2708+
let tog = createToggle(toggle, `Show ${text}`, null, "", true);
2709+
e.parentNode.insertBefore(tog, e);
27062710
}
27072711
if (e.parentNode.id === "main") {
27082712
var otherMessage = "";

src/librustdoc/html/static/rustdoc.css

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -970,6 +970,10 @@ a.test-arrow:hover{
970970
position: absolute;
971971
left: -23px;
972972
top: 0;
973+
974+
/* The click event for this is defined on the document,
975+
so bubbling does not work. See https://github.com/rust-lang/rust/issues/83332 */
976+
z-index: 10;
973977
}
974978

975979
h3 > .collapse-toggle, h4 > .collapse-toggle {
@@ -1054,10 +1058,9 @@ h3 > .collapse-toggle, h4 > .collapse-toggle {
10541058
margin-top: 3px;
10551059
}
10561060

1061+
/* for enum and struct fields */
10571062
.enum > .toggle-wrapper + .docblock, .struct > .toggle-wrapper + .docblock {
1058-
margin-left: 30px;
1059-
margin-bottom: 20px;
1060-
margin-top: 5px;
1063+
margin-left: 0px;
10611064
}
10621065

10631066
.docblock > .section-header:first-child {
@@ -1069,10 +1072,6 @@ h3 > .collapse-toggle, h4 > .collapse-toggle {
10691072
left: -10px;
10701073
}
10711074

1072-
.enum > .collapsed, .struct > .collapsed {
1073-
margin-bottom: 25px;
1074-
}
1075-
10761075
#main > .variant, #main > .structfield {
10771076
display: block;
10781077
}

0 commit comments

Comments
 (0)