Unnamed repository; edit this file 'description' to name the repository.
Merge pull request #21495 from A4-Tacks/comp-else-before-tuple
Fix not complete 'else' before tuple
Chayim Refael Friedman 3 months ago
parent 1f7625d · parent cc725f8 · commit cf38ac2
-rw-r--r--crates/ide-completion/src/context/analysis.rs7
-rw-r--r--crates/ide-completion/src/tests/expression.rs26
2 files changed, 30 insertions, 3 deletions
diff --git a/crates/ide-completion/src/context/analysis.rs b/crates/ide-completion/src/context/analysis.rs
index 0db93b0837..8842d29c8d 100644
--- a/crates/ide-completion/src/context/analysis.rs
+++ b/crates/ide-completion/src/context/analysis.rs
@@ -2030,9 +2030,10 @@ fn is_after_if_expr(node: SyntaxNode) -> bool {
Some(stmt) => stmt.syntax().clone(),
None => node,
};
- let prev_sibling =
- non_trivia_sibling(node.into(), Direction::Prev).and_then(NodeOrToken::into_node);
- iter::successors(prev_sibling, |it| it.last_child_or_token()?.into_node())
+ let Some(prev_token) = previous_non_trivia_token(node) else { return false };
+ prev_token
+ .parent_ancestors()
+ .take_while(|it| it.text_range().end() == prev_token.text_range().end())
.find_map(ast::IfExpr::cast)
.is_some()
}
diff --git a/crates/ide-completion/src/tests/expression.rs b/crates/ide-completion/src/tests/expression.rs
index ff005a2921..df39591a33 100644
--- a/crates/ide-completion/src/tests/expression.rs
+++ b/crates/ide-completion/src/tests/expression.rs
@@ -2182,6 +2182,32 @@ fn foo() { match () { () => if foo {} $0, _ => (), } }
kw ref
"#]],
);
+ check(
+ r#"
+fn foo() -> (i32, i32) { if foo {} el$0 (2, 3) }
+"#,
+ expect![[r#"
+ fn foo fn() -> (i32, i32)
+ bt u32 u32
+ kw const
+ kw crate::
+ kw else
+ kw else if
+ kw false
+ kw for
+ kw if
+ kw if let
+ kw loop
+ kw match
+ kw return
+ kw self::
+ kw true
+ kw unsafe
+ kw while
+ kw while let
+ ex foo()
+ "#]],
+ );
// FIXME: support else completion after ast::RecordExprField
}