From 5661fe3fa9e19715d5532d002341098e52fa0c76 Mon Sep 17 00:00:00 2001 From: Lucas De Angelis Date: Fri, 26 Feb 2021 22:09:39 +0100 Subject: [PATCH 1/4] Fix intra-doc handling of `Self` in enum Fixes #82209 --- src/librustdoc/passes/collect_intra_doc_links.rs | 3 +++ src/test/rustdoc/issue-82209.rs | 8 ++++++++ 2 files changed, 11 insertions(+) create mode 100644 src/test/rustdoc/issue-82209.rs diff --git a/src/librustdoc/passes/collect_intra_doc_links.rs b/src/librustdoc/passes/collect_intra_doc_links.rs index 6d9e3d0b9eab0..2e1197b3fe7b6 100644 --- a/src/librustdoc/passes/collect_intra_doc_links.rs +++ b/src/librustdoc/passes/collect_intra_doc_links.rs @@ -838,6 +838,9 @@ 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 a variant in an enum + } 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/issue-82209.rs b/src/test/rustdoc/issue-82209.rs new file mode 100644 index 0000000000000..72a585a705eef --- /dev/null +++ b/src/test/rustdoc/issue-82209.rs @@ -0,0 +1,8 @@ +#![deny(broken_intra_doc_links)] +pub enum Foo { + Bar { + abc: i32, + /// [Self::Bar::abc] + xyz: i32, + }, +} From d95b7b31c7e55e4c10dece4b41b5602f450e776e Mon Sep 17 00:00:00 2001 From: Lucas De Angelis Date: Fri, 26 Feb 2021 22:48:53 +0100 Subject: [PATCH 2/4] Fix formatting --- src/librustdoc/passes/collect_intra_doc_links.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/librustdoc/passes/collect_intra_doc_links.rs b/src/librustdoc/passes/collect_intra_doc_links.rs index 2e1197b3fe7b6..5d7df80663cad 100644 --- a/src/librustdoc/passes/collect_intra_doc_links.rs +++ b/src/librustdoc/passes/collect_intra_doc_links.rs @@ -839,7 +839,12 @@ impl<'a, 'tcx> DocFolder for LinkCollector<'a, 'tcx> { let self_id = if item.is_fake() { None // Checking if the item is a field in a variant in an enum - } 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)) { + } 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), From 02cc85065ed0595ea0894770cfd6e6a9316ad256 Mon Sep 17 00:00:00 2001 From: Lucas De Angelis Date: Fri, 26 Feb 2021 23:48:45 +0100 Subject: [PATCH 3/4] Update src/librustdoc/passes/collect_intra_doc_links.rs Co-authored-by: Joshua Nelson --- src/librustdoc/passes/collect_intra_doc_links.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/librustdoc/passes/collect_intra_doc_links.rs b/src/librustdoc/passes/collect_intra_doc_links.rs index 5d7df80663cad..c047f8729adc1 100644 --- a/src/librustdoc/passes/collect_intra_doc_links.rs +++ b/src/librustdoc/passes/collect_intra_doc_links.rs @@ -838,7 +838,7 @@ 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 a variant in an enum + // 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()), From 5835f6defa96e488ceb537e666b0ba92b85b6fdb Mon Sep 17 00:00:00 2001 From: Lucas De Angelis Date: Sat, 27 Feb 2021 01:08:05 +0100 Subject: [PATCH 4/4] Move test file, add test of generated link --- src/test/rustdoc/{ => intra-doc}/issue-82209.rs | 3 +++ 1 file changed, 3 insertions(+) rename src/test/rustdoc/{ => intra-doc}/issue-82209.rs (55%) diff --git a/src/test/rustdoc/issue-82209.rs b/src/test/rustdoc/intra-doc/issue-82209.rs similarity index 55% rename from src/test/rustdoc/issue-82209.rs rename to src/test/rustdoc/intra-doc/issue-82209.rs index 72a585a705eef..76618cdce4cd2 100644 --- a/src/test/rustdoc/issue-82209.rs +++ b/src/test/rustdoc/intra-doc/issue-82209.rs @@ -1,3 +1,4 @@ +#![crate_name = "foo"] #![deny(broken_intra_doc_links)] pub enum Foo { Bar { @@ -6,3 +7,5 @@ pub enum Foo { xyz: i32, }, } + +// @has foo/enum.Foo.html '//a/@href' '../foo/enum.Foo.html#variant.Bar.field.abc'