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(legacy_let_syntax): let-else and try-expression

+33 -26
+33 -26
lib/src/lints/legacy_let_syntax.rs
··· 44 44 45 45 impl Rule for ManualInherit { 46 46 fn validate(&self, node: &SyntaxElement, _sess: &SessionInfo) -> Option<Report> { 47 - if let NodeOrToken::Node(node) = node 48 - && let Some(legacy_let) = LegacyLet::cast(node.clone()) 49 - && legacy_let 50 - .entries() 51 - .any(|kv| matches!(kv.key(), Some(k) if key_is_ident(&k, "body"))) 47 + let NodeOrToken::Node(node) = node else { 48 + return None; 49 + }; 50 + 51 + let legacy_let = LegacyLet::cast(node.clone())?; 52 + 53 + if !legacy_let 54 + .entries() 55 + .any(|kv| matches!(kv.key(), Some(k) if key_is_ident(&k, "body"))) 52 56 { 53 - let inherits = legacy_let.inherits(); 54 - let entries = legacy_let.entries(); 55 - let attrset = make::attrset(inherits, entries, true); 56 - let parenthesized = make::parenthesize(attrset.node()); 57 - let selected = make::select(parenthesized.node(), make::ident("body").node()); 57 + return None; 58 + } 59 + 60 + let inherits = legacy_let.inherits(); 61 + let entries = legacy_let.entries(); 62 + let attrset = make::attrset(inherits, entries, true); 63 + let parenthesized = make::parenthesize(attrset.node()); 64 + let selected = make::select(parenthesized.node(), make::ident("body").node()); 58 65 59 - let at = node.text_range(); 60 - let message = "Prefer `rec` over undocumented `let` syntax"; 61 - let replacement = selected.node().clone(); 66 + let at = node.text_range(); 67 + let message = "Prefer `rec` over undocumented `let` syntax"; 68 + let replacement = selected.node().clone(); 62 69 63 - Some( 64 - self.report() 65 - .suggest(at, message, Suggestion::with_replacement(at, replacement)), 66 - ) 67 - } else { 68 - None 69 - } 70 + Some( 71 + self.report() 72 + .suggest(at, message, Suggestion::with_replacement(at, replacement)), 73 + ) 70 74 } 71 75 } 72 76 73 77 fn key_is_ident(key_path: &Key, ident: &str) -> bool { 74 - if let Some(key_node) = key_path.path().next() { 75 - if let Some(key) = Ident::cast(key_node) { 76 - return key.as_str() == ident; 77 - } 78 - } 79 - false 78 + let Some(key_node) = key_path.path().next() else { 79 + return false; 80 + }; 81 + 82 + let Some(key) = Ident::cast(key_node) else { 83 + return false; 84 + }; 85 + 86 + key.as_str() == ident 80 87 }