Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-completion/src/context/analysis.rs')
-rw-r--r--crates/ide-completion/src/context/analysis.rs13
1 files changed, 11 insertions, 2 deletions
diff --git a/crates/ide-completion/src/context/analysis.rs b/crates/ide-completion/src/context/analysis.rs
index ce26d3806c..49fb36ad04 100644
--- a/crates/ide-completion/src/context/analysis.rs
+++ b/crates/ide-completion/src/context/analysis.rs
@@ -2,7 +2,9 @@
use std::iter;
use hir::{ExpandResult, InFile, Semantics, Type, TypeInfo, Variant};
-use ide_db::{RootDatabase, active_parameter::ActiveParameter};
+use ide_db::{
+ RootDatabase, active_parameter::ActiveParameter, syntax_helpers::node_ext::find_loops,
+};
use itertools::Either;
use stdx::always;
use syntax::{
@@ -779,6 +781,12 @@ fn expected_type_and_name<'db>(
});
(ty, None)
},
+ ast::BreakExpr(it) => {
+ let ty = it.break_token()
+ .and_then(|it| find_loops(sema, &it)?.next())
+ .and_then(|expr| sema.type_of_expr(&expr));
+ (ty.map(TypeInfo::original), None)
+ },
ast::ClosureExpr(it) => {
let ty = sema.type_of_expr(&it.into());
ty.and_then(|ty| ty.original.as_callable(sema.db))
@@ -2059,7 +2067,8 @@ fn prev_special_biased_token_at_trivia(mut token: SyntaxToken) -> SyntaxToken {
| T![|]
| T![return]
| T![break]
- | T![continue] = prev.kind()
+ | T![continue]
+ | T![lifetime_ident] = prev.kind()
{
token = prev
}