diff --git a/src/librustdoc/html/render/print_item.rs b/src/librustdoc/html/render/print_item.rs index 131b1d608e68..ff7ce01e807c 100644 --- a/src/librustdoc/html/render/print_item.rs +++ b/src/librustdoc/html/render/print_item.rs @@ -1737,7 +1737,14 @@ fn item_variants( w.write_str(""); let heading_and_fields = match &variant_data.kind { - clean::VariantKind::Struct(s) => Some(("Fields", &s.fields)), + clean::VariantKind::Struct(s) => { + // If there is no field to display, no need to add the heading. + if s.fields.iter().any(|f| !f.is_doc_hidden()) { + Some(("Fields", &s.fields)) + } else { + None + } + } clean::VariantKind::Tuple(fields) => { // Documentation on tuple variant fields is rare, so to reduce noise we only emit // the section if at least one field is documented. diff --git a/tests/rustdoc/enum-variant-fields-heading.rs b/tests/rustdoc/enum-variant-fields-heading.rs new file mode 100644 index 000000000000..8a7c99a87359 --- /dev/null +++ b/tests/rustdoc/enum-variant-fields-heading.rs @@ -0,0 +1,18 @@ +// This is a regression test for . +// It ensures that the "Fields" heading is not generated if no field is displayed. + +#![crate_name = "foo"] + +// @has 'foo/enum.Foo.html' +// @has - '//*[@id="variant.A"]' 'A' +// @count - '//*[@id="variant.A.fields"]' 0 +// @has - '//*[@id="variant.B"]' 'B' +// @count - '//*[@id="variant.B.fields"]' 0 +// @snapshot variants - '//*[@id="main-content"]/*[@class="variants"]' + +pub enum Foo { + /// A variant with no fields + A {}, + /// A variant with hidden fields + B { #[doc(hidden)] a: u8 }, +} diff --git a/tests/rustdoc/enum-variant-fields-heading.variants.html b/tests/rustdoc/enum-variant-fields-heading.variants.html new file mode 100644 index 000000000000..bcb36f7cf86f --- /dev/null +++ b/tests/rustdoc/enum-variant-fields-heading.variants.html @@ -0,0 +1,3 @@ +
§

A

A variant with no fields

+
§

B

A variant with hidden fields

+
\ No newline at end of file