Unnamed repository; edit this file 'description' to name the repository.
Merge pull request #21526 from A4-Tacks/comp-not-in-cond
fix: Fix not complete `.not` in condition
Chayim Refael Friedman 3 months ago
parent a84d92f · parent 48ab21e · commit 1433910
-rw-r--r--crates/ide-completion/src/completions/postfix.rs30
1 files changed, 29 insertions, 1 deletions
diff --git a/crates/ide-completion/src/completions/postfix.rs b/crates/ide-completion/src/completions/postfix.rs
index 4b244c9025..cffc44f8af 100644
--- a/crates/ide-completion/src/completions/postfix.rs
+++ b/crates/ide-completion/src/completions/postfix.rs
@@ -257,7 +257,6 @@ pub(crate) fn complete_postfix(
&format!("while {receiver_text} {{\n $0\n}}"),
)
.add_to(acc, ctx.db);
- postfix_snippet("not", "!expr", &format!("!{receiver_text}")).add_to(acc, ctx.db);
} else if let Some(trait_) = ctx.famous_defs().core_iter_IntoIterator()
&& receiver_ty.impls_trait(ctx.db, trait_, &[])
{
@@ -270,6 +269,10 @@ pub(crate) fn complete_postfix(
}
}
+ if receiver_ty.is_bool() || receiver_ty.is_unknown() {
+ postfix_snippet("not", "!expr", &format!("!{receiver_text}")).add_to(acc, ctx.db);
+ }
+
let block_should_be_wrapped = if let ast::Expr::BlockExpr(block) = dot_receiver {
block.modifier().is_some() || !block.is_standalone()
} else {
@@ -590,6 +593,31 @@ fn main() {
}
#[test]
+ fn postfix_completion_works_in_if_condition() {
+ check(
+ r#"
+fn foo(cond: bool) {
+ if cond.$0
+}
+"#,
+ expect![[r#"
+ sn box Box::new(expr)
+ sn call function(expr)
+ sn const const {}
+ sn dbg dbg!(expr)
+ sn dbgr dbg!(&expr)
+ sn deref *expr
+ sn let let
+ sn not !expr
+ sn ref &expr
+ sn refm &mut expr
+ sn return return expr
+ sn unsafe unsafe {}
+ "#]],
+ );
+ }
+
+ #[test]
fn postfix_type_filtering() {
check(
r#"