@@ -87,32 +87,34 @@ pub(crate) fn apply_demorgan(acc: &mut Assists, ctx: &AssistContext<'_>) -> Opti
87
87
}
88
88
}
89
89
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 ( ) ?;
102
91
103
92
acc. add (
104
93
AssistId ( "apply_demorgan" , AssistKind :: RefactorRewrite ) ,
105
94
"Apply De Morgan's law" ,
106
95
op_range,
107
96
|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
+
108
110
if let Some ( paren_expr) = paren_expr {
109
111
if let Some ( neg_expr) = neg_expr {
110
112
cov_mark:: hit!( demorgan_double_negation) ;
111
113
edit. replace_ast ( ast:: Expr :: PrefixExpr ( neg_expr) , demorganed. into ( ) ) ;
112
114
} else {
113
115
cov_mark:: hit!( demorgan_double_parens) ;
114
116
ted:: insert_all_raw (
115
- Position :: before ( demorganed . lhs ( ) . unwrap ( ) . syntax ( ) ) ,
117
+ Position :: before ( dm_lhs . syntax ( ) ) ,
116
118
vec ! [
117
119
syntax:: NodeOrToken :: Token ( ast:: make:: token( SyntaxKind :: BANG ) ) ,
118
120
syntax:: NodeOrToken :: Token ( ast:: make:: token( SyntaxKind :: L_PAREN ) ) ,
@@ -128,7 +130,7 @@ pub(crate) fn apply_demorgan(acc: &mut Assists, ctx: &AssistContext<'_>) -> Opti
128
130
}
129
131
} else {
130
132
ted:: insert_all_raw (
131
- Position :: before ( demorganed . lhs ( ) . unwrap ( ) . syntax ( ) ) ,
133
+ Position :: before ( dm_lhs . syntax ( ) ) ,
132
134
vec ! [
133
135
syntax:: NodeOrToken :: Token ( ast:: make:: token( SyntaxKind :: BANG ) ) ,
134
136
syntax:: NodeOrToken :: Token ( ast:: make:: token( SyntaxKind :: L_PAREN ) ) ,
0 commit comments