Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-ty/src/chalk_db.rs')
-rw-r--r--crates/hir-ty/src/chalk_db.rs26
1 files changed, 18 insertions, 8 deletions
diff --git a/crates/hir-ty/src/chalk_db.rs b/crates/hir-ty/src/chalk_db.rs
index 22b96b55cb..7945442811 100644
--- a/crates/hir-ty/src/chalk_db.rs
+++ b/crates/hir-ty/src/chalk_db.rs
@@ -63,7 +63,7 @@ impl chalk_solve::RustIrDatabase<Interner> for ChalkContext<'_> {
) -> Option<rust_ir::AssociatedTyValueId<Interner>> {
let alias_id = from_assoc_type_id(assoc_type_id);
let trait_sig = self.db.type_alias_signature(alias_id);
- self.db.impl_items(hir_def::ImplId::from_chalk(self.db, impl_id)).items.iter().find_map(
+ hir_def::ImplId::from_chalk(self.db, impl_id).impl_items(self.db).items.iter().find_map(
|(name, item)| match item {
AssocItemId::TypeAliasId(alias) if &trait_sig.name == name => {
Some(TypeAliasAsValue(*alias).to_chalk(self.db))
@@ -261,10 +261,20 @@ impl chalk_solve::RustIrDatabase<Interner> for ChalkContext<'_> {
&self,
well_known_trait: WellKnownTrait,
) -> Option<chalk_ir::TraitId<Interner>> {
- let lang_attr = lang_item_from_well_known_trait(well_known_trait);
- let trait_ = lang_attr.resolve_trait(self.db, self.krate)?;
+ let lang_item = lang_item_from_well_known_trait(well_known_trait);
+ let trait_ = lang_item.resolve_trait(self.db, self.krate)?;
Some(to_chalk_trait_id(trait_))
}
+ fn well_known_assoc_type_id(
+ &self,
+ assoc_type: rust_ir::WellKnownAssocType,
+ ) -> Option<chalk_ir::AssocTypeId<Interner>> {
+ let lang_item = match assoc_type {
+ rust_ir::WellKnownAssocType::AsyncFnOnceOutput => LangItem::AsyncFnOnceOutput,
+ };
+ let alias = lang_item.resolve_type_alias(self.db, self.krate)?;
+ Some(to_assoc_type_id(alias))
+ }
fn program_clauses_for_env(
&self,
@@ -813,11 +823,11 @@ pub(crate) fn adt_datum_query(
(rust_ir::AdtKind::Struct, vec![variant_id_to_fields(id.into())])
}
hir_def::AdtId::EnumId(id) => {
- let variants = db
- .enum_variants(id)
+ let variants = id
+ .enum_variants(db)
.variants
.iter()
- .map(|&(variant_id, _)| variant_id_to_fields(variant_id.into()))
+ .map(|&(variant_id, _, _)| variant_id_to_fields(variant_id.into()))
.collect();
(rust_ir::AdtKind::Enum, variants)
}
@@ -870,8 +880,8 @@ fn impl_def_datum(db: &dyn HirDatabase, krate: Crate, impl_id: hir_def::ImplId)
let impl_datum_bound = rust_ir::ImplDatumBound { trait_ref, where_clauses };
let trait_data = db.trait_items(trait_);
- let associated_ty_value_ids = db
- .impl_items(impl_id)
+ let associated_ty_value_ids = impl_id
+ .impl_items(db)
.items
.iter()
.filter_map(|(_, item)| match item {