@@ -21,7 +21,7 @@ declare_clippy_lint! {
21
21
/// ```rust
22
22
/// struct Cookie;
23
23
/// ```
24
- #[ clippy:: version = "1.61 .0" ]
24
+ #[ clippy:: version = "1.62 .0" ]
25
25
pub UNIT_LIKE_STRUCT_BRACKETS ,
26
26
style,
27
27
"finds struct declarations with empty brackets"
@@ -32,7 +32,9 @@ impl EarlyLintPass for UnitLikeStructBrackets {
32
32
fn check_item ( & mut self , cx : & EarlyContext < ' _ > , item : & Item ) {
33
33
let span_after_ident = item. span . with_lo ( item. ident . span . hi ( ) ) ;
34
34
35
- if let ItemKind :: Struct ( var_data, _) = & item. kind && has_no_fields ( cx, var_data, span_after_ident) {
35
+ if let ItemKind :: Struct ( var_data, _) = & item. kind
36
+ && !is_unit_like_struct ( var_data)
37
+ && has_no_fields ( cx, var_data, span_after_ident) {
36
38
span_lint_and_then (
37
39
cx,
38
40
UNIT_LIKE_STRUCT_BRACKETS ,
@@ -50,23 +52,20 @@ impl EarlyLintPass for UnitLikeStructBrackets {
50
52
}
51
53
}
52
54
53
- fn has_fields_in_hir ( var_data : & VariantData ) -> bool {
54
- match var_data {
55
- VariantData :: Struct ( defs, _) | VariantData :: Tuple ( defs, _) => !defs. is_empty ( ) ,
56
- VariantData :: Unit ( _) => true ,
57
- }
58
- }
59
-
60
55
fn has_no_ident_token ( braces_span_str : & str ) -> bool {
61
56
!rustc_lexer:: tokenize ( braces_span_str) . any ( |t| t. kind == TokenKind :: Ident )
62
57
}
63
58
59
+ fn is_unit_like_struct ( var_data : & VariantData ) -> bool {
60
+ matches ! ( var_data, VariantData :: Unit ( _) )
61
+ }
62
+
64
63
fn has_no_fields ( cx : & EarlyContext < ' _ > , var_data : & VariantData , braces_span : Span ) -> bool {
65
- if has_fields_in_hir ( var_data) {
64
+ if ! var_data. fields ( ) . is_empty ( ) {
66
65
return false ;
67
66
}
68
67
69
- // there might still be field declarations hidden from HIR
68
+ // there might still be field declarations hidden from the AST
70
69
// (conditionaly compiled code using #[cfg(..)])
71
70
72
71
let Some ( braces_span_str) = snippet_opt ( cx, braces_span) else {
0 commit comments