diff --git a/src/librustdoc/html/render/mod.rs b/src/librustdoc/html/render/mod.rs index c21570d9716ef..2e323c3aaa028 100644 --- a/src/librustdoc/html/render/mod.rs +++ b/src/librustdoc/html/render/mod.rs @@ -3079,21 +3079,22 @@ fn item_struct( _ => None, }) .peekable(); - if let doctree::Plain = s.struct_type { + if let doctree::Plain | doctree::Tuple = s.struct_type { if fields.peek().is_some() { + let field_string = + if let doctree::Plain = s.struct_type { "Fields" } else { "Tuple Fields" }; write!( w, "

- Fields{}

", + {}{}", + field_string, document_non_exhaustive_header(it) ); document_non_exhaustive(w, it); - for (field, ty) in fields { - let id = cx.derive_id(format!( - "{}.{}", - ItemType::StructField, - field.name.as_ref().unwrap() - )); + for (idx, (field, ty)) in fields.enumerate() { + let field_name = + field.name.map_or_else(|| idx.to_string(), |sym| (*sym.as_str()).to_string()); + let id = cx.derive_id(format!("{}.{}", ItemType::StructField, field_name)); write!( w, "\ @@ -3102,7 +3103,7 @@ fn item_struct( ", item_type = ItemType::StructField, id = id, - name = field.name.as_ref().unwrap(), + name = field_name, ty = ty.print() ); document(w, cx, field, Some(it)); diff --git a/src/test/rustdoc/tuple_struct_fields.rs b/src/test/rustdoc/tuple_struct_fields.rs new file mode 100644 index 0000000000000..4506642c57cb5 --- /dev/null +++ b/src/test/rustdoc/tuple_struct_fields.rs @@ -0,0 +1,11 @@ +// @has tuple_struct_fields/struct.Tooople.html +// @has - //span '0: usize' +// @has - 'Wow! i love tuple fields!' +// @!has - 'I should be invisible' + +pub struct Tooople( + /// Wow! i love tuple fields! + pub usize, + /// I should be invisible + u8, +);