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_comparison): replace a bool with enum

Co-authored-by: x10an14 <x10an14@users.noreply.github.com>

+25 -8
+25 -8
lib/src/lints/bool_comparison.rs
··· 40 40 }; 41 41 let bin_expr = BinOp::cast(node.clone())?; 42 42 let (lhs, rhs) = (bin_expr.lhs()?, bin_expr.rhs()?); 43 - let op = bin_expr.operator()?; 44 - 45 - let (BinOpKind::Equal | BinOpKind::NotEqual) = op else { 46 - return None; 47 - }; 43 + let op = EqualityBinOpKind::try_from(bin_expr.operator()?)?; 48 44 49 45 let (bool_side, non_bool_side): (NixBoolean, &SyntaxNode) = 50 46 match (boolean_ident(&lhs), boolean_ident(&rhs)) { ··· 53 49 (Some(bool), _) => (bool, &rhs), 54 50 }; 55 51 56 - let replacement = match (&bool_side, op == BinOpKind::Equal) { 57 - (NixBoolean::True, true) | (NixBoolean::False, false) => { 52 + let replacement = match (&bool_side, op) { 53 + (NixBoolean::True, EqualityBinOpKind::Equal) 54 + | (NixBoolean::False, EqualityBinOpKind::NotEqual) => { 58 55 // `a == true`, `a != false` replace with just `a` 59 56 non_bool_side.clone() 60 57 } 61 - (NixBoolean::True, false) | (NixBoolean::False, true) => { 58 + (NixBoolean::True, EqualityBinOpKind::NotEqual) 59 + | (NixBoolean::False, EqualityBinOpKind::Equal) => { 62 60 // `a != true`, `a == false` replace with `!a` 63 61 match non_bool_side.kind() { 64 62 SyntaxKind::NODE_APPLY | SyntaxKind::NODE_PAREN | SyntaxKind::NODE_IDENT => { ··· 94 92 enum NixBoolean { 95 93 True, 96 94 False, 95 + } 96 + 97 + #[derive(Debug)] 98 + enum EqualityBinOpKind { 99 + NotEqual, 100 + Equal, 101 + } 102 + 103 + impl EqualityBinOpKind { 104 + /// Try to create from a `BinOpKind` 105 + /// 106 + /// Returns an option, not a Result 107 + fn try_from(bin_op_kind: BinOpKind) -> Option<Self> { 108 + match bin_op_kind { 109 + BinOpKind::Equal => Some(Self::Equal), 110 + BinOpKind::NotEqual => Some(Self::NotEqual), 111 + _ => None, 112 + } 113 + } 97 114 } 98 115 99 116 impl std::fmt::Display for NixBoolean {