From aa1234e02b1166c57dd2a3cd27fd0b0b3c6cba7e Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Fri, 7 Feb 2020 12:07:38 +0100 Subject: Generalize invert_if to just always work --- crates/ra_assists/src/assists/apply_demorgan.rs | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'crates/ra_assists/src/assists/apply_demorgan.rs') diff --git a/crates/ra_assists/src/assists/apply_demorgan.rs b/crates/ra_assists/src/assists/apply_demorgan.rs index dac6280ad..ba08a8223 100644 --- a/crates/ra_assists/src/assists/apply_demorgan.rs +++ b/crates/ra_assists/src/assists/apply_demorgan.rs @@ -31,12 +31,14 @@ pub(crate) fn apply_demorgan(ctx: AssistCtx) -> Option { if !cursor_in_range { return None; } + let lhs = expr.lhs()?; let lhs_range = lhs.syntax().text_range(); + let not_lhs = invert_boolean_expression(lhs); + let rhs = expr.rhs()?; let rhs_range = rhs.syntax().text_range(); - let not_lhs = invert_boolean_expression(&lhs)?; - let not_rhs = invert_boolean_expression(&rhs)?; + let not_rhs = invert_boolean_expression(rhs); ctx.add_assist(AssistId("apply_demorgan"), "Apply De Morgan's law", |edit| { edit.target(op_range); @@ -77,12 +79,12 @@ mod tests { } #[test] - fn demorgan_doesnt_apply_with_cursor_not_on_op() { - check_assist_not_applicable(apply_demorgan, "fn f() { <|> !x || !x }") + fn demorgan_general_case() { + check_assist(apply_demorgan, "fn f() { x ||<|> x }", "fn f() { !(!x &&<|> !x) }") } #[test] - fn demorgan_doesnt_apply_when_operands_arent_negated_already() { - check_assist_not_applicable(apply_demorgan, "fn f() { x ||<|> x }") + fn demorgan_doesnt_apply_with_cursor_not_on_op() { + check_assist_not_applicable(apply_demorgan, "fn f() { <|> !x || !x }") } } -- cgit v1.2.3