diff --git a/crates/hir_ty/src/traits/chalk.rs b/crates/hir_ty/src/traits/chalk.rs index 17c83b6a46..01b5717a3f 100644 --- a/crates/hir_ty/src/traits/chalk.rs +++ b/crates/hir_ty/src/traits/chalk.rs @@ -244,13 +244,17 @@ impl<'a> chalk_solve::RustIrDatabase for ChalkContext<'a> { let id = from_chalk(self.db, trait_id); self.db.trait_data(id).name.to_string() } - // FIXME: lookup names - fn adt_name(&self, struct_id: chalk_ir::AdtId) -> String { - let datum = self.db.struct_datum(self.krate, struct_id); - format!("{:?}", datum.name(&Interner)) + fn adt_name(&self, adt_id: chalk_ir::AdtId) -> String { + let id = from_chalk(self.db, adt_id); + match id { + hir_def::AdtId::StructId(id) => self.db.struct_data(id).name.to_string(), + hir_def::AdtId::EnumId(id) => self.db.enum_data(id).name.to_string(), + hir_def::AdtId::UnionId(id) => self.db.union_data(id).name.to_string(), + } } fn assoc_type_name(&self, assoc_ty_id: chalk_ir::AssocTypeId) -> String { - format!("Assoc_{}", assoc_ty_id.0) + let id = self.db.associated_ty_data(assoc_ty_id).name; + self.db.type_alias_data(id).name.to_string() } fn opaque_type_name(&self, opaque_ty_id: chalk_ir::OpaqueTyId) -> String { format!("Opaque_{}", opaque_ty_id.0) diff --git a/crates/hir_ty/src/traits/chalk/mapping.rs b/crates/hir_ty/src/traits/chalk/mapping.rs index fe62f3fa7c..d6bacba1d3 100644 --- a/crates/hir_ty/src/traits/chalk/mapping.rs +++ b/crates/hir_ty/src/traits/chalk/mapping.rs @@ -464,6 +464,18 @@ impl ToChalk for hir_def::ImplId { } } +impl ToChalk for hir_def::AdtId { + type Chalk = AdtId; + + fn to_chalk(self, _db: &dyn HirDatabase) -> Self::Chalk { + chalk_ir::AdtId(self.into()) + } + + fn from_chalk(_db: &dyn HirDatabase, id: AdtId) -> Self { + id.0 + } +} + impl ToChalk for CallableDefId { type Chalk = FnDefId;