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.rs33
1 files changed, 7 insertions, 26 deletions
diff --git a/crates/ide-completion/src/context/analysis.rs b/crates/ide-completion/src/context/analysis.rs
index 58c0f683a3..faeb97f93f 100644
--- a/crates/ide-completion/src/context/analysis.rs
+++ b/crates/ide-completion/src/context/analysis.rs
@@ -22,7 +22,7 @@ use syntax::{
};
use crate::{
- completions::postfix::is_in_condition,
+ completions::postfix::{is_in_condition, is_in_value},
context::{
AttrCtx, BreakableKind, COMPLETION_MARKER, CompletionAnalysis, DotAccess, DotAccessExprCtx,
DotAccessKind, ItemListKind, LifetimeContext, LifetimeKind, NameContext, NameKind,
@@ -1097,25 +1097,6 @@ fn classify_name_ref<'db>(
.and_then(|next| next.first_token())
.is_some_and(|token| token.kind() == SyntaxKind::ELSE_KW)
};
- let is_in_value = |it: &SyntaxNode| {
- let Some(node) = it.parent() else { return false };
- let kind = node.kind();
- ast::LetStmt::can_cast(kind)
- || ast::ArgList::can_cast(kind)
- || ast::ArrayExpr::can_cast(kind)
- || ast::ParenExpr::can_cast(kind)
- || ast::BreakExpr::can_cast(kind)
- || ast::ReturnExpr::can_cast(kind)
- || ast::PrefixExpr::can_cast(kind)
- || ast::FormatArgsArg::can_cast(kind)
- || ast::RecordExprField::can_cast(kind)
- || ast::BinExpr::cast(node.clone())
- .and_then(|expr| expr.rhs())
- .is_some_and(|expr| expr.syntax() == it)
- || ast::IndexExpr::cast(node)
- .and_then(|expr| expr.index())
- .is_some_and(|expr| expr.syntax() == it)
- };
// We do not want to generate path completions when we are sandwiched between an item decl signature and its body.
// ex. trait Foo $0 {}
@@ -1429,7 +1410,7 @@ fn classify_name_ref<'db>(
.find_map(ast::LetStmt::cast)
.is_some_and(|it| it.semicolon_token().is_none())
|| after_incomplete_let && incomplete_expr_stmt.unwrap_or(true) && !before_else_kw;
- let in_value = is_in_value(it);
+ let in_value = is_in_value(&expr);
let impl_ = fetch_immediate_impl_or_trait(sema, original_file, expr.syntax())
.and_then(Either::left);
@@ -2094,12 +2075,12 @@ fn next_non_trivia_token(e: impl Into<SyntaxElement>) -> Option<SyntaxToken> {
}
fn next_non_trivia_sibling(ele: SyntaxElement) -> Option<SyntaxElement> {
- let mut e = ele.next_sibling_or_token();
- while let Some(inner) = e {
- if !inner.kind().is_trivia() {
- return Some(inner);
+ let mut e = ele;
+ while let Some(next) = e.next_sibling_or_token() {
+ if !next.kind().is_trivia() {
+ return Some(next);
} else {
- e = inner.next_sibling_or_token();
+ e = next;
}
}
None