Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-completion/src/completions/expr.rs')
-rw-r--r--crates/ide-completion/src/completions/expr.rs29
1 files changed, 29 insertions, 0 deletions
diff --git a/crates/ide-completion/src/completions/expr.rs b/crates/ide-completion/src/completions/expr.rs
index 77fd5dd98b..b8ed429cb2 100644
--- a/crates/ide-completion/src/completions/expr.rs
+++ b/crates/ide-completion/src/completions/expr.rs
@@ -328,3 +328,32 @@ pub(crate) fn complete_expr_path(
}
}
}
+
+pub(crate) fn complete_expr(
+ acc: &mut Completions,
+ ctx: &CompletionContext<'_>,
+ path_ctx: &PathCompletionCtx,
+) {
+ let _p = profile::span("complete_expr");
+ if !ctx.qualifier_ctx.none() {
+ return;
+ }
+
+ if let Some(ty) = &ctx.expected_type {
+ // Ignore unit types as they are not very interesting
+ if ty.is_unit() {
+ return;
+ }
+
+ let term_search_ctx = hir::term_search::TermSearchCtx {
+ sema: &ctx.sema,
+ scope: &ctx.scope,
+ goal: ty.clone(),
+ config: hir::term_search::TermSearchConfig { enable_borrowcheck: false },
+ };
+ let exprs = hir::term_search::term_search(term_search_ctx);
+ for expr in exprs {
+ acc.add_expr(ctx, &expr, path_ctx);
+ }
+ }
+}