Add doc(alias) attribute checks for associated consts and associated types
This commit is contained in:
parent
23a2ba6e53
commit
b04fda8b69
3 changed files with 57 additions and 9 deletions
|
|
@ -591,8 +591,14 @@ impl<'a, 'tcx> RustdocVisitor<'a, 'tcx> {
|
|||
// 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,
|
||||
|
|
@ -608,11 +614,31 @@ impl<'a, 'tcx> RustdocVisitor<'a, 'tcx> {
|
|||
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<'_>,
|
||||
|
|
|
|||
|
|
@ -1,13 +1,23 @@
|
|||
#![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 }
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,20 +1,32 @@
|
|||
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
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue