Skip to content

Commit f146b97

Browse files
committed
rustdoc: hide fields of structs/unions > 5
1 parent 71c52ac commit f146b97

File tree

2 files changed

+31
-8
lines changed

2 files changed

+31
-8
lines changed

src/librustdoc/html/render/print_item.rs

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -137,17 +137,14 @@ fn should_hide_fields(n_fields: usize) -> bool {
137137
n_fields > 5
138138
}
139139

140-
fn toggle_open(w: &mut Buffer, text: &str)
141-
{
140+
fn toggle_open(w: &mut Buffer, text: &str) {
142141
write!(w, "<div class=\"docblock type-contents-toggle\" data-toggle-text=\"{}\">", text);
143142
}
144143

145-
fn toggle_close(w: &mut Buffer)
146-
{
144+
fn toggle_close(w: &mut Buffer) {
147145
w.write_str("</div>");
148146
}
149147

150-
151148
fn item_module(w: &mut Buffer, cx: &Context<'_>, item: &clean::Item, items: &[clean::Item]) {
152149
document(w, cx, item, None);
153150

@@ -1285,6 +1282,17 @@ fn render_union(
12851282
}
12861283

12871284
write!(w, " {{\n{}", tab);
1285+
let count_fields = fields
1286+
.iter()
1287+
.filter(
1288+
|f| if let clean::StructFieldItem(..) = *f.kind { true } else { false },
1289+
)
1290+
.count();
1291+
let toggle = should_hide_fields(count_fields);
1292+
if toggle {
1293+
toggle_open(w, "fields");
1294+
}
1295+
12881296
for field in fields {
12891297
if let clean::StructFieldItem(ref ty) = *field.kind {
12901298
write!(
@@ -1301,6 +1309,9 @@ fn render_union(
13011309
if it.has_stripped_fields().unwrap() {
13021310
write!(w, " // some fields omitted\n{}", tab);
13031311
}
1312+
if toggle {
1313+
toggle_close(w);
1314+
}
13041315
w.write_str("}");
13051316
}
13061317

@@ -1329,8 +1340,18 @@ fn render_struct(
13291340
if let Some(g) = g {
13301341
write!(w, "{}", print_where_clause(g, cx.cache(), cx.tcx(), 0, true),)
13311342
}
1332-
let mut has_visible_fields = false;
13331343
w.write_str(" {");
1344+
let count_fields = fields
1345+
.iter()
1346+
.filter(
1347+
|f| if let clean::StructFieldItem(..) = *f.kind { true } else { false },
1348+
)
1349+
.count();
1350+
let has_visible_fields = count_fields > 0;
1351+
let toggle = should_hide_fields(count_fields);
1352+
if toggle {
1353+
toggle_open(w, "fields");
1354+
}
13341355
for field in fields {
13351356
if let clean::StructFieldItem(ref ty) = *field.kind {
13361357
write!(
@@ -1341,7 +1362,6 @@ fn render_struct(
13411362
field.name.as_ref().unwrap(),
13421363
ty.print(cx.cache(), cx.tcx()),
13431364
);
1344-
has_visible_fields = true;
13451365
}
13461366
}
13471367

@@ -1355,6 +1375,9 @@ fn render_struct(
13551375
// `{ /* fields omitted */ }` to save space.
13561376
write!(w, " /* fields omitted */ ");
13571377
}
1378+
if toggle {
1379+
toggle_close(w);
1380+
}
13581381
w.write_str("}");
13591382
}
13601383
CtorKind::Fn => {

src/librustdoc/html/static/rustdoc.css

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1059,7 +1059,7 @@ h3 > .collapse-toggle, h4 > .collapse-toggle {
10591059
}
10601060

10611061
/* for enum and struct fields */
1062-
.enum > .toggle-wrapper + .docblock, .struct > .toggle-wrapper + .docblock {
1062+
.enum > .toggle-wrapper + .docblock, .struct > .toggle-wrapper + .docblock, .union > .toggle-wrapper + .docblock {
10631063
margin-left: 0px;
10641064
}
10651065

0 commit comments

Comments
 (0)