Skip to content

Commit

Permalink
Rollup merge of rust-lang#84321 - Swatinem:subvariant-details, r=Guil…
Browse files Browse the repository at this point in the history
…laumeGomez

rustdoc: Convert sub-variant toggle to HTML

Instead of creating a JS toggle, this injects details/summary for
sub-variants of enums. This also fixes the CSS so that the toggle button
does not jump when expanding/collapsing.

Takes inspiration from rust-lang#83337 and should be considered part of rust-lang#83332. Not quite sure if the `.sub-variant` selectors could be further simplified? AFAICS it is only used in that place, and that does not seem to allow any recursion.
  • Loading branch information
JohnTitor committed Apr 23, 2021
2 parents 5b7c986 + 85879fe commit d05e28d
Show file tree
Hide file tree
Showing 5 changed files with 26 additions and 8 deletions.
2 changes: 2 additions & 0 deletions src/librustdoc/html/render/print_item.rs
Original file line number Diff line number Diff line change
Expand Up @@ -963,6 +963,7 @@ fn item_enum(w: &mut Buffer, cx: &Context<'_>, it: &clean::Item, e: &clean::Enum

use crate::clean::Variant;
if let clean::VariantItem(Variant::Struct(ref s)) = *variant.kind {
toggle_open(w, "fields");
let variant_id = cx.derive_id(format!(
"{}.{}.fields",
ItemType::Variant,
Expand Down Expand Up @@ -996,6 +997,7 @@ fn item_enum(w: &mut Buffer, cx: &Context<'_>, it: &clean::Item, e: &clean::Enum
}
}
w.write_str("</div></div>");
toggle_close(w);
}
render_stability_since(w, variant, it, cx.tcx());
}
Expand Down
16 changes: 12 additions & 4 deletions src/librustdoc/html/static/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -455,6 +455,15 @@ function hideThemeButtonState() {
handleHashes(ev);
}

function openParentDetails(elem) {
while (elem) {
if (elem.tagName === "DETAILS") {
elem.open = true;
}
elem = elem.parentNode;
}
}

function expandSection(id) {
var elem = document.getElementById(id);
if (elem && isHidden(elem)) {
Expand All @@ -469,6 +478,8 @@ function hideThemeButtonState() {
// The element is not visible, we need to make it appear!
collapseDocs(collapses[0], "show");
}
// Open all ancestor <details> to make this element visible.
openParentDetails(h3.parentNode);
}
}
}
Expand Down Expand Up @@ -1009,7 +1020,7 @@ function hideThemeButtonState() {
if (hasClass(relatedDoc, "item-info")) {
relatedDoc = relatedDoc.nextElementSibling;
}
if (hasClass(relatedDoc, "docblock") || hasClass(relatedDoc, "sub-variant")) {
if (hasClass(relatedDoc, "docblock")) {
if (mode === "toggle") {
if (hasClass(relatedDoc, "hidden-by-usual-hider")) {
action = "show";
Expand Down Expand Up @@ -1318,8 +1329,6 @@ function hideThemeButtonState() {
if (hasClass(e, "type-decl")) {
// We do something special for these
return;
} else if (hasClass(e, "sub-variant")) {
otherMessage = "&nbsp;Show&nbsp;fields";
} else if (hasClass(e, "non-exhaustive")) {
otherMessage = "&nbsp;This&nbsp;";
if (hasClass(e, "non-exhaustive-struct")) {
Expand Down Expand Up @@ -1351,7 +1360,6 @@ function hideThemeButtonState() {
}

onEachLazy(document.getElementsByClassName("docblock"), buildToggleWrapper);
onEachLazy(document.getElementsByClassName("sub-variant"), buildToggleWrapper);

autoCollapse(getSettingValue("collapse") === "true");

Expand Down
5 changes: 3 additions & 2 deletions src/librustdoc/html/static/rustdoc.css
Original file line number Diff line number Diff line change
Expand Up @@ -1046,10 +1046,11 @@ h3 > .collapse-toggle, h4 > .collapse-toggle {
}

.sub-variant, .sub-variant > h3 {
margin-top: 1px !important;
margin-top: 0px !important;
padding-top: 1px;
}

#main > .sub-variant > h3 {
#main > details > .sub-variant > h3 {
font-size: 15px;
margin-left: 25px;
margin-bottom: 5px;
Expand Down
8 changes: 7 additions & 1 deletion src/test/rustdoc-gui/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,9 @@ pub struct Foo;

impl Foo {
#[must_use]
pub fn must_use(&self) -> bool { true }
pub fn must_use(&self) -> bool {
true
}
}

/// Just a normal enum.
Expand Down Expand Up @@ -85,3 +87,7 @@ pub trait AnotherOne {
/// let x = 12;
/// ```
pub fn check_list_code_block() {}

pub enum AnEnum {
WithVariants { and: usize, sub: usize, variants: usize },
}
3 changes: 2 additions & 1 deletion src/test/rustdoc/item-hide-threshold.rs
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,8 @@ pub struct PrivStruct {
}

// @has 'item_hide_threshold/enum.Enum.html'
// @count - '//details[@class="rustdoc-toggle type-contents-toggle"]' 0
// @count - '//details[@class="rustdoc-toggle type-contents-toggle"]' 1
// @has - '//details[@class="rustdoc-toggle type-contents-toggle"]' 'Show fields'
pub enum Enum {
A, B, C,
D {
Expand Down

0 comments on commit d05e28d

Please sign in to comment.