diff --git a/src/librustdoc/html/format.rs b/src/librustdoc/html/format.rs
index 4b9bf8bbd3a07..b3b5779fbaca9 100644
--- a/src/librustdoc/html/format.rs
+++ b/src/librustdoc/html/format.rs
@@ -674,11 +674,15 @@ pub(crate) fn link_tooltip(
fqp
};
if let &Some(UrlFragment::Item(id)) = fragment {
- write!(f, "{} ", cx.tcx().def_descr(id))?;
+ let tcx = cx.tcx();
+ write!(f, "{} ", tcx.def_descr(id))?;
for component in fqp {
write!(f, "{component}::")?;
}
- write!(f, "{}", cx.tcx().item_name(id))?;
+ if *shortty == ItemType::Enum && tcx.def_kind(id) == DefKind::Field {
+ write!(f, "{}::", tcx.item_name(tcx.parent(id)))?;
+ }
+ write!(f, "{}", tcx.item_name(id))?;
} else if !fqp.is_empty() {
write!(f, "{shortty} ")?;
write!(f, "{}", join_path_syms(fqp))?;
diff --git a/tests/rustdoc-html/intra-doc/enum-variant-field-title.rs b/tests/rustdoc-html/intra-doc/enum-variant-field-title.rs
new file mode 100644
index 0000000000000..8fdfef11e4ff0
--- /dev/null
+++ b/tests/rustdoc-html/intra-doc/enum-variant-field-title.rs
@@ -0,0 +1,13 @@
+// This test ensures that the generated "title" attribute for field of enum variant
+// is correctly generated and includes the variant's name.
+// Regression test for .
+
+#![crate_name = "foo"]
+
+//@ has 'foo/enum.Enum.html'
+//@ has - '//*[@class="docblock"]//a[@title="field foo::Enum::Variant::field"]' 'Enum::Variant::field'
+
+/// [Enum::Variant::field]
+pub enum Enum {
+ Variant { field: i32 }
+}