Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir/src/lib.rs')
-rw-r--r--crates/hir/src/lib.rs29
1 files changed, 22 insertions, 7 deletions
diff --git a/crates/hir/src/lib.rs b/crates/hir/src/lib.rs
index dbfacb2caa..b2a793e53d 100644
--- a/crates/hir/src/lib.rs
+++ b/crates/hir/src/lib.rs
@@ -563,6 +563,11 @@ impl Module {
for diag in db.trait_data_with_diagnostics(t.id).1.iter() {
emit_def_diagnostic(db, acc, diag);
}
+
+ for item in t.items(db) {
+ item.diagnostics(db, acc);
+ }
+
acc.extend(def.diagnostics(db))
}
ModuleDef::Adt(adt) => {
@@ -730,13 +735,7 @@ impl Module {
}
for &item in &db.impl_data(impl_def.id).items {
- let def: DefWithBody = match AssocItem::from(item) {
- AssocItem::Function(it) => it.into(),
- AssocItem::Const(it) => it.into(),
- AssocItem::TypeAlias(_) => continue,
- };
-
- def.diagnostics(db, acc);
+ AssocItem::from(item).diagnostics(db, acc);
}
}
}
@@ -2651,6 +2650,22 @@ impl AssocItem {
_ => None,
}
}
+
+ pub fn diagnostics(self, db: &dyn HirDatabase, acc: &mut Vec<AnyDiagnostic>) {
+ match self {
+ AssocItem::Function(func) => {
+ DefWithBody::from(func).diagnostics(db, acc);
+ }
+ AssocItem::Const(const_) => {
+ DefWithBody::from(const_).diagnostics(db, acc);
+ }
+ AssocItem::TypeAlias(type_alias) => {
+ for diag in hir_ty::diagnostics::incorrect_case(db, type_alias.id.into()) {
+ acc.push(diag.into());
+ }
+ }
+ }
+ }
}
impl HasVisibility for AssocItem {