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

+27 -21
+27 -21
lib/src/lints/empty_pattern.rs
··· 41 41 42 42 impl Rule for EmptyPattern { 43 43 fn validate(&self, node: &SyntaxElement, _sess: &SessionInfo) -> Option<Report> { 44 - if let NodeOrToken::Node(node) = node 45 - && let Some(lambda_expr) = Lambda::cast(node.clone()) 46 - && let Some(arg) = lambda_expr.arg() 47 - && let Some(body) = lambda_expr.body() 48 - && let Some(pattern) = Pattern::cast(arg) 49 - // no patterns within `{ }` 50 - && pattern.entries().count() == 0 51 - // pattern is not bound 52 - && pattern.at().is_none() 53 - // not a nixos module 54 - && !is_module(&body) 55 - { 56 - let at = pattern.node().text_range(); 57 - let message = "This pattern is empty, use `_` instead"; 58 - let replacement = make::ident("_").node().clone(); 59 - Some( 60 - self.report() 61 - .suggest(at, message, Suggestion::new(at, replacement)), 62 - ) 63 - } else { 64 - None 44 + let NodeOrToken::Node(node) = node else { 45 + return None; 46 + }; 47 + 48 + let lambda_expr = Lambda::cast(node.clone())?; 49 + let pattern = Pattern::cast(lambda_expr.arg()?)?; 50 + 51 + // no patterns within `{ }` 52 + if pattern.entries().count() != 0 { 53 + return None; 65 54 } 55 + 56 + // pattern is not bound 57 + if pattern.at().is_some() { 58 + return None; 59 + } 60 + 61 + if is_module(&lambda_expr.body()?) { 62 + return None; 63 + } 64 + 65 + let at = pattern.node().text_range(); 66 + let message = "This pattern is empty, use `_` instead"; 67 + let replacement = make::ident("_").node().clone(); 68 + Some( 69 + self.report() 70 + .suggest(at, message, Suggestion::new(at, replacement)), 71 + ) 66 72 } 67 73 } 68 74