2
2
//! This assist transforms boolean expressions of the form `!a || !b` into
3
3
//! `!(a && b)`.
4
4
use hir:: db:: HirDatabase ;
5
- use ra_syntax:: SyntaxNode ;
6
5
use ra_syntax:: ast:: { AstNode , BinExpr , BinOp , Expr , PrefixOp } ;
6
+ use ra_syntax:: SyntaxNode ;
7
7
8
8
use crate :: { Assist , AssistCtx , AssistId } ;
9
9
@@ -25,16 +25,16 @@ fn undo_negation(node: SyntaxNode) -> Option<String> {
25
25
let rhs = bin. rhs ( ) ?. syntax ( ) . text ( ) ;
26
26
Some ( format ! ( "{} == {}" , lhs, rhs) )
27
27
}
28
- _ => None
29
- }
28
+ _ => None ,
29
+ } ,
30
30
Expr :: PrefixExpr ( pe) => match pe. op_kind ( ) ? {
31
31
PrefixOp :: Not => {
32
32
let child = pe. expr ( ) ?. syntax ( ) . text ( ) ;
33
33
Some ( String :: from ( child) )
34
34
}
35
- _ => None
36
- }
37
- _ => None
35
+ _ => None ,
36
+ } ,
37
+ _ => None ,
38
38
}
39
39
}
40
40
@@ -60,7 +60,6 @@ pub(crate) fn apply_demorgan(mut ctx: AssistCtx<impl HirDatabase>) -> Option<Ass
60
60
let not_lhs = undo_negation ( lhs) ?;
61
61
let not_rhs = undo_negation ( rhs) ?;
62
62
63
-
64
63
ctx. add_action ( AssistId ( "apply_demorgan" ) , "apply demorgan's law" , |edit| {
65
64
edit. target ( op_range) ;
66
65
edit. replace ( op_range, opposite_op) ;
@@ -78,29 +77,17 @@ mod tests {
78
77
79
78
#[ test]
80
79
fn demorgan_turns_and_into_or ( ) {
81
- check_assist (
82
- apply_demorgan,
83
- "fn f() { !x &&<|> !x }" ,
84
- "fn f() { !(x ||<|> x) }"
85
- )
80
+ check_assist ( apply_demorgan, "fn f() { !x &&<|> !x }" , "fn f() { !(x ||<|> x) }" )
86
81
}
87
82
88
83
#[ test]
89
84
fn demorgan_turns_or_into_and ( ) {
90
- check_assist (
91
- apply_demorgan,
92
- "fn f() { !x ||<|> !x }" ,
93
- "fn f() { !(x &&<|> x) }"
94
- )
85
+ check_assist ( apply_demorgan, "fn f() { !x ||<|> !x }" , "fn f() { !(x &&<|> x) }" )
95
86
}
96
87
97
88
#[ test]
98
89
fn demorgan_removes_inequality ( ) {
99
- check_assist (
100
- apply_demorgan,
101
- "fn f() { x != x ||<|> !x }" ,
102
- "fn f() { !(x == x &&<|> x) }"
103
- )
90
+ check_assist ( apply_demorgan, "fn f() { x != x ||<|> !x }" , "fn f() { !(x == x &&<|> x) }" )
104
91
}
105
92
106
93
#[ test]
0 commit comments