@@ -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