Skip to content
This repository was archived by the owner on May 28, 2025. It is now read-only.

Commit 17f3055

Browse files
committed
Rewrite DeMorgan v2
1 parent ef5c6da commit 17f3055

File tree

1 file changed

+16
-14
lines changed

1 file changed

+16
-14
lines changed

crates/ide-assists/src/handlers/apply_demorgan.rs

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -87,32 +87,34 @@ pub(crate) fn apply_demorgan(acc: &mut Assists, ctx: &AssistContext<'_>) -> Opti
8787
}
8888
}
8989

90-
let paren_expr = bin_expr.syntax().parent().and_then(ast::ParenExpr::cast);
91-
let neg_expr = paren_expr
92-
.clone()
93-
.and_then(|paren_expr| paren_expr.syntax().parent())
94-
.and_then(ast::PrefixExpr::cast)
95-
.and_then(|prefix_expr| {
96-
if prefix_expr.op_kind().unwrap() == ast::UnaryOp::Not {
97-
Some(prefix_expr)
98-
} else {
99-
None
100-
}
101-
});
90+
let dm_lhs = demorganed.lhs()?;
10291

10392
acc.add(
10493
AssistId("apply_demorgan", AssistKind::RefactorRewrite),
10594
"Apply De Morgan's law",
10695
op_range,
10796
|edit| {
97+
let paren_expr = bin_expr.syntax().parent().and_then(ast::ParenExpr::cast);
98+
let neg_expr = paren_expr
99+
.clone()
100+
.and_then(|paren_expr| paren_expr.syntax().parent())
101+
.and_then(ast::PrefixExpr::cast)
102+
.and_then(|prefix_expr| {
103+
if prefix_expr.op_kind()? == ast::UnaryOp::Not {
104+
Some(prefix_expr)
105+
} else {
106+
None
107+
}
108+
});
109+
108110
if let Some(paren_expr) = paren_expr {
109111
if let Some(neg_expr) = neg_expr {
110112
cov_mark::hit!(demorgan_double_negation);
111113
edit.replace_ast(ast::Expr::PrefixExpr(neg_expr), demorganed.into());
112114
} else {
113115
cov_mark::hit!(demorgan_double_parens);
114116
ted::insert_all_raw(
115-
Position::before(demorganed.lhs().unwrap().syntax()),
117+
Position::before(dm_lhs.syntax()),
116118
vec![
117119
syntax::NodeOrToken::Token(ast::make::token(SyntaxKind::BANG)),
118120
syntax::NodeOrToken::Token(ast::make::token(SyntaxKind::L_PAREN)),
@@ -128,7 +130,7 @@ pub(crate) fn apply_demorgan(acc: &mut Assists, ctx: &AssistContext<'_>) -> Opti
128130
}
129131
} else {
130132
ted::insert_all_raw(
131-
Position::before(demorganed.lhs().unwrap().syntax()),
133+
Position::before(dm_lhs.syntax()),
132134
vec![
133135
syntax::NodeOrToken::Token(ast::make::token(SyntaxKind::BANG)),
134136
syntax::NodeOrToken::Token(ast::make::token(SyntaxKind::L_PAREN)),

0 commit comments

Comments
 (0)