diff options
| author | Vincent Esche <regexident@gmail.com> | 2024-02-28 15:14:05 +0100 |
|---|---|---|
| committer | Vincent Esche <regexident@gmail.com> | 2024-02-28 16:44:07 +0100 |
| commit | ed3497883ca2d6767453fc02cb817b2d56547d95 (patch) | |
| tree | 71a09a6bd5e166e632c6d96e08c3473100ed0ea5 | |
| parent | 0ac05c05271f31c43d31017cbd288e8737a0edb0 (diff) | |
| download | rust-ed3497883ca2d6767453fc02cb817b2d56547d95.tar.gz rust-ed3497883ca2d6767453fc02cb817b2d56547d95.zip | |
Add public function for resolving `ast::Expr` to `hir::Callable`
| -rw-r--r-- | crates/hir/src/semantics.rs | 4 | ||||
| -rw-r--r-- | crates/hir/src/source_analyzer.rs | 8 |
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, |
