about summary refs log tree commit diff
diff options
context:
space:
mode:
authorVincent Esche <regexident@gmail.com>2024-02-28 15:14:05 +0100
committerVincent Esche <regexident@gmail.com>2024-02-28 16:44:07 +0100
commited3497883ca2d6767453fc02cb817b2d56547d95 (patch)
tree71a09a6bd5e166e632c6d96e08c3473100ed0ea5
parent0ac05c05271f31c43d31017cbd288e8737a0edb0 (diff)
downloadrust-ed3497883ca2d6767453fc02cb817b2d56547d95.tar.gz
rust-ed3497883ca2d6767453fc02cb817b2d56547d95.zip
Add public function for resolving `ast::Expr` to `hir::Callable`
-rw-r--r--crates/hir/src/semantics.rs4
-rw-r--r--crates/hir/src/source_analyzer.rs8
2 files changed, 12 insertions, 0 deletions
diff --git a/crates/hir/src/semantics.rs b/crates/hir/src/semantics.rs
index 1fb6570b6a4..cfda8d4f937 100644
--- a/crates/hir/src/semantics.rs
+++ b/crates/hir/src/semantics.rs
@@ -1120,6 +1120,10 @@ impl<'db> SemanticsImpl<'db> {
         self.analyze(pat.syntax())?.binding_mode_of_pat(self.db, pat)
     }
 
+    pub fn resolve_expr_as_callable(&self, call: &ast::Expr) -> Option<Callable> {
+        self.analyze(call.syntax())?.resolve_expr_as_callable(self.db, call)
+    }
+
     pub fn resolve_method_call(&self, call: &ast::MethodCallExpr) -> Option<Function> {
         self.analyze(call.syntax())?.resolve_method_call(self.db, call)
     }
diff --git a/crates/hir/src/source_analyzer.rs b/crates/hir/src/source_analyzer.rs
index bcc9111f2ba..ffec4c21497 100644
--- a/crates/hir/src/source_analyzer.rs
+++ b/crates/hir/src/source_analyzer.rs
@@ -303,6 +303,14 @@ impl SourceAnalyzer {
         }
     }
 
+    pub(crate) fn resolve_expr_as_callable(
+        &self,
+        db: &dyn HirDatabase,
+        call: &ast::Expr,
+    ) -> Option<Callable> {
+        self.type_of_expr(db, &call.clone())?.0.as_callable(db)
+    }
+
     pub(crate) fn resolve_field(
         &self,
         db: &dyn HirDatabase,