From 0b00dad4038ae504e84ddab2c3f803fc343bc153 Mon Sep 17 00:00:00 2001 From: "Shahar \"Dawn\" Or" Date: Mon, 25 Aug 2025 22:08:10 +0700 Subject: [PATCH] refactor(collapsible_let_in): use let-else and try-expression --- lib/src/lints/collapsible_let_in.rs | 71 +++++++++++++++-------------- 1 file changed, 36 insertions(+), 35 deletions(-) diff --git a/lib/src/lints/collapsible_let_in.rs b/lib/src/lints/collapsible_let_in.rs index 191e4e2..6939652 100644 --- a/lib/src/lints/collapsible_let_in.rs +++ b/lib/src/lints/collapsible_let_in.rs @@ -45,43 +45,44 @@ struct CollapsibleLetIn; impl Rule for CollapsibleLetIn { fn validate(&self, node: &SyntaxElement, _sess: &SessionInfo) -> Option { - if let NodeOrToken::Node(node) = node - && let Some(let_in_expr) = LetIn::cast(node.clone()) - && let Some(body) = let_in_expr.body() - && LetIn::cast(body.clone()).is_some() - { - let first_annotation = node.text_range(); - let first_message = "This `let in` expression contains a nested `let in` expression"; + let NodeOrToken::Node(node) = node else { + return None; + }; - let second_annotation = body.text_range(); - let second_message = "This `let in` expression is nested"; + let let_in_expr = LetIn::cast(node.clone())?; + let body = let_in_expr.body()?; - let replacement_at = { - let start = body - .siblings_with_tokens(Direction::Prev) - .find(|elem| elem.kind() == SyntaxKind::TOKEN_IN)? - .text_range() - .start(); - let end = body - .descendants_with_tokens() - .find(|elem| elem.kind() == SyntaxKind::TOKEN_LET)? - .text_range() - .end(); - TextRange::new(start, end) - }; - let replacement = make::empty().node().clone(); + LetIn::cast(body.clone())?; - Some( - self.report() - .diagnostic(first_annotation, first_message) - .suggest( - second_annotation, - second_message, - Suggestion::new(replacement_at, replacement), - ), - ) - } else { - None - } + let first_annotation = node.text_range(); + let first_message = "This `let in` expression contains a nested `let in` expression"; + + let second_annotation = body.text_range(); + let second_message = "This `let in` expression is nested"; + + let replacement_at = { + let start = body + .siblings_with_tokens(Direction::Prev) + .find(|elem| elem.kind() == SyntaxKind::TOKEN_IN)? + .text_range() + .start(); + let end = body + .descendants_with_tokens() + .find(|elem| elem.kind() == SyntaxKind::TOKEN_LET)? + .text_range() + .end(); + TextRange::new(start, end) + }; + let replacement = make::empty().node().clone(); + + Some( + self.report() + .diagnostic(first_annotation, first_message) + .suggest( + second_annotation, + second_message, + Suggestion::new(replacement_at, replacement), + ), + ) } } -- 2.51.2