Merge pull request #21584 from regexident/def-with-body-types

Add `expression_types()`, `pattern_types()`, `binding_types()` to `DefWithBody`
This commit is contained in:
Chayim Refael Friedman 2026-02-09 20:13:16 +00:00 committed by GitHub
commit a3b7fa9d21
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -2244,6 +2244,39 @@ impl DefWithBody {
acc.push(diag.into())
}
}
/// Returns an iterator over the inferred types of all expressions in this body.
pub fn expression_types<'db>(
self,
db: &'db dyn HirDatabase,
) -> impl Iterator<Item = Type<'db>> {
self.id().into_iter().flat_map(move |def_id| {
let infer = InferenceResult::for_body(db, def_id);
let resolver = def_id.resolver(db);
infer.expression_types().map(move |(_, ty)| Type::new_with_resolver(db, &resolver, ty))
})
}
/// Returns an iterator over the inferred types of all patterns in this body.
pub fn pattern_types<'db>(self, db: &'db dyn HirDatabase) -> impl Iterator<Item = Type<'db>> {
self.id().into_iter().flat_map(move |def_id| {
let infer = InferenceResult::for_body(db, def_id);
let resolver = def_id.resolver(db);
infer.pattern_types().map(move |(_, ty)| Type::new_with_resolver(db, &resolver, ty))
})
}
/// Returns an iterator over the inferred types of all bindings in this body.
pub fn binding_types<'db>(self, db: &'db dyn HirDatabase) -> impl Iterator<Item = Type<'db>> {
self.id().into_iter().flat_map(move |def_id| {
let infer = InferenceResult::for_body(db, def_id);
let resolver = def_id.resolver(db);
infer.binding_types().map(move |(_, ty)| Type::new_with_resolver(db, &resolver, ty))
})
}
}
fn expr_store_diagnostics<'db>(