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.rs14
1 files changed, 14 insertions, 0 deletions
diff --git a/crates/hir/src/lib.rs b/crates/hir/src/lib.rs
index 1fac95ae5e..3e50874742 100644
--- a/crates/hir/src/lib.rs
+++ b/crates/hir/src/lib.rs
@@ -3221,6 +3221,20 @@ impl Closure {
.collect()
}
+ pub fn capture_types(&self, db: &dyn HirDatabase) -> Vec<Type> {
+ let owner = db.lookup_intern_closure((self.id).into()).0;
+ let infer = &db.infer(owner);
+ let (captures, _) = infer.closure_info(&self.id);
+ captures
+ .iter()
+ .cloned()
+ .map(|capture| Type {
+ env: db.trait_environment_for_body(owner),
+ ty: capture.ty(&self.subst),
+ })
+ .collect()
+ }
+
pub fn fn_trait(&self, db: &dyn HirDatabase) -> FnTrait {
let owner = db.lookup_intern_closure((self.id).into()).0;
let infer = &db.infer(owner);