diff --git a/src/librustdoc/passes/collect_intra_doc_links.rs b/src/librustdoc/passes/collect_intra_doc_links.rs index 6d9e3d0b9eab0..c047f8729adc1 100644 --- a/src/librustdoc/passes/collect_intra_doc_links.rs +++ b/src/librustdoc/passes/collect_intra_doc_links.rs @@ -838,6 +838,14 @@ impl<'a, 'tcx> DocFolder for LinkCollector<'a, 'tcx> { debug!("looking for the `Self` type"); let self_id = if item.is_fake() { None + // Checking if the item is a field in an enum variant + } else if (matches!(self.cx.tcx.def_kind(item.def_id), DefKind::Field) + && matches!( + self.cx.tcx.def_kind(self.cx.tcx.parent(item.def_id).unwrap()), + DefKind::Variant + )) + { + self.cx.tcx.parent(item.def_id).and_then(|item_id| self.cx.tcx.parent(item_id)) } else if matches!( self.cx.tcx.def_kind(item.def_id), DefKind::AssocConst diff --git a/src/test/rustdoc/intra-doc/issue-82209.rs b/src/test/rustdoc/intra-doc/issue-82209.rs new file mode 100644 index 0000000000000..76618cdce4cd2 --- /dev/null +++ b/src/test/rustdoc/intra-doc/issue-82209.rs @@ -0,0 +1,11 @@ +#![crate_name = "foo"] +#![deny(broken_intra_doc_links)] +pub enum Foo { + Bar { + abc: i32, + /// [Self::Bar::abc] + xyz: i32, + }, +} + +// @has foo/enum.Foo.html '//a/@href' '../foo/enum.Foo.html#variant.Bar.field.abc'