diff options
| author | Ali Bektas <bektasali@protonmail.com> | 2023-08-08 15:54:58 +0200 |
|---|---|---|
| committer | Ali Bektas <bektasali@protonmail.com> | 2023-08-08 15:54:58 +0200 |
| commit | 17f3055803f8d6551b746192a4ba78edb5b62995 (patch) | |
| tree | 866b59a6727473f48f2dc11880bb6681470fd557 | |
| parent | ef5c6daf6ec0797c0e4c3b323853390f15078e70 (diff) | |
| download | rust-17f3055803f8d6551b746192a4ba78edb5b62995.tar.gz rust-17f3055803f8d6551b746192a4ba78edb5b62995.zip | |
Rewrite DeMorgan v2
| -rw-r--r-- | crates/ide-assists/src/handlers/apply_demorgan.rs | 30 |
1 files changed, 16 insertions, 14 deletions
diff --git a/crates/ide-assists/src/handlers/apply_demorgan.rs b/crates/ide-assists/src/handlers/apply_demorgan.rs index 05847a864f3..66bc2f6dadc 100644 --- a/crates/ide-assists/src/handlers/apply_demorgan.rs +++ b/crates/ide-assists/src/handlers/apply_demorgan.rs @@ -87,24 +87,26 @@ pub(crate) fn apply_demorgan(acc: &mut Assists, ctx: &AssistContext<'_>) -> Opti } } - let paren_expr = bin_expr.syntax().parent().and_then(ast::ParenExpr::cast); - let neg_expr = paren_expr - .clone() - .and_then(|paren_expr| paren_expr.syntax().parent()) - .and_then(ast::PrefixExpr::cast) - .and_then(|prefix_expr| { - if prefix_expr.op_kind().unwrap() == ast::UnaryOp::Not { - Some(prefix_expr) - } else { - None - } - }); + let dm_lhs = demorganed.lhs()?; acc.add( AssistId("apply_demorgan", AssistKind::RefactorRewrite), "Apply De Morgan's law", op_range, |edit| { + let paren_expr = bin_expr.syntax().parent().and_then(ast::ParenExpr::cast); + let neg_expr = paren_expr + .clone() + .and_then(|paren_expr| paren_expr.syntax().parent()) + .and_then(ast::PrefixExpr::cast) + .and_then(|prefix_expr| { + if prefix_expr.op_kind()? == ast::UnaryOp::Not { + Some(prefix_expr) + } else { + None + } + }); + if let Some(paren_expr) = paren_expr { if let Some(neg_expr) = neg_expr { cov_mark::hit!(demorgan_double_negation); @@ -112,7 +114,7 @@ pub(crate) fn apply_demorgan(acc: &mut Assists, ctx: &AssistContext<'_>) -> Opti } else { cov_mark::hit!(demorgan_double_parens); ted::insert_all_raw( - Position::before(demorganed.lhs().unwrap().syntax()), + Position::before(dm_lhs.syntax()), vec