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(manual_inherit): modernize

+24 -20
+24 -20
lib/src/lints/manual_inherit.rs
··· 40 40 41 41 impl Rule for ManualInherit { 42 42 fn validate(&self, node: &SyntaxElement, _sess: &SessionInfo) -> Option<Report> { 43 - if let NodeOrToken::Node(node) = node 44 - && let Some(key_value_stmt) = KeyValue::cast(node.clone()) 45 - && let mut key_path = key_value_stmt.key()?.path() 46 - && let Some(key_node) = key_path.next() 47 - // ensure that path has exactly one component 48 - && key_path.next().is_none() 49 - && let Some(key) = Ident::cast(key_node) 43 + let NodeOrToken::Node(node) = node else { 44 + return None; 45 + }; 50 46 51 - && let Some(value_node) = key_value_stmt.value() 52 - && let Some(value) = Ident::cast(value_node) 47 + let key = KeyValue::cast(node.clone())?.key()?; 48 + let mut key_path = key.path(); 49 + let key_node = key_path.next()?; 53 50 54 - && key.as_str() == value.as_str() 55 - { 56 - let at = node.text_range(); 57 - let replacement = make::inherit_stmt(&[key]).node().clone(); 58 - let message = "This assignment is better written with `inherit`"; 59 - Some( 60 - self.report() 61 - .suggest(at, message, Suggestion::new(at, replacement)), 62 - ) 63 - } else { 64 - None 51 + if key_path.next().is_some() { 52 + return None; 65 53 } 54 + 55 + let key = Ident::cast(key_node)?; 56 + let value_node = KeyValue::cast(node.clone())?.value()?; 57 + let value = Ident::cast(value_node)?; 58 + 59 + if key.as_str() != value.as_str() { 60 + return None; 61 + } 62 + 63 + let replacement = make::inherit_stmt(&[key]).node().clone(); 64 + 65 + Some(self.report().suggest( 66 + node.text_range(), 67 + "This assignment is better written with `inherit`", 68 + Suggestion::new(node.text_range(), replacement), 69 + )) 66 70 } 67 71 }