From c4c010f5348f215adf98f4ca0ae66c4f999943dd Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Mon, 4 Jan 2021 15:05:36 +0100 Subject: [PATCH 1/2] Add an error in case the doc alias is the same as the item it's aliasing --- compiler/rustc_passes/src/check_attr.rs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/compiler/rustc_passes/src/check_attr.rs b/compiler/rustc_passes/src/check_attr.rs index aeaa862f5fd63..420c002c5fc46 100644 --- a/compiler/rustc_passes/src/check_attr.rs +++ b/compiler/rustc_passes/src/check_attr.rs @@ -310,7 +310,7 @@ impl CheckAttrVisitor<'tcx> { .sess .struct_span_err( meta.name_value_literal_span().unwrap_or_else(|| meta.span()), - &format!("{:?} character isn't allowed in `#[doc(alias = \"...\")]`", c,), + &format!("{:?} character isn't allowed in `#[doc(alias = \"...\")]`", c), ) .emit(); return false; @@ -358,6 +358,17 @@ impl CheckAttrVisitor<'tcx> { .emit(); return false; } + let item_name = self.tcx.hir().name(hir_id); + if item_name.to_string() == doc_alias { + self.tcx + .sess + .struct_span_err( + meta.span(), + &format!("`#[doc(alias = \"...\")]` is the same as the item's name"), + ) + .emit(); + return false; + } true } From 9714ac08a5476ccfbbce859d3fb69905a64668e1 Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Mon, 4 Jan 2021 15:05:49 +0100 Subject: [PATCH 2/2] Add tests for new doc alias check --- src/test/rustdoc-ui/doc-alias-same-name.rs | 4 ++++ src/test/rustdoc-ui/doc-alias-same-name.stderr | 8 ++++++++ src/test/ui/doc-alias-same-name.rs | 4 ++++ src/test/ui/doc-alias-same-name.stderr | 8 ++++++++ 4 files changed, 24 insertions(+) create mode 100644 src/test/rustdoc-ui/doc-alias-same-name.rs create mode 100644 src/test/rustdoc-ui/doc-alias-same-name.stderr create mode 100644 src/test/ui/doc-alias-same-name.rs create mode 100644 src/test/ui/doc-alias-same-name.stderr diff --git a/src/test/rustdoc-ui/doc-alias-same-name.rs b/src/test/rustdoc-ui/doc-alias-same-name.rs new file mode 100644 index 0000000000000..da97c26761862 --- /dev/null +++ b/src/test/rustdoc-ui/doc-alias-same-name.rs @@ -0,0 +1,4 @@ +#![crate_type = "lib"] + +#[doc(alias = "Foo")] //~ ERROR +pub struct Foo; diff --git a/src/test/rustdoc-ui/doc-alias-same-name.stderr b/src/test/rustdoc-ui/doc-alias-same-name.stderr new file mode 100644 index 0000000000000..5ba09a2eae1c7 --- /dev/null +++ b/src/test/rustdoc-ui/doc-alias-same-name.stderr @@ -0,0 +1,8 @@ +error: `#[doc(alias = "...")]` is the same as the item's name + --> $DIR/doc-alias-same-name.rs:3:7 + | +LL | #[doc(alias = "Foo")] + | ^^^^^^^^^^^^^ + +error: aborting due to previous error + diff --git a/src/test/ui/doc-alias-same-name.rs b/src/test/ui/doc-alias-same-name.rs new file mode 100644 index 0000000000000..da97c26761862 --- /dev/null +++ b/src/test/ui/doc-alias-same-name.rs @@ -0,0 +1,4 @@ +#![crate_type = "lib"] + +#[doc(alias = "Foo")] //~ ERROR +pub struct Foo; diff --git a/src/test/ui/doc-alias-same-name.stderr b/src/test/ui/doc-alias-same-name.stderr new file mode 100644 index 0000000000000..5ba09a2eae1c7 --- /dev/null +++ b/src/test/ui/doc-alias-same-name.stderr @@ -0,0 +1,8 @@ +error: `#[doc(alias = "...")]` is the same as the item's name + --> $DIR/doc-alias-same-name.rs:3:7 + | +LL | #[doc(alias = "Foo")] + | ^^^^^^^^^^^^^ + +error: aborting due to previous error +