Unnamed repository; edit this file 'description' to name the repository.
-rw-r--r--crates/ide-assists/src/handlers/apply_demorgan.rs16
1 files changed, 15 insertions, 1 deletions
diff --git a/crates/ide-assists/src/handlers/apply_demorgan.rs b/crates/ide-assists/src/handlers/apply_demorgan.rs
index d193e8a9d8..80d0a6da12 100644
--- a/crates/ide-assists/src/handlers/apply_demorgan.rs
+++ b/crates/ide-assists/src/handlers/apply_demorgan.rs
@@ -3,7 +3,7 @@ use std::collections::VecDeque;
use ide_db::{
assists::GroupLabel,
famous_defs::FamousDefs,
- syntax_helpers::node_ext::{for_each_tail_expr, walk_expr},
+ syntax_helpers::node_ext::{for_each_tail_expr, is_pattern_cond, walk_expr},
};
use syntax::{
NodeOrToken, SyntaxKind, T,
@@ -69,6 +69,10 @@ pub(crate) fn apply_demorgan(acc: &mut Assists, ctx: &AssistContext<'_>) -> Opti
}
}
+ if is_pattern_cond(bin_expr.clone().into()) {
+ return None;
+ }
+
let op = bin_expr.op_kind()?;
let (inv_token, prec) = match op {
ast::BinaryOp::LogicOp(ast::LogicOp::And) => (SyntaxKind::PIPE2, ExprPrecedence::LOr),
@@ -376,6 +380,16 @@ fn f() { !(S <= S || S < S) }
}
#[test]
+ fn demorgan_doesnt_handles_pattern() {
+ check_assist_not_applicable(
+ apply_demorgan,
+ r#"
+fn f() { if let 1 = 1 &&$0 true { } }
+"#,
+ );
+ }
+
+ #[test]
fn demorgan_on_not() {
check_assist(
apply_demorgan,