// Don't duplicate impls when inlining or if it's implementing a trait, we'll pick
// them up regardless of where they're located.
if !self.inlining && of_trait.is_none() {
- let items =
- items.iter().map(|item| self.cx.tcx.hir().impl_item(item.id)).collect();
+ let items = items
+ .iter()
+ .map(|item| {
+ let item = self.cx.tcx.hir().impl_item(item.id);
+ self.check_impl_doc_alias_attr(item);
+ item
+ })
+ .collect();
let i = Impl {
unsafety,
polarity,
vis: &item.vis,
};
om.impls.push(i);
+ } else if of_trait.is_some() {
+ for item in items.iter() {
+ self.check_impl_doc_alias_attr(self.cx.tcx.hir().impl_item(item.id));
+ }
}
}
}
}
+ fn check_impl_doc_alias_attr(&self, item: &hir::ImplItem<'_>) {
+ match item.kind {
+ hir::ImplItemKind::Const(_, _) => check_doc_alias_attrs(
+ &item.attrs,
+ "const in implementation block",
+ self.cx.sess().diagnostic(),
+ ),
+ hir::ImplItemKind::TyAlias(_) => check_doc_alias_attrs(
+ &item.attrs,
+ "type alias in implementation block",
+ self.cx.sess().diagnostic(),
+ ),
+ hir::ImplItemKind::Fn(_, _) => {}
+ }
+ }
+
fn visit_foreign_item(
&mut self,
item: &'tcx hir::ForeignItem<'_>,
#![feature(doc_alias)]
pub struct Bar;
-pub trait Foo {}
+pub trait Foo {
+ type X;
+ fn foo() -> Self::X;
+}
#[doc(alias = "foo")] //~ ERROR
extern {}
#[doc(alias = "bar")] //~ ERROR
-impl Bar {}
+impl Bar {
+ #[doc(alias = "const")] //~ ERROR
+ const A: u32 = 0;
+}
#[doc(alias = "foobar")] //~ ERROR
-impl Foo for Bar {}
+impl Foo for Bar {
+ #[doc(alias = "assoc")] //~ ERROR
+ type X = i32;
+ fn foo() -> Self::X { 0 }
+}
error: `#[doc(alias = "...")]` isn't allowed on extern block
- --> $DIR/check-doc-alias-attr-location.rs:6:7
+ --> $DIR/check-doc-alias-attr-location.rs:9:7
|
LL | #[doc(alias = "foo")]
| ^^^^^^^^^^^^^
error: `#[doc(alias = "...")]` isn't allowed on implementation block
- --> $DIR/check-doc-alias-attr-location.rs:9:7
+ --> $DIR/check-doc-alias-attr-location.rs:12:7
|
LL | #[doc(alias = "bar")]
| ^^^^^^^^^^^^^
+error: `#[doc(alias = "...")]` isn't allowed on const in implementation block
+ --> $DIR/check-doc-alias-attr-location.rs:14:11
+ |
+LL | #[doc(alias = "const")]
+ | ^^^^^^^^^^^^^^^
+
error: `#[doc(alias = "...")]` isn't allowed on implementation block
- --> $DIR/check-doc-alias-attr-location.rs:12:7
+ --> $DIR/check-doc-alias-attr-location.rs:18:7
|
LL | #[doc(alias = "foobar")]
| ^^^^^^^^^^^^^^^^
-error: aborting due to 3 previous errors
+error: `#[doc(alias = "...")]` isn't allowed on type alias in implementation block
+ --> $DIR/check-doc-alias-attr-location.rs:20:11
+ |
+LL | #[doc(alias = "assoc")]
+ | ^^^^^^^^^^^^^^^
+
+error: aborting due to 5 previous errors