Unnamed repository; edit this file 'description' to name the repository.
-rw-r--r--crates/hir-ty/src/db.rs2
-rw-r--r--crates/hir-ty/src/traits.rs6
-rw-r--r--crates/hir/src/lib.rs7
3 files changed, 10 insertions, 5 deletions
diff --git a/crates/hir-ty/src/db.rs b/crates/hir-ty/src/db.rs
index dd5639f00d..69283e55a4 100644
--- a/crates/hir-ty/src/db.rs
+++ b/crates/hir-ty/src/db.rs
@@ -156,7 +156,7 @@ pub trait HirDatabase: DefDatabase + Upcast<dyn DefDatabase> {
&self,
projection: crate::ProjectionTy,
env: Arc<crate::TraitEnvironment>,
- ) -> Option<crate::Ty>;
+ ) -> Ty;
#[salsa::invoke(trait_solve_wait)]
#[salsa::transparent]
diff --git a/crates/hir-ty/src/traits.rs b/crates/hir-ty/src/traits.rs
index aaff894b34..372c3a3cca 100644
--- a/crates/hir-ty/src/traits.rs
+++ b/crates/hir-ty/src/traits.rs
@@ -69,10 +69,10 @@ pub(crate) fn normalize_projection_query(
db: &dyn HirDatabase,
projection: ProjectionTy,
env: Arc<TraitEnvironment>,
-) -> Option<Ty> {
- let mut table = InferenceTable::new(db, env.clone());
+) -> Ty {
+ let mut table = InferenceTable::new(db, env);
let ty = table.normalize_projection_ty(projection);
- Some(table.resolve_completely(ty))
+ table.resolve_completely(ty)
}
/// Solve a trait goal using Chalk.
diff --git a/crates/hir/src/lib.rs b/crates/hir/src/lib.rs
index b5974a0cfc..d2717c5665 100644
--- a/crates/hir/src/lib.rs
+++ b/crates/hir/src/lib.rs
@@ -2892,7 +2892,12 @@ impl Type {
})
.build();
- db.normalize_projection(projection, self.env.clone()).map(|ty| self.derived(ty))
+ let ty = db.normalize_projection(projection, self.env.clone());
+ if ty.is_unknown() {
+ None
+ } else {
+ Some(self.derived(ty))
+ }
}
pub fn is_copy(&self, db: &dyn HirDatabase) -> bool {