Lints and suggestions for the Nix programming language
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

refactor(bool_simplification): let-else and try-expression

+27 -20
+27 -20
lib/src/lints/bool_simplification.rs
··· 32 32 33 33 impl Rule for BoolSimplification { 34 34 fn validate(&self, node: &SyntaxElement, _sess: &SessionInfo) -> Option<Report> { 35 - if let NodeOrToken::Node(node) = node 36 - && let Some(unary_expr) = UnaryOp::cast(node.clone()) 37 - && unary_expr.operator() == UnaryOpKind::Invert 38 - && let Some(value_expr) = unary_expr.value() 39 - && let Some(paren_expr) = Paren::cast(value_expr) 40 - && let Some(inner_expr) = paren_expr.inner() 41 - && let Some(bin_expr) = BinOp::cast(inner_expr) 42 - && let Some(BinOpKind::Equal) = bin_expr.operator() 43 - { 44 - let at = node.text_range(); 45 - let message = "Try `!=` instead of `!(... == ...)`"; 35 + let NodeOrToken::Node(node) = node else { 36 + return None; 37 + }; 46 38 47 - let lhs = bin_expr.lhs()?; 48 - let rhs = bin_expr.rhs()?; 49 - let replacement = make::binary(&lhs, "!=", &rhs).node().clone(); 50 - Some( 51 - self.report() 52 - .suggest(at, message, Suggestion::new(at, replacement)), 53 - ) 54 - } else { 55 - None 39 + let unary_expr = UnaryOp::cast(node.clone())?; 40 + 41 + if unary_expr.operator() != UnaryOpKind::Invert { 42 + return None; 56 43 } 44 + 45 + let value_expr = unary_expr.value()?; 46 + let paren_expr = Paren::cast(value_expr)?; 47 + let inner_expr = paren_expr.inner()?; 48 + let bin_expr = BinOp::cast(inner_expr)?; 49 + 50 + let Some(BinOpKind::Equal) = bin_expr.operator() else { 51 + return None; 52 + }; 53 + 54 + let at = node.text_range(); 55 + let message = "Try `!=` instead of `!(... == ...)`"; 56 + 57 + let lhs = bin_expr.lhs()?; 58 + let rhs = bin_expr.rhs()?; 59 + let replacement = make::binary(&lhs, "!=", &rhs).node().clone(); 60 + Some( 61 + self.report() 62 + .suggest(at, message, Suggestion::new(at, replacement)), 63 + ) 57 64 } 58 65 }