Skip to content

Commit 315a16f

Browse files
tesujiGuillaumeGomez
authored andcommitted
doc: Fold inline methods from Deref
1 parent b286722 commit 315a16f

File tree

2 files changed

+18
-4
lines changed

2 files changed

+18
-4
lines changed

src/librustdoc/html/render/mod.rs

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1256,6 +1256,7 @@ fn render_assoc_items_inner(
12561256
let Some(v) = cache.impls.get(&it) else { return };
12571257
let (non_trait, traits): (Vec<_>, _) = v.iter().partition(|i| i.inner_impl().trait_.is_none());
12581258
if !non_trait.is_empty() {
1259+
let mut close_tags = <Vec<&str>>::with_capacity(1);
12591260
let mut tmp_buf = Buffer::html();
12601261
let (render_mode, id, class_html) = match what {
12611262
AssocItemRender::All => {
@@ -1266,6 +1267,8 @@ fn render_assoc_items_inner(
12661267
let id =
12671268
cx.derive_id(small_url_encode(format!("deref-methods-{:#}", type_.print(cx))));
12681269
let derived_id = cx.derive_id(&id);
1270+
tmp_buf.write_str("<details class=\"toggle implementors-toggle\" open><summary>");
1271+
close_tags.push("</details>");
12691272
write_impl_section_heading(
12701273
&mut tmp_buf,
12711274
&format!(
@@ -1275,6 +1278,7 @@ fn render_assoc_items_inner(
12751278
),
12761279
&id,
12771280
);
1281+
tmp_buf.write_str("</summary>");
12781282
if let Some(def_id) = type_.def_id(cx.cache()) {
12791283
cx.deref_id_map.insert(def_id, id);
12801284
}
@@ -1308,6 +1312,9 @@ fn render_assoc_items_inner(
13081312
impls_buf.into_inner()
13091313
)
13101314
.unwrap();
1315+
for tag in close_tags.into_iter().rev() {
1316+
w.write_str(tag).unwrap();
1317+
}
13111318
}
13121319
}
13131320

@@ -1565,7 +1572,7 @@ fn render_impl(
15651572
let cache = &shared.cache;
15661573
let traits = &cache.traits;
15671574
let trait_ = i.trait_did().map(|did| &traits[&did]);
1568-
let mut close_tags = String::new();
1575+
let mut close_tags = <Vec<&str>>::with_capacity(2);
15691576

15701577
// For trait implementations, the `interesting` output contains all methods that have doc
15711578
// comments, and the `boring` output contains all methods that do not. The distinction is
@@ -1853,7 +1860,7 @@ fn render_impl(
18531860
if render_mode == RenderMode::Normal {
18541861
let toggled = !(impl_items.is_empty() && default_impl_items.is_empty());
18551862
if toggled {
1856-
close_tags.insert_str(0, "</details>");
1863+
close_tags.push("</details>");
18571864
write!(
18581865
w,
18591866
"<details class=\"toggle implementors-toggle\"{}>\
@@ -1899,14 +1906,16 @@ fn render_impl(
18991906
}
19001907
if !default_impl_items.is_empty() || !impl_items.is_empty() {
19011908
w.write_str("<div class=\"impl-items\">");
1902-
close_tags.insert_str(0, "</div>");
1909+
close_tags.push("</div>");
19031910
}
19041911
}
19051912
if !default_impl_items.is_empty() || !impl_items.is_empty() {
19061913
w.push_buffer(default_impl_items);
19071914
w.push_buffer(impl_items);
19081915
}
1909-
w.write_str(&close_tags);
1916+
for tag in close_tags.into_iter().rev() {
1917+
w.write_str(tag);
1918+
}
19101919
}
19111920

19121921
// Render the items that appear on the right side of methods, impls, and

src/librustdoc/html/static/css/rustdoc.css

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1733,6 +1733,11 @@ details.toggle {
17331733
position: relative;
17341734
}
17351735

1736+
details.implementors-toggle {
1737+
/* This makes [-] on the same line as <summary>. */
1738+
contain: inline-size;
1739+
}
1740+
17361741
/* The hideme class is used on summary tags that contain a span with
17371742
placeholder text shown only when the toggle is closed. For instance,
17381743
"Expand description" or "Show methods". */

0 commit comments

Comments
 (0)