Skip to content

Commit 3e7bc08

Browse files
authored
Rollup merge of #91687 - euclio:tuple-variant-field-section, r=GuillaumeGomez
rustdoc: do not emit tuple variant fields if none are documented Fixes #90824. Before: ![2021-12-15T22:26:41](https://user-images.githubusercontent.com/1372438/146302871-4d265433-b9aa-4e53-adfb-e7cb92107180.png) After: ![2021-12-15T22:27:01](https://user-images.githubusercontent.com/1372438/146302872-e39eda3d-2fb2-4fb9-aae7-2008e4e1b4dd.png)
2 parents c7ada00 + 4193f2d commit 3e7bc08

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
@@ -1126,18 +1126,27 @@ fn item_enum(w: &mut Buffer, cx: &Context<'_>, it: &clean::Item, e: &clean::Enum
11261126
w.write_str("</h3>");
11271127

11281128
use crate::clean::Variant;
1129-
if let Some((extra, fields)) = match *variant.kind {
1130-
clean::VariantItem(Variant::Struct(ref s)) => Some(("", &s.fields)),
1131-
clean::VariantItem(Variant::Tuple(ref fields)) => Some(("Tuple ", fields)),
1129+
1130+
let heading_and_fields = match &*variant.kind {
1131+
clean::VariantItem(Variant::Struct(s)) => Some(("Fields", &s.fields)),
1132+
// Documentation on tuple variant fields is rare, so to reduce noise we only emit
1133+
// the section if at least one field is documented.
1134+
clean::VariantItem(Variant::Tuple(fields))
1135+
if fields.iter().any(|f| f.doc_value().is_some()) =>
1136+
{
1137+
Some(("Tuple Fields", fields))
1138+
}
11321139
_ => None,
1133-
} {
1140+
};
1141+
1142+
if let Some((heading, fields)) = heading_and_fields {
11341143
let variant_id = cx.derive_id(format!(
11351144
"{}.{}.fields",
11361145
ItemType::Variant,
11371146
variant.name.as_ref().unwrap()
11381147
));
11391148
write!(w, "<div class=\"sub-variant\" id=\"{id}\">", id = variant_id);
1140-
write!(w, "<h4>{extra}Fields</h4>", extra = extra,);
1149+
write!(w, "<h4>{heading}</h4>", heading = heading);
11411150
document_non_exhaustive(w, variant);
11421151
for field in fields {
11431152
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)