From 45de97dae7a020d2eb2eca3a6957883bd3b6fed4 Mon Sep 17 00:00:00 2001 From: "Shahar \"Dawn\" Or" Date: Sat, 30 Aug 2025 21:00:06 +0700 Subject: [PATCH] refactor(legacy_let_syntax): let-else and try-expression --- lib/src/lints/legacy_let_syntax.rs | 59 +++++++++++++++++------------- 1 file changed, 33 insertions(+), 26 deletions(-) diff --git a/lib/src/lints/legacy_let_syntax.rs b/lib/src/lints/legacy_let_syntax.rs index 7e4b96b..85fa8dd 100644 --- a/lib/src/lints/legacy_let_syntax.rs +++ b/lib/src/lints/legacy_let_syntax.rs @@ -44,37 +44,44 @@ struct ManualInherit; impl Rule for ManualInherit { fn validate(&self, node: &SyntaxElement, _sess: &SessionInfo) -> Option { - if let NodeOrToken::Node(node) = node - && let Some(legacy_let) = LegacyLet::cast(node.clone()) - && legacy_let - .entries() - .any(|kv| matches!(kv.key(), Some(k) if key_is_ident(&k, "body"))) - { - let inherits = legacy_let.inherits(); - let entries = legacy_let.entries(); - let attrset = make::attrset(inherits, entries, true); - let parenthesized = make::parenthesize(attrset.node()); - let selected = make::select(parenthesized.node(), make::ident("body").node()); + let NodeOrToken::Node(node) = node else { + return None; + }; - let at = node.text_range(); - let message = "Prefer `rec` over undocumented `let` syntax"; - let replacement = selected.node().clone(); + let legacy_let = LegacyLet::cast(node.clone())?; - Some( - self.report() - .suggest(at, message, Suggestion::with_replacement(at, replacement)), - ) - } else { - None + if !legacy_let + .entries() + .any(|kv| matches!(kv.key(), Some(k) if key_is_ident(&k, "body"))) + { + return None; } + + let inherits = legacy_let.inherits(); + let entries = legacy_let.entries(); + let attrset = make::attrset(inherits, entries, true); + let parenthesized = make::parenthesize(attrset.node()); + let selected = make::select(parenthesized.node(), make::ident("body").node()); + + let at = node.text_range(); + let message = "Prefer `rec` over undocumented `let` syntax"; + let replacement = selected.node().clone(); + + Some( + self.report() + .suggest(at, message, Suggestion::with_replacement(at, replacement)), + ) } } fn key_is_ident(key_path: &Key, ident: &str) -> bool { - if let Some(key_node) = key_path.path().next() { - if let Some(key) = Ident::cast(key_node) { - return key.as_str() == ident; - } - } - false + let Some(key_node) = key_path.path().next() else { + return false; + }; + + let Some(key) = Ident::cast(key_node) else { + return false; + }; + + key.as_str() == ident } -- 2.51.2