Skip to content

Commit ff12aed

Browse files
committed
rustdoc: do not emit tuple variant fields if none are documented
1 parent c5ecc15 commit ff12aed

File tree

3 files changed

+31
-7
lines changed

3 files changed

+31
-7
lines changed

src/librustdoc/html/render/print_item.rs

+14-5
Original file line numberDiff line numberDiff line change
@@ -1133,18 +1133,27 @@ fn item_enum(w: &mut Buffer, cx: &Context<'_>, it: &clean::Item, e: &clean::Enum
11331133
w.write_str("</h3>");
11341134

11351135
use crate::clean::Variant;
1136-
if let Some((extra, fields)) = match *variant.kind {
1137-
clean::VariantItem(Variant::Struct(ref s)) => Some(("", &s.fields)),
1138-
clean::VariantItem(Variant::Tuple(ref fields)) => Some(("Tuple ", fields)),
1136+
1137+
let heading_and_fields = match &*variant.kind {
1138+
clean::VariantItem(Variant::Struct(s)) => Some(("Fields", &s.fields)),
1139+
// Documentation on tuple variant fields is rare, so to reduce noise we only emit
1140+
// the section if at least one field is documented.
1141+
clean::VariantItem(Variant::Tuple(fields))
1142+
if fields.iter().any(|f| cx.shared.maybe_collapsed_doc_value(f).is_some()) =>
1143+
{
1144+
Some(("Tuple Fields", fields))
1145+
}
11391146
_ => None,
1140-
} {
1147+
};
1148+
1149+
if let Some((heading, fields)) = heading_and_fields {
11411150
let variant_id = cx.derive_id(format!(
11421151
"{}.{}.fields",
11431152
ItemType::Variant,
11441153
variant.name.as_ref().unwrap()
11451154
));
11461155
write!(w, "<div class=\"sub-variant\" id=\"{id}\">", id = variant_id);
1147-
write!(w, "<h4>{extra}Fields</h4>", extra = extra,);
1156+
write!(w, "<h4>{heading}</h4>", heading = heading);
11481157
document_non_exhaustive(w, variant);
11491158
for field in fields {
11501159
match *field.kind {

src/test/rustdoc/issue-88600.rs

+3-2
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,18 @@ pub enum FooEnum {
1818
// @has - '//*[@id="variant.MixedHiddenFirst"]//code' 'MixedHiddenFirst(_, S)'
1919
// @count - '//*[@id="variant.MixedHiddenFirst.field.0"]' 0
2020
// @has - '//*[@id="variant.MixedHiddenFirst.field.1"]' '1: S'
21-
MixedHiddenFirst(#[doc(hidden)] H, S),
21+
MixedHiddenFirst(#[doc(hidden)] H, /** dox */ S),
2222
// @has - '//*[@id="variant.MixedHiddenLast"]//code' 'MixedHiddenLast(S, _)'
2323
// @has - '//*[@id="variant.MixedHiddenLast.field.0"]' '0: S'
2424
// @count - '//*[@id="variant.MixedHiddenLast.field.1"]' 0
25-
MixedHiddenLast(S, #[doc(hidden)] H),
25+
MixedHiddenLast(/** dox */ S, #[doc(hidden)] H),
2626
// @has - '//*[@id="variant.HiddenStruct"]//code' 'HiddenStruct'
2727
// @count - '//*[@id="variant.HiddenStruct.field.h"]' 0
2828
// @has - '//*[@id="variant.HiddenStruct.field.s"]' 's: S'
2929
HiddenStruct {
3030
#[doc(hidden)]
3131
h: H,
32+
/// dox
3233
s: S,
3334
},
3435
}

src/test/rustdoc/tuple-struct-fields-doc.rs

+14
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@ pub struct Foo(
2424
// @has - '//*[@id="variant.BarVariant.field.0"]' '0: String'
2525
// @has - '//*[@id="variant.BarVariant.fields"]//*[@class="docblock"]' 'Hello docs'
2626
// @matches - '//*[@id="variant.FooVariant.fields"]/h4' '^Fields$'
27+
// @has - '//*[@id="variant.BazVariant.fields"]//*[@class="docblock"]' 'dox'
28+
// @has - '//*[@id="variant.OtherVariant.fields"]//*[@class="docblock"]' 'dox'
29+
// @!matches - '//*[@id="variant.QuuxVariant.fields"]/h4' '^Tuple Fields$'
2730
pub enum Bar {
2831
BarVariant(
2932
/// Hello docs
@@ -33,4 +36,15 @@ pub enum Bar {
3336
/// hello
3437
x: u32,
3538
},
39+
BazVariant(
40+
String,
41+
/// dox
42+
u32,
43+
),
44+
OtherVariant(
45+
/// dox
46+
String,
47+
u32,
48+
),
49+
QuuxVariant(String),
3650
}

0 commit comments

Comments
 (0)