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,
+);