Omit empty vec from snapshot
diff --git a/codegen/src/debug.rs b/codegen/src/debug.rs
index e2b516a..7795496 100644
--- a/codegen/src/debug.rs
+++ b/codegen/src/debug.rs
@@ -212,9 +212,17 @@
                 } else {
                     let val = quote!(&_val.#ident);
                     let format = format_field(&val, ty)?;
-                    Some(quote! {
+                    let mut call = quote! {
                         formatter.field(#f, #format);
-                    })
+                    };
+                    if let Type::Vec(_) | Type::Punctuated(_) = ty {
+                        call = quote! {
+                            if !_val.#ident.is_empty() {
+                                #call
+                            }
+                        };
+                    }
+                    Some(call)
                 }
             });
             quote! {
diff --git a/tests/debug/gen.rs b/tests/debug/gen.rs
index 78f08fd..d9aeee7 100644
--- a/tests/debug/gen.rs
+++ b/tests/debug/gen.rs
@@ -42,7 +42,9 @@
             }
             formatter.field("colon2_token", Print::ref_cast(val));
         }
-        formatter.field("args", Lite(&_val.args));
+        if !_val.args.is_empty() {
+            formatter.field("args", Lite(&_val.args));
+        }
         formatter.finish()
     }
 }
@@ -113,7 +115,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("Arm");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         if let Some(val) = &_val.leading_vert {
             #[derive(RefCast)]
             #[repr(transparent)]
@@ -126,7 +130,9 @@
             }
             formatter.field("leading_vert", Print::ref_cast(val));
         }
-        formatter.field("pats", Lite(&_val.pats));
+        if !_val.pats.is_empty() {
+            formatter.field("pats", Lite(&_val.pats));
+        }
         if let Some(val) = &_val.guard {
             #[derive(RefCast)]
             #[repr(transparent)]
@@ -353,7 +359,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("Block");
-        formatter.field("stmts", Lite(&_val.stmts));
+        if !_val.stmts.is_empty() {
+            formatter.field("stmts", Lite(&_val.stmts));
+        }
         formatter.finish()
     }
 }
@@ -361,7 +369,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("BoundLifetimes");
-        formatter.field("lifetimes", Lite(&_val.lifetimes));
+        if !_val.lifetimes.is_empty() {
+            formatter.field("lifetimes", Lite(&_val.lifetimes));
+        }
         formatter.finish()
     }
 }
@@ -369,7 +379,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ConstParam");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         formatter.field("ident", Lite(&_val.ident));
         formatter.field("ty", Lite(&_val.ty));
         if let Some(val) = &_val.eq_token {
@@ -408,7 +420,9 @@
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("Constraint");
         formatter.field("ident", Lite(&_val.ident));
-        formatter.field("bounds", Lite(&_val.bounds));
+        if !_val.bounds.is_empty() {
+            formatter.field("bounds", Lite(&_val.bounds));
+        }
         formatter.finish()
     }
 }
@@ -435,7 +449,9 @@
             }
             syn::Data::Enum(_val) => {
                 let mut formatter = formatter.debug_struct("Data::Enum");
-                formatter.field("variants", Lite(&_val.variants));
+                if !_val.variants.is_empty() {
+                    formatter.field("variants", Lite(&_val.variants));
+                }
                 formatter.finish()
             }
             syn::Data::Union(_val) => {
@@ -450,7 +466,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("DataEnum");
-        formatter.field("variants", Lite(&_val.variants));
+        if !_val.variants.is_empty() {
+            formatter.field("variants", Lite(&_val.variants));
+        }
         formatter.finish()
     }
 }
@@ -486,7 +504,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("DeriveInput");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         formatter.field("vis", Lite(&_val.vis));
         formatter.field("ident", Lite(&_val.ident));
         formatter.field("generics", Lite(&_val.generics));
@@ -500,33 +520,47 @@
         match _val {
             syn::Expr::Box(_val) => {
                 let mut formatter = formatter.debug_struct("Expr::Box");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 formatter.field("expr", Lite(&_val.expr));
                 formatter.finish()
             }
             syn::Expr::InPlace(_val) => {
                 let mut formatter = formatter.debug_struct("Expr::InPlace");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 formatter.field("place", Lite(&_val.place));
                 formatter.field("value", Lite(&_val.value));
                 formatter.finish()
             }
             syn::Expr::Array(_val) => {
                 let mut formatter = formatter.debug_struct("Expr::Array");
-                formatter.field("attrs", Lite(&_val.attrs));
-                formatter.field("elems", Lite(&_val.elems));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
+                if !_val.elems.is_empty() {
+                    formatter.field("elems", Lite(&_val.elems));
+                }
                 formatter.finish()
             }
             syn::Expr::Call(_val) => {
                 let mut formatter = formatter.debug_struct("Expr::Call");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 formatter.field("func", Lite(&_val.func));
-                formatter.field("args", Lite(&_val.args));
+                if !_val.args.is_empty() {
+                    formatter.field("args", Lite(&_val.args));
+                }
                 formatter.finish()
             }
             syn::Expr::MethodCall(_val) => {
                 let mut formatter = formatter.debug_struct("Expr::MethodCall");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 formatter.field("receiver", Lite(&_val.receiver));
                 formatter.field("method", Lite(&_val.method));
                 if let Some(val) = &_val.turbofish {
@@ -545,18 +579,26 @@
                     }
                     formatter.field("turbofish", Print::ref_cast(val));
                 }
-                formatter.field("args", Lite(&_val.args));
+                if !_val.args.is_empty() {
+                    formatter.field("args", Lite(&_val.args));
+                }
                 formatter.finish()
             }
             syn::Expr::Tuple(_val) => {
                 let mut formatter = formatter.debug_struct("Expr::Tuple");
-                formatter.field("attrs", Lite(&_val.attrs));
-                formatter.field("elems", Lite(&_val.elems));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
+                if !_val.elems.is_empty() {
+                    formatter.field("elems", Lite(&_val.elems));
+                }
                 formatter.finish()
             }
             syn::Expr::Binary(_val) => {
                 let mut formatter = formatter.debug_struct("Expr::Binary");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 formatter.field("left", Lite(&_val.left));
                 formatter.field("op", Lite(&_val.op));
                 formatter.field("right", Lite(&_val.right));
@@ -564,41 +606,55 @@
             }
             syn::Expr::Unary(_val) => {
                 let mut formatter = formatter.debug_struct("Expr::Unary");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 formatter.field("op", Lite(&_val.op));
                 formatter.field("expr", Lite(&_val.expr));
                 formatter.finish()
             }
             syn::Expr::Lit(_val) => {
                 let mut formatter = formatter.debug_struct("Expr::Lit");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 formatter.field("lit", Lite(&_val.lit));
                 formatter.finish()
             }
             syn::Expr::Cast(_val) => {
                 let mut formatter = formatter.debug_struct("Expr::Cast");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 formatter.field("expr", Lite(&_val.expr));
                 formatter.field("ty", Lite(&_val.ty));
                 formatter.finish()
             }
             syn::Expr::Type(_val) => {
                 let mut formatter = formatter.debug_struct("Expr::Type");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 formatter.field("expr", Lite(&_val.expr));
                 formatter.field("ty", Lite(&_val.ty));
                 formatter.finish()
             }
             syn::Expr::Let(_val) => {
                 let mut formatter = formatter.debug_struct("Expr::Let");
-                formatter.field("attrs", Lite(&_val.attrs));
-                formatter.field("pats", Lite(&_val.pats));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
+                if !_val.pats.is_empty() {
+                    formatter.field("pats", Lite(&_val.pats));
+                }
                 formatter.field("expr", Lite(&_val.expr));
                 formatter.finish()
             }
             syn::Expr::If(_val) => {
                 let mut formatter = formatter.debug_struct("Expr::If");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 formatter.field("cond", Lite(&_val.cond));
                 formatter.field("then_branch", Lite(&_val.then_branch));
                 if let Some(val) = &_val.else_branch {
@@ -621,7 +677,9 @@
             }
             syn::Expr::While(_val) => {
                 let mut formatter = formatter.debug_struct("Expr::While");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 if let Some(val) = &_val.label {
                     #[derive(RefCast)]
                     #[repr(transparent)]
@@ -644,7 +702,9 @@
             }
             syn::Expr::ForLoop(_val) => {
                 let mut formatter = formatter.debug_struct("Expr::ForLoop");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 if let Some(val) = &_val.label {
                     #[derive(RefCast)]
                     #[repr(transparent)]
@@ -668,7 +728,9 @@
             }
             syn::Expr::Loop(_val) => {
                 let mut formatter = formatter.debug_struct("Expr::Loop");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 if let Some(val) = &_val.label {
                     #[derive(RefCast)]
                     #[repr(transparent)]
@@ -690,14 +752,20 @@
             }
             syn::Expr::Match(_val) => {
                 let mut formatter = formatter.debug_struct("Expr::Match");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 formatter.field("expr", Lite(&_val.expr));
-                formatter.field("arms", Lite(&_val.arms));
+                if !_val.arms.is_empty() {
+                    formatter.field("arms", Lite(&_val.arms));
+                }
                 formatter.finish()
             }
             syn::Expr::Closure(_val) => {
                 let mut formatter = formatter.debug_struct("Expr::Closure");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 if let Some(val) = &_val.asyncness {
                     #[derive(RefCast)]
                     #[repr(transparent)]
@@ -734,20 +802,26 @@
                     }
                     formatter.field("capture", Print::ref_cast(val));
                 }
-                formatter.field("inputs", Lite(&_val.inputs));
+                if !_val.inputs.is_empty() {
+                    formatter.field("inputs", Lite(&_val.inputs));
+                }
                 formatter.field("output", Lite(&_val.output));
                 formatter.field("body", Lite(&_val.body));
                 formatter.finish()
             }
             syn::Expr::Unsafe(_val) => {
                 let mut formatter = formatter.debug_struct("Expr::Unsafe");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 formatter.field("block", Lite(&_val.block));
                 formatter.finish()
             }
             syn::Expr::Block(_val) => {
                 let mut formatter = formatter.debug_struct("Expr::Block");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 if let Some(val) = &_val.label {
                     #[derive(RefCast)]
                     #[repr(transparent)]
@@ -769,14 +843,18 @@
             }
             syn::Expr::Assign(_val) => {
                 let mut formatter = formatter.debug_struct("Expr::Assign");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 formatter.field("left", Lite(&_val.left));
                 formatter.field("right", Lite(&_val.right));
                 formatter.finish()
             }
             syn::Expr::AssignOp(_val) => {
                 let mut formatter = formatter.debug_struct("Expr::AssignOp");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 formatter.field("left", Lite(&_val.left));
                 formatter.field("op", Lite(&_val.op));
                 formatter.field("right", Lite(&_val.right));
@@ -784,21 +862,27 @@
             }
             syn::Expr::Field(_val) => {
                 let mut formatter = formatter.debug_struct("Expr::Field");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 formatter.field("base", Lite(&_val.base));
                 formatter.field("member", Lite(&_val.member));
                 formatter.finish()
             }
             syn::Expr::Index(_val) => {
                 let mut formatter = formatter.debug_struct("Expr::Index");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 formatter.field("expr", Lite(&_val.expr));
                 formatter.field("index", Lite(&_val.index));
                 formatter.finish()
             }
             syn::Expr::Range(_val) => {
                 let mut formatter = formatter.debug_struct("Expr::Range");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 if let Some(val) = &_val.from {
                     #[derive(RefCast)]
                     #[repr(transparent)]
@@ -836,7 +920,9 @@
             }
             syn::Expr::Path(_val) => {
                 let mut formatter = formatter.debug_struct("Expr::Path");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 if let Some(val) = &_val.qself {
                     #[derive(RefCast)]
                     #[repr(transparent)]
@@ -858,7 +944,9 @@
             }
             syn::Expr::Reference(_val) => {
                 let mut formatter = formatter.debug_struct("Expr::Reference");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 if let Some(val) = &_val.mutability {
                     #[derive(RefCast)]
                     #[repr(transparent)]
@@ -876,7 +964,9 @@
             }
             syn::Expr::Break(_val) => {
                 let mut formatter = formatter.debug_struct("Expr::Break");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 if let Some(val) = &_val.label {
                     #[derive(RefCast)]
                     #[repr(transparent)]
@@ -913,7 +1003,9 @@
             }
             syn::Expr::Continue(_val) => {
                 let mut formatter = formatter.debug_struct("Expr::Continue");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 if let Some(val) = &_val.label {
                     #[derive(RefCast)]
                     #[repr(transparent)]
@@ -934,7 +1026,9 @@
             }
             syn::Expr::Return(_val) => {
                 let mut formatter = formatter.debug_struct("Expr::Return");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 if let Some(val) = &_val.expr {
                     #[derive(RefCast)]
                     #[repr(transparent)]
@@ -955,15 +1049,21 @@
             }
             syn::Expr::Macro(_val) => {
                 let mut formatter = formatter.debug_struct("Expr::Macro");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 formatter.field("mac", Lite(&_val.mac));
                 formatter.finish()
             }
             syn::Expr::Struct(_val) => {
                 let mut formatter = formatter.debug_struct("Expr::Struct");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 formatter.field("path", Lite(&_val.path));
-                formatter.field("fields", Lite(&_val.fields));
+                if !_val.fields.is_empty() {
+                    formatter.field("fields", Lite(&_val.fields));
+                }
                 if let Some(val) = &_val.dot2_token {
                     #[derive(RefCast)]
                     #[repr(transparent)]
@@ -996,32 +1096,42 @@
             }
             syn::Expr::Repeat(_val) => {
                 let mut formatter = formatter.debug_struct("Expr::Repeat");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 formatter.field("expr", Lite(&_val.expr));
                 formatter.field("len", Lite(&_val.len));
                 formatter.finish()
             }
             syn::Expr::Paren(_val) => {
                 let mut formatter = formatter.debug_struct("Expr::Paren");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 formatter.field("expr", Lite(&_val.expr));
                 formatter.finish()
             }
             syn::Expr::Group(_val) => {
                 let mut formatter = formatter.debug_struct("Expr::Group");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 formatter.field("expr", Lite(&_val.expr));
                 formatter.finish()
             }
             syn::Expr::Try(_val) => {
                 let mut formatter = formatter.debug_struct("Expr::Try");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 formatter.field("expr", Lite(&_val.expr));
                 formatter.finish()
             }
             syn::Expr::Async(_val) => {
                 let mut formatter = formatter.debug_struct("Expr::Async");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 if let Some(val) = &_val.capture {
                     #[derive(RefCast)]
                     #[repr(transparent)]
@@ -1039,13 +1149,17 @@
             }
             syn::Expr::TryBlock(_val) => {
                 let mut formatter = formatter.debug_struct("Expr::TryBlock");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 formatter.field("block", Lite(&_val.block));
                 formatter.finish()
             }
             syn::Expr::Yield(_val) => {
                 let mut formatter = formatter.debug_struct("Expr::Yield");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 if let Some(val) = &_val.expr {
                     #[derive(RefCast)]
                     #[repr(transparent)]
@@ -1076,8 +1190,12 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ExprArray");
-        formatter.field("attrs", Lite(&_val.attrs));
-        formatter.field("elems", Lite(&_val.elems));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
+        if !_val.elems.is_empty() {
+            formatter.field("elems", Lite(&_val.elems));
+        }
         formatter.finish()
     }
 }
@@ -1085,7 +1203,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ExprAssign");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         formatter.field("left", Lite(&_val.left));
         formatter.field("right", Lite(&_val.right));
         formatter.finish()
@@ -1095,7 +1215,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ExprAssignOp");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         formatter.field("left", Lite(&_val.left));
         formatter.field("op", Lite(&_val.op));
         formatter.field("right", Lite(&_val.right));
@@ -1106,7 +1228,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ExprAsync");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         if let Some(val) = &_val.capture {
             #[derive(RefCast)]
             #[repr(transparent)]
@@ -1127,7 +1251,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ExprBinary");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         formatter.field("left", Lite(&_val.left));
         formatter.field("op", Lite(&_val.op));
         formatter.field("right", Lite(&_val.right));
@@ -1138,7 +1264,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ExprBlock");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         if let Some(val) = &_val.label {
             #[derive(RefCast)]
             #[repr(transparent)]
@@ -1163,7 +1291,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ExprBox");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         formatter.field("expr", Lite(&_val.expr));
         formatter.finish()
     }
@@ -1172,7 +1302,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ExprBreak");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         if let Some(val) = &_val.label {
             #[derive(RefCast)]
             #[repr(transparent)]
@@ -1212,9 +1344,13 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ExprCall");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         formatter.field("func", Lite(&_val.func));
-        formatter.field("args", Lite(&_val.args));
+        if !_val.args.is_empty() {
+            formatter.field("args", Lite(&_val.args));
+        }
         formatter.finish()
     }
 }
@@ -1222,7 +1358,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ExprCast");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         formatter.field("expr", Lite(&_val.expr));
         formatter.field("ty", Lite(&_val.ty));
         formatter.finish()
@@ -1232,7 +1370,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ExprClosure");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         if let Some(val) = &_val.asyncness {
             #[derive(RefCast)]
             #[repr(transparent)]
@@ -1269,7 +1409,9 @@
             }
             formatter.field("capture", Print::ref_cast(val));
         }
-        formatter.field("inputs", Lite(&_val.inputs));
+        if !_val.inputs.is_empty() {
+            formatter.field("inputs", Lite(&_val.inputs));
+        }
         formatter.field("output", Lite(&_val.output));
         formatter.field("body", Lite(&_val.body));
         formatter.finish()
@@ -1279,7 +1421,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ExprContinue");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         if let Some(val) = &_val.label {
             #[derive(RefCast)]
             #[repr(transparent)]
@@ -1303,7 +1447,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ExprField");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         formatter.field("base", Lite(&_val.base));
         formatter.field("member", Lite(&_val.member));
         formatter.finish()
@@ -1313,7 +1459,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ExprForLoop");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         if let Some(val) = &_val.label {
             #[derive(RefCast)]
             #[repr(transparent)]
@@ -1340,7 +1488,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ExprGroup");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         formatter.field("expr", Lite(&_val.expr));
         formatter.finish()
     }
@@ -1349,7 +1499,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ExprIf");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         formatter.field("cond", Lite(&_val.cond));
         formatter.field("then_branch", Lite(&_val.then_branch));
         if let Some(val) = &_val.else_branch {
@@ -1375,7 +1527,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ExprInPlace");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         formatter.field("place", Lite(&_val.place));
         formatter.field("value", Lite(&_val.value));
         formatter.finish()
@@ -1385,7 +1539,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ExprIndex");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         formatter.field("expr", Lite(&_val.expr));
         formatter.field("index", Lite(&_val.index));
         formatter.finish()
@@ -1395,8 +1551,12 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ExprLet");
-        formatter.field("attrs", Lite(&_val.attrs));
-        formatter.field("pats", Lite(&_val.pats));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
+        if !_val.pats.is_empty() {
+            formatter.field("pats", Lite(&_val.pats));
+        }
         formatter.field("expr", Lite(&_val.expr));
         formatter.finish()
     }
@@ -1405,7 +1565,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ExprLit");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         formatter.field("lit", Lite(&_val.lit));
         formatter.finish()
     }
@@ -1414,7 +1576,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ExprLoop");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         if let Some(val) = &_val.label {
             #[derive(RefCast)]
             #[repr(transparent)]
@@ -1439,7 +1603,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ExprMacro");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         formatter.field("mac", Lite(&_val.mac));
         formatter.finish()
     }
@@ -1448,9 +1614,13 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ExprMatch");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         formatter.field("expr", Lite(&_val.expr));
-        formatter.field("arms", Lite(&_val.arms));
+        if !_val.arms.is_empty() {
+            formatter.field("arms", Lite(&_val.arms));
+        }
         formatter.finish()
     }
 }
@@ -1458,7 +1628,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ExprMethodCall");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         formatter.field("receiver", Lite(&_val.receiver));
         formatter.field("method", Lite(&_val.method));
         if let Some(val) = &_val.turbofish {
@@ -1477,7 +1649,9 @@
             }
             formatter.field("turbofish", Print::ref_cast(val));
         }
-        formatter.field("args", Lite(&_val.args));
+        if !_val.args.is_empty() {
+            formatter.field("args", Lite(&_val.args));
+        }
         formatter.finish()
     }
 }
@@ -1485,7 +1659,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ExprParen");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         formatter.field("expr", Lite(&_val.expr));
         formatter.finish()
     }
@@ -1494,7 +1670,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ExprPath");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         if let Some(val) = &_val.qself {
             #[derive(RefCast)]
             #[repr(transparent)]
@@ -1519,7 +1697,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ExprRange");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         if let Some(val) = &_val.from {
             #[derive(RefCast)]
             #[repr(transparent)]
@@ -1560,7 +1740,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ExprReference");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         if let Some(val) = &_val.mutability {
             #[derive(RefCast)]
             #[repr(transparent)]
@@ -1581,7 +1763,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ExprRepeat");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         formatter.field("expr", Lite(&_val.expr));
         formatter.field("len", Lite(&_val.len));
         formatter.finish()
@@ -1591,7 +1775,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ExprReturn");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         if let Some(val) = &_val.expr {
             #[derive(RefCast)]
             #[repr(transparent)]
@@ -1615,9 +1801,13 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ExprStruct");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         formatter.field("path", Lite(&_val.path));
-        formatter.field("fields", Lite(&_val.fields));
+        if !_val.fields.is_empty() {
+            formatter.field("fields", Lite(&_val.fields));
+        }
         if let Some(val) = &_val.dot2_token {
             #[derive(RefCast)]
             #[repr(transparent)]
@@ -1653,7 +1843,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ExprTry");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         formatter.field("expr", Lite(&_val.expr));
         formatter.finish()
     }
@@ -1662,7 +1854,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ExprTryBlock");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         formatter.field("block", Lite(&_val.block));
         formatter.finish()
     }
@@ -1671,8 +1865,12 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ExprTuple");
-        formatter.field("attrs", Lite(&_val.attrs));
-        formatter.field("elems", Lite(&_val.elems));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
+        if !_val.elems.is_empty() {
+            formatter.field("elems", Lite(&_val.elems));
+        }
         formatter.finish()
     }
 }
@@ -1680,7 +1878,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ExprType");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         formatter.field("expr", Lite(&_val.expr));
         formatter.field("ty", Lite(&_val.ty));
         formatter.finish()
@@ -1690,7 +1890,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ExprUnary");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         formatter.field("op", Lite(&_val.op));
         formatter.field("expr", Lite(&_val.expr));
         formatter.finish()
@@ -1700,7 +1902,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ExprUnsafe");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         formatter.field("block", Lite(&_val.block));
         formatter.finish()
     }
@@ -1717,7 +1921,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ExprWhile");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         if let Some(val) = &_val.label {
             #[derive(RefCast)]
             #[repr(transparent)]
@@ -1743,7 +1949,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ExprYield");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         if let Some(val) = &_val.expr {
             #[derive(RefCast)]
             #[repr(transparent)]
@@ -1767,7 +1975,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("Field");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         formatter.field("vis", Lite(&_val.vis));
         if let Some(val) = &_val.ident {
             #[derive(RefCast)]
@@ -1805,7 +2015,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("FieldPat");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         formatter.field("member", Lite(&_val.member));
         if let Some(val) = &_val.colon_token {
             #[derive(RefCast)]
@@ -1827,7 +2039,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("FieldValue");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         formatter.field("member", Lite(&_val.member));
         if let Some(val) = &_val.colon_token {
             #[derive(RefCast)]
@@ -1851,12 +2065,16 @@
         match _val {
             syn::Fields::Named(_val) => {
                 let mut formatter = formatter.debug_struct("Fields::Named");
-                formatter.field("named", Lite(&_val.named));
+                if !_val.named.is_empty() {
+                    formatter.field("named", Lite(&_val.named));
+                }
                 formatter.finish()
             }
             syn::Fields::Unnamed(_val) => {
                 let mut formatter = formatter.debug_struct("Fields::Unnamed");
-                formatter.field("unnamed", Lite(&_val.unnamed));
+                if !_val.unnamed.is_empty() {
+                    formatter.field("unnamed", Lite(&_val.unnamed));
+                }
                 formatter.finish()
             }
             syn::Fields::Unit => formatter.write_str("Unit"),
@@ -1867,7 +2085,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("FieldsNamed");
-        formatter.field("named", Lite(&_val.named));
+        if !_val.named.is_empty() {
+            formatter.field("named", Lite(&_val.named));
+        }
         formatter.finish()
     }
 }
@@ -1875,7 +2095,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("FieldsUnnamed");
-        formatter.field("unnamed", Lite(&_val.unnamed));
+        if !_val.unnamed.is_empty() {
+            formatter.field("unnamed", Lite(&_val.unnamed));
+        }
         formatter.finish()
     }
 }
@@ -1899,8 +2121,12 @@
             }
             formatter.field("shebang", Print::ref_cast(val));
         }
-        formatter.field("attrs", Lite(&_val.attrs));
-        formatter.field("items", Lite(&_val.items));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
+        if !_val.items.is_empty() {
+            formatter.field("items", Lite(&_val.items));
+        }
         formatter.finish()
     }
 }
@@ -1941,7 +2167,9 @@
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("FnDecl");
         formatter.field("generics", Lite(&_val.generics));
-        formatter.field("inputs", Lite(&_val.inputs));
+        if !_val.inputs.is_empty() {
+            formatter.field("inputs", Lite(&_val.inputs));
+        }
         if let Some(val) = &_val.variadic {
             #[derive(RefCast)]
             #[repr(transparent)]
@@ -1964,7 +2192,9 @@
         match _val {
             syn::ForeignItem::Fn(_val) => {
                 let mut formatter = formatter.debug_struct("ForeignItem::Fn");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 formatter.field("vis", Lite(&_val.vis));
                 formatter.field("ident", Lite(&_val.ident));
                 formatter.field("decl", Lite(&_val.decl));
@@ -1972,7 +2202,9 @@
             }
             syn::ForeignItem::Static(_val) => {
                 let mut formatter = formatter.debug_struct("ForeignItem::Static");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 formatter.field("vis", Lite(&_val.vis));
                 if let Some(val) = &_val.mutability {
                     #[derive(RefCast)]
@@ -1992,14 +2224,18 @@
             }
             syn::ForeignItem::Type(_val) => {
                 let mut formatter = formatter.debug_struct("ForeignItem::Type");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 formatter.field("vis", Lite(&_val.vis));
                 formatter.field("ident", Lite(&_val.ident));
                 formatter.finish()
             }
             syn::ForeignItem::Macro(_val) => {
                 let mut formatter = formatter.debug_struct("ForeignItem::Macro");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 formatter.field("mac", Lite(&_val.mac));
                 if let Some(val) = &_val.semi_token {
                     #[derive(RefCast)]
@@ -2027,7 +2263,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ForeignItemFn");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         formatter.field("vis", Lite(&_val.vis));
         formatter.field("ident", Lite(&_val.ident));
         formatter.field("decl", Lite(&_val.decl));
@@ -2038,7 +2276,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ForeignItemMacro");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         formatter.field("mac", Lite(&_val.mac));
         if let Some(val) = &_val.semi_token {
             #[derive(RefCast)]
@@ -2059,7 +2299,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ForeignItemStatic");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         formatter.field("vis", Lite(&_val.vis));
         if let Some(val) = &_val.mutability {
             #[derive(RefCast)]
@@ -2082,7 +2324,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ForeignItemType");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         formatter.field("vis", Lite(&_val.vis));
         formatter.field("ident", Lite(&_val.ident));
         formatter.finish()
@@ -2183,7 +2427,9 @@
             }
             formatter.field("lt_token", Print::ref_cast(val));
         }
-        formatter.field("params", Lite(&_val.params));
+        if !_val.params.is_empty() {
+            formatter.field("params", Lite(&_val.params));
+        }
         if let Some(val) = &_val.gt_token {
             #[derive(RefCast)]
             #[repr(transparent)]
@@ -2221,7 +2467,9 @@
         match _val {
             syn::ImplItem::Const(_val) => {
                 let mut formatter = formatter.debug_struct("ImplItem::Const");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 formatter.field("vis", Lite(&_val.vis));
                 if let Some(val) = &_val.defaultness {
                     #[derive(RefCast)]
@@ -2242,7 +2490,9 @@
             }
             syn::ImplItem::Method(_val) => {
                 let mut formatter = formatter.debug_struct("ImplItem::Method");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 formatter.field("vis", Lite(&_val.vis));
                 if let Some(val) = &_val.defaultness {
                     #[derive(RefCast)]
@@ -2262,7 +2512,9 @@
             }
             syn::ImplItem::Type(_val) => {
                 let mut formatter = formatter.debug_struct("ImplItem::Type");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 formatter.field("vis", Lite(&_val.vis));
                 if let Some(val) = &_val.defaultness {
                     #[derive(RefCast)]
@@ -2283,7 +2535,9 @@
             }
             syn::ImplItem::Existential(_val) => {
                 let mut formatter = formatter.debug_struct("ImplItem::Existential");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 formatter.field("ident", Lite(&_val.ident));
                 formatter.field("generics", Lite(&_val.generics));
                 if let Some(val) = &_val.colon_token {
@@ -2298,12 +2552,16 @@
                     }
                     formatter.field("colon_token", Print::ref_cast(val));
                 }
-                formatter.field("bounds", Lite(&_val.bounds));
+                if !_val.bounds.is_empty() {
+                    formatter.field("bounds", Lite(&_val.bounds));
+                }
                 formatter.finish()
             }
             syn::ImplItem::Macro(_val) => {
                 let mut formatter = formatter.debug_struct("ImplItem::Macro");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 formatter.field("mac", Lite(&_val.mac));
                 if let Some(val) = &_val.semi_token {
                     #[derive(RefCast)]
@@ -2331,7 +2589,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ImplItemConst");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         formatter.field("vis", Lite(&_val.vis));
         if let Some(val) = &_val.defaultness {
             #[derive(RefCast)]
@@ -2355,7 +2615,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ImplItemExistential");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         formatter.field("ident", Lite(&_val.ident));
         formatter.field("generics", Lite(&_val.generics));
         if let Some(val) = &_val.colon_token {
@@ -2370,7 +2632,9 @@
             }
             formatter.field("colon_token", Print::ref_cast(val));
         }
-        formatter.field("bounds", Lite(&_val.bounds));
+        if !_val.bounds.is_empty() {
+            formatter.field("bounds", Lite(&_val.bounds));
+        }
         formatter.finish()
     }
 }
@@ -2378,7 +2642,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ImplItemMacro");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         formatter.field("mac", Lite(&_val.mac));
         if let Some(val) = &_val.semi_token {
             #[derive(RefCast)]
@@ -2399,7 +2665,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ImplItemMethod");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         formatter.field("vis", Lite(&_val.vis));
         if let Some(val) = &_val.defaultness {
             #[derive(RefCast)]
@@ -2422,7 +2690,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ImplItemType");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         formatter.field("vis", Lite(&_val.vis));
         if let Some(val) = &_val.defaultness {
             #[derive(RefCast)]
@@ -2464,7 +2734,9 @@
         match _val {
             syn::Item::ExternCrate(_val) => {
                 let mut formatter = formatter.debug_struct("Item::ExternCrate");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 formatter.field("vis", Lite(&_val.vis));
                 formatter.field("ident", Lite(&_val.ident));
                 if let Some(val) = &_val.rename {
@@ -2487,7 +2759,9 @@
             }
             syn::Item::Use(_val) => {
                 let mut formatter = formatter.debug_struct("Item::Use");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 formatter.field("vis", Lite(&_val.vis));
                 if let Some(val) = &_val.leading_colon {
                     #[derive(RefCast)]
@@ -2506,7 +2780,9 @@
             }
             syn::Item::Static(_val) => {
                 let mut formatter = formatter.debug_struct("Item::Static");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 formatter.field("vis", Lite(&_val.vis));
                 if let Some(val) = &_val.mutability {
                     #[derive(RefCast)]
@@ -2527,7 +2803,9 @@
             }
             syn::Item::Const(_val) => {
                 let mut formatter = formatter.debug_struct("Item::Const");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 formatter.field("vis", Lite(&_val.vis));
                 formatter.field("ident", Lite(&_val.ident));
                 formatter.field("ty", Lite(&_val.ty));
@@ -2536,7 +2814,9 @@
             }
             syn::Item::Fn(_val) => {
                 let mut formatter = formatter.debug_struct("Item::Fn");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 formatter.field("vis", Lite(&_val.vis));
                 if let Some(val) = &_val.constness {
                     #[derive(RefCast)]
@@ -2597,7 +2877,9 @@
             }
             syn::Item::Mod(_val) => {
                 let mut formatter = formatter.debug_struct("Item::Mod");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 formatter.field("vis", Lite(&_val.vis));
                 formatter.field("ident", Lite(&_val.ident));
                 if let Some(val) = &_val.content {
@@ -2632,14 +2914,20 @@
             }
             syn::Item::ForeignMod(_val) => {
                 let mut formatter = formatter.debug_struct("Item::ForeignMod");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 formatter.field("abi", Lite(&_val.abi));
-                formatter.field("items", Lite(&_val.items));
+                if !_val.items.is_empty() {
+                    formatter.field("items", Lite(&_val.items));
+                }
                 formatter.finish()
             }
             syn::Item::Type(_val) => {
                 let mut formatter = formatter.debug_struct("Item::Type");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 formatter.field("vis", Lite(&_val.vis));
                 formatter.field("ident", Lite(&_val.ident));
                 formatter.field("generics", Lite(&_val.generics));
@@ -2648,7 +2936,9 @@
             }
             syn::Item::Existential(_val) => {
                 let mut formatter = formatter.debug_struct("Item::Existential");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 formatter.field("vis", Lite(&_val.vis));
                 formatter.field("ident", Lite(&_val.ident));
                 formatter.field("generics", Lite(&_val.generics));
@@ -2664,12 +2954,16 @@
                     }
                     formatter.field("colon_token", Print::ref_cast(val));
                 }
-                formatter.field("bounds", Lite(&_val.bounds));
+                if !_val.bounds.is_empty() {
+                    formatter.field("bounds", Lite(&_val.bounds));
+                }
                 formatter.finish()
             }
             syn::Item::Struct(_val) => {
                 let mut formatter = formatter.debug_struct("Item::Struct");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 formatter.field("vis", Lite(&_val.vis));
                 formatter.field("ident", Lite(&_val.ident));
                 formatter.field("generics", Lite(&_val.generics));
@@ -2690,16 +2984,22 @@
             }
             syn::Item::Enum(_val) => {
                 let mut formatter = formatter.debug_struct("Item::Enum");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 formatter.field("vis", Lite(&_val.vis));
                 formatter.field("ident", Lite(&_val.ident));
                 formatter.field("generics", Lite(&_val.generics));
-                formatter.field("variants", Lite(&_val.variants));
+                if !_val.variants.is_empty() {
+                    formatter.field("variants", Lite(&_val.variants));
+                }
                 formatter.finish()
             }
             syn::Item::Union(_val) => {
                 let mut formatter = formatter.debug_struct("Item::Union");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 formatter.field("vis", Lite(&_val.vis));
                 formatter.field("ident", Lite(&_val.ident));
                 formatter.field("generics", Lite(&_val.generics));
@@ -2708,7 +3008,9 @@
             }
             syn::Item::Trait(_val) => {
                 let mut formatter = formatter.debug_struct("Item::Trait");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 formatter.field("vis", Lite(&_val.vis));
                 if let Some(val) = &_val.unsafety {
                     #[derive(RefCast)]
@@ -2748,22 +3050,32 @@
                     }
                     formatter.field("colon_token", Print::ref_cast(val));
                 }
-                formatter.field("supertraits", Lite(&_val.supertraits));
-                formatter.field("items", Lite(&_val.items));
+                if !_val.supertraits.is_empty() {
+                    formatter.field("supertraits", Lite(&_val.supertraits));
+                }
+                if !_val.items.is_empty() {
+                    formatter.field("items", Lite(&_val.items));
+                }
                 formatter.finish()
             }
             syn::Item::TraitAlias(_val) => {
                 let mut formatter = formatter.debug_struct("Item::TraitAlias");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 formatter.field("vis", Lite(&_val.vis));
                 formatter.field("ident", Lite(&_val.ident));
                 formatter.field("generics", Lite(&_val.generics));
-                formatter.field("bounds", Lite(&_val.bounds));
+                if !_val.bounds.is_empty() {
+                    formatter.field("bounds", Lite(&_val.bounds));
+                }
                 formatter.finish()
             }
             syn::Item::Impl(_val) => {
                 let mut formatter = formatter.debug_struct("Item::Impl");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 if let Some(val) = &_val.defaultness {
                     #[derive(RefCast)]
                     #[repr(transparent)]
@@ -2832,12 +3144,16 @@
                     formatter.field("trait_", Print::ref_cast(val));
                 }
                 formatter.field("self_ty", Lite(&_val.self_ty));
-                formatter.field("items", Lite(&_val.items));
+                if !_val.items.is_empty() {
+                    formatter.field("items", Lite(&_val.items));
+                }
                 formatter.finish()
             }
             syn::Item::Macro(_val) => {
                 let mut formatter = formatter.debug_struct("Item::Macro");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 if let Some(val) = &_val.ident {
                     #[derive(RefCast)]
                     #[repr(transparent)]
@@ -2871,7 +3187,9 @@
             }
             syn::Item::Macro2(_val) => {
                 let mut formatter = formatter.debug_struct("Item::Macro2");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 formatter.field("vis", Lite(&_val.vis));
                 formatter.field("ident", Lite(&_val.ident));
                 formatter.field("args", Lite(&_val.args));
@@ -2890,7 +3208,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ItemConst");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         formatter.field("vis", Lite(&_val.vis));
         formatter.field("ident", Lite(&_val.ident));
         formatter.field("ty", Lite(&_val.ty));
@@ -2902,11 +3222,15 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ItemEnum");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         formatter.field("vis", Lite(&_val.vis));
         formatter.field("ident", Lite(&_val.ident));
         formatter.field("generics", Lite(&_val.generics));
-        formatter.field("variants", Lite(&_val.variants));
+        if !_val.variants.is_empty() {
+            formatter.field("variants", Lite(&_val.variants));
+        }
         formatter.finish()
     }
 }
@@ -2914,7 +3238,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ItemExistential");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         formatter.field("vis", Lite(&_val.vis));
         formatter.field("ident", Lite(&_val.ident));
         formatter.field("generics", Lite(&_val.generics));
@@ -2930,7 +3256,9 @@
             }
             formatter.field("colon_token", Print::ref_cast(val));
         }
-        formatter.field("bounds", Lite(&_val.bounds));
+        if !_val.bounds.is_empty() {
+            formatter.field("bounds", Lite(&_val.bounds));
+        }
         formatter.finish()
     }
 }
@@ -2938,7 +3266,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ItemExternCrate");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         formatter.field("vis", Lite(&_val.vis));
         formatter.field("ident", Lite(&_val.ident));
         if let Some(val) = &_val.rename {
@@ -2964,7 +3294,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ItemFn");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         formatter.field("vis", Lite(&_val.vis));
         if let Some(val) = &_val.constness {
             #[derive(RefCast)]
@@ -3028,9 +3360,13 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ItemForeignMod");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         formatter.field("abi", Lite(&_val.abi));
-        formatter.field("items", Lite(&_val.items));
+        if !_val.items.is_empty() {
+            formatter.field("items", Lite(&_val.items));
+        }
         formatter.finish()
     }
 }
@@ -3038,7 +3374,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ItemImpl");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         if let Some(val) = &_val.defaultness {
             #[derive(RefCast)]
             #[repr(transparent)]
@@ -3103,7 +3441,9 @@
             formatter.field("trait_", Print::ref_cast(val));
         }
         formatter.field("self_ty", Lite(&_val.self_ty));
-        formatter.field("items", Lite(&_val.items));
+        if !_val.items.is_empty() {
+            formatter.field("items", Lite(&_val.items));
+        }
         formatter.finish()
     }
 }
@@ -3111,7 +3451,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ItemMacro");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         if let Some(val) = &_val.ident {
             #[derive(RefCast)]
             #[repr(transparent)]
@@ -3148,7 +3490,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ItemMacro2");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         formatter.field("vis", Lite(&_val.vis));
         formatter.field("ident", Lite(&_val.ident));
         formatter.field("args", Lite(&_val.args));
@@ -3160,7 +3504,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ItemMod");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         formatter.field("vis", Lite(&_val.vis));
         formatter.field("ident", Lite(&_val.ident));
         if let Some(val) = &_val.content {
@@ -3198,7 +3544,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ItemStatic");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         formatter.field("vis", Lite(&_val.vis));
         if let Some(val) = &_val.mutability {
             #[derive(RefCast)]
@@ -3222,7 +3570,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ItemStruct");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         formatter.field("vis", Lite(&_val.vis));
         formatter.field("ident", Lite(&_val.ident));
         formatter.field("generics", Lite(&_val.generics));
@@ -3246,7 +3596,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ItemTrait");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         formatter.field("vis", Lite(&_val.vis));
         if let Some(val) = &_val.unsafety {
             #[derive(RefCast)]
@@ -3286,8 +3638,12 @@
             }
             formatter.field("colon_token", Print::ref_cast(val));
         }
-        formatter.field("supertraits", Lite(&_val.supertraits));
-        formatter.field("items", Lite(&_val.items));
+        if !_val.supertraits.is_empty() {
+            formatter.field("supertraits", Lite(&_val.supertraits));
+        }
+        if !_val.items.is_empty() {
+            formatter.field("items", Lite(&_val.items));
+        }
         formatter.finish()
     }
 }
@@ -3295,11 +3651,15 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ItemTraitAlias");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         formatter.field("vis", Lite(&_val.vis));
         formatter.field("ident", Lite(&_val.ident));
         formatter.field("generics", Lite(&_val.generics));
-        formatter.field("bounds", Lite(&_val.bounds));
+        if !_val.bounds.is_empty() {
+            formatter.field("bounds", Lite(&_val.bounds));
+        }
         formatter.finish()
     }
 }
@@ -3307,7 +3667,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ItemType");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         formatter.field("vis", Lite(&_val.vis));
         formatter.field("ident", Lite(&_val.ident));
         formatter.field("generics", Lite(&_val.generics));
@@ -3319,7 +3681,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ItemUnion");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         formatter.field("vis", Lite(&_val.vis));
         formatter.field("ident", Lite(&_val.ident));
         formatter.field("generics", Lite(&_val.generics));
@@ -3331,7 +3695,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ItemUse");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         formatter.field("vis", Lite(&_val.vis));
         if let Some(val) = &_val.leading_colon {
             #[derive(RefCast)]
@@ -3377,7 +3743,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("LifetimeDef");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         formatter.field("lifetime", Lite(&_val.lifetime));
         if let Some(val) = &_val.colon_token {
             #[derive(RefCast)]
@@ -3391,7 +3759,9 @@
             }
             formatter.field("colon_token", Print::ref_cast(val));
         }
-        formatter.field("bounds", Lite(&_val.bounds));
+        if !_val.bounds.is_empty() {
+            formatter.field("bounds", Lite(&_val.bounds));
+        }
         formatter.finish()
     }
 }
@@ -3474,8 +3844,12 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("Local");
-        formatter.field("attrs", Lite(&_val.attrs));
-        formatter.field("pats", Lite(&_val.pats));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
+        if !_val.pats.is_empty() {
+            formatter.field("pats", Lite(&_val.pats));
+        }
         if let Some(val) = &_val.ty {
             #[derive(RefCast)]
             #[repr(transparent)]
@@ -3569,7 +3943,9 @@
             syn::Meta::List(_val) => {
                 let mut formatter = formatter.debug_struct("Meta::List");
                 formatter.field("ident", Lite(&_val.ident));
-                formatter.field("nested", Lite(&_val.nested));
+                if !_val.nested.is_empty() {
+                    formatter.field("nested", Lite(&_val.nested));
+                }
                 formatter.finish()
             }
             syn::Meta::NameValue(_val) => {
@@ -3586,7 +3962,9 @@
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("MetaList");
         formatter.field("ident", Lite(&_val.ident));
-        formatter.field("nested", Lite(&_val.nested));
+        if !_val.nested.is_empty() {
+            formatter.field("nested", Lite(&_val.nested));
+        }
         formatter.finish()
     }
 }
@@ -3664,7 +4042,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("MethodTurbofish");
-        formatter.field("args", Lite(&_val.args));
+        if !_val.args.is_empty() {
+            formatter.field("args", Lite(&_val.args));
+        }
         formatter.finish()
     }
 }
@@ -3689,7 +4069,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("ParenthesizedGenericArguments");
-        formatter.field("inputs", Lite(&_val.inputs));
+        if !_val.inputs.is_empty() {
+            formatter.field("inputs", Lite(&_val.inputs));
+        }
         formatter.field("output", Lite(&_val.output));
         formatter.finish()
     }
@@ -3750,7 +4132,9 @@
             syn::Pat::Struct(_val) => {
                 let mut formatter = formatter.debug_struct("Pat::Struct");
                 formatter.field("path", Lite(&_val.path));
-                formatter.field("fields", Lite(&_val.fields));
+                if !_val.fields.is_empty() {
+                    formatter.field("fields", Lite(&_val.fields));
+                }
                 if let Some(val) = &_val.dot2_token {
                     #[derive(RefCast)]
                     #[repr(transparent)]
@@ -3794,7 +4178,9 @@
             }
             syn::Pat::Tuple(_val) => {
                 let mut formatter = formatter.debug_struct("Pat::Tuple");
-                formatter.field("front", Lite(&_val.front));
+                if !_val.front.is_empty() {
+                    formatter.field("front", Lite(&_val.front));
+                }
                 if let Some(val) = &_val.dot2_token {
                     #[derive(RefCast)]
                     #[repr(transparent)]
@@ -3819,7 +4205,9 @@
                     }
                     formatter.field("comma_token", Print::ref_cast(val));
                 }
-                formatter.field("back", Lite(&_val.back));
+                if !_val.back.is_empty() {
+                    formatter.field("back", Lite(&_val.back));
+                }
                 formatter.finish()
             }
             syn::Pat::Box(_val) => {
@@ -3858,7 +4246,9 @@
             }
             syn::Pat::Slice(_val) => {
                 let mut formatter = formatter.debug_struct("Pat::Slice");
-                formatter.field("front", Lite(&_val.front));
+                if !_val.front.is_empty() {
+                    formatter.field("front", Lite(&_val.front));
+                }
                 if let Some(val) = &_val.middle {
                     #[derive(RefCast)]
                     #[repr(transparent)]
@@ -3899,7 +4289,9 @@
                     }
                     formatter.field("comma_token", Print::ref_cast(val));
                 }
-                formatter.field("back", Lite(&_val.back));
+                if !_val.back.is_empty() {
+                    formatter.field("back", Lite(&_val.back));
+                }
                 formatter.finish()
             }
             syn::Pat::Macro(_val) => {
@@ -4045,7 +4437,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("PatSlice");
-        formatter.field("front", Lite(&_val.front));
+        if !_val.front.is_empty() {
+            formatter.field("front", Lite(&_val.front));
+        }
         if let Some(val) = &_val.middle {
             #[derive(RefCast)]
             #[repr(transparent)]
@@ -4086,7 +4480,9 @@
             }
             formatter.field("comma_token", Print::ref_cast(val));
         }
-        formatter.field("back", Lite(&_val.back));
+        if !_val.back.is_empty() {
+            formatter.field("back", Lite(&_val.back));
+        }
         formatter.finish()
     }
 }
@@ -4095,7 +4491,9 @@
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("PatStruct");
         formatter.field("path", Lite(&_val.path));
-        formatter.field("fields", Lite(&_val.fields));
+        if !_val.fields.is_empty() {
+            formatter.field("fields", Lite(&_val.fields));
+        }
         if let Some(val) = &_val.dot2_token {
             #[derive(RefCast)]
             #[repr(transparent)]
@@ -4115,7 +4513,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("PatTuple");
-        formatter.field("front", Lite(&_val.front));
+        if !_val.front.is_empty() {
+            formatter.field("front", Lite(&_val.front));
+        }
         if let Some(val) = &_val.dot2_token {
             #[derive(RefCast)]
             #[repr(transparent)]
@@ -4140,7 +4540,9 @@
             }
             formatter.field("comma_token", Print::ref_cast(val));
         }
-        formatter.field("back", Lite(&_val.back));
+        if !_val.back.is_empty() {
+            formatter.field("back", Lite(&_val.back));
+        }
         formatter.finish()
     }
 }
@@ -4184,7 +4586,9 @@
             }
             formatter.field("leading_colon", Print::ref_cast(val));
         }
-        formatter.field("segments", Lite(&_val.segments));
+        if !_val.segments.is_empty() {
+            formatter.field("segments", Lite(&_val.segments));
+        }
         formatter.finish()
     }
 }
@@ -4229,7 +4633,9 @@
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("PredicateLifetime");
         formatter.field("lifetime", Lite(&_val.lifetime));
-        formatter.field("bounds", Lite(&_val.bounds));
+        if !_val.bounds.is_empty() {
+            formatter.field("bounds", Lite(&_val.bounds));
+        }
         formatter.finish()
     }
 }
@@ -4254,7 +4660,9 @@
             formatter.field("lifetimes", Print::ref_cast(val));
         }
         formatter.field("bounded_ty", Lite(&_val.bounded_ty));
-        formatter.field("bounds", Lite(&_val.bounds));
+        if !_val.bounds.is_empty() {
+            formatter.field("bounds", Lite(&_val.bounds));
+        }
         formatter.finish()
     }
 }
@@ -4389,7 +4797,9 @@
         match _val {
             syn::TraitItem::Const(_val) => {
                 let mut formatter = formatter.debug_struct("TraitItem::Const");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 formatter.field("ident", Lite(&_val.ident));
                 formatter.field("ty", Lite(&_val.ty));
                 if let Some(val) = &_val.default {
@@ -4412,7 +4822,9 @@
             }
             syn::TraitItem::Method(_val) => {
                 let mut formatter = formatter.debug_struct("TraitItem::Method");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 formatter.field("sig", Lite(&_val.sig));
                 if let Some(val) = &_val.default {
                     #[derive(RefCast)]
@@ -4446,7 +4858,9 @@
             }
             syn::TraitItem::Type(_val) => {
                 let mut formatter = formatter.debug_struct("TraitItem::Type");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 formatter.field("ident", Lite(&_val.ident));
                 formatter.field("generics", Lite(&_val.generics));
                 if let Some(val) = &_val.colon_token {
@@ -4461,7 +4875,9 @@
                     }
                     formatter.field("colon_token", Print::ref_cast(val));
                 }
-                formatter.field("bounds", Lite(&_val.bounds));
+                if !_val.bounds.is_empty() {
+                    formatter.field("bounds", Lite(&_val.bounds));
+                }
                 if let Some(val) = &_val.default {
                     #[derive(RefCast)]
                     #[repr(transparent)]
@@ -4482,7 +4898,9 @@
             }
             syn::TraitItem::Macro(_val) => {
                 let mut formatter = formatter.debug_struct("TraitItem::Macro");
-                formatter.field("attrs", Lite(&_val.attrs));
+                if !_val.attrs.is_empty() {
+                    formatter.field("attrs", Lite(&_val.attrs));
+                }
                 formatter.field("mac", Lite(&_val.mac));
                 if let Some(val) = &_val.semi_token {
                     #[derive(RefCast)]
@@ -4510,7 +4928,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("TraitItemConst");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         formatter.field("ident", Lite(&_val.ident));
         formatter.field("ty", Lite(&_val.ty));
         if let Some(val) = &_val.default {
@@ -4536,7 +4956,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("TraitItemMacro");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         formatter.field("mac", Lite(&_val.mac));
         if let Some(val) = &_val.semi_token {
             #[derive(RefCast)]
@@ -4557,7 +4979,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("TraitItemMethod");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         formatter.field("sig", Lite(&_val.sig));
         if let Some(val) = &_val.default {
             #[derive(RefCast)]
@@ -4594,7 +5018,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("TraitItemType");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         formatter.field("ident", Lite(&_val.ident));
         formatter.field("generics", Lite(&_val.generics));
         if let Some(val) = &_val.colon_token {
@@ -4609,7 +5035,9 @@
             }
             formatter.field("colon_token", Print::ref_cast(val));
         }
-        formatter.field("bounds", Lite(&_val.bounds));
+        if !_val.bounds.is_empty() {
+            formatter.field("bounds", Lite(&_val.bounds));
+        }
         if let Some(val) = &_val.default {
             #[derive(RefCast)]
             #[repr(transparent)]
@@ -4760,7 +5188,9 @@
                     }
                     formatter.field("abi", Print::ref_cast(val));
                 }
-                formatter.field("inputs", Lite(&_val.inputs));
+                if !_val.inputs.is_empty() {
+                    formatter.field("inputs", Lite(&_val.inputs));
+                }
                 if let Some(val) = &_val.variadic {
                     #[derive(RefCast)]
                     #[repr(transparent)]
@@ -4782,7 +5212,9 @@
             }
             syn::Type::Tuple(_val) => {
                 let mut formatter = formatter.debug_struct("Type::Tuple");
-                formatter.field("elems", Lite(&_val.elems));
+                if !_val.elems.is_empty() {
+                    formatter.field("elems", Lite(&_val.elems));
+                }
                 formatter.finish()
             }
             syn::Type::Path(_val) => {
@@ -4820,12 +5252,16 @@
                     }
                     formatter.field("dyn_token", Print::ref_cast(val));
                 }
-                formatter.field("bounds", Lite(&_val.bounds));
+                if !_val.bounds.is_empty() {
+                    formatter.field("bounds", Lite(&_val.bounds));
+                }
                 formatter.finish()
             }
             syn::Type::ImplTrait(_val) => {
                 let mut formatter = formatter.debug_struct("Type::ImplTrait");
-                formatter.field("bounds", Lite(&_val.bounds));
+                if !_val.bounds.is_empty() {
+                    formatter.field("bounds", Lite(&_val.bounds));
+                }
                 formatter.finish()
             }
             syn::Type::Paren(_val) => {
@@ -4912,7 +5348,9 @@
             }
             formatter.field("abi", Print::ref_cast(val));
         }
-        formatter.field("inputs", Lite(&_val.inputs));
+        if !_val.inputs.is_empty() {
+            formatter.field("inputs", Lite(&_val.inputs));
+        }
         if let Some(val) = &_val.variadic {
             #[derive(RefCast)]
             #[repr(transparent)]
@@ -4941,7 +5379,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("TypeImplTrait");
-        formatter.field("bounds", Lite(&_val.bounds));
+        if !_val.bounds.is_empty() {
+            formatter.field("bounds", Lite(&_val.bounds));
+        }
         formatter.finish()
     }
 }
@@ -4971,7 +5411,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("TypeParam");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         formatter.field("ident", Lite(&_val.ident));
         if let Some(val) = &_val.colon_token {
             #[derive(RefCast)]
@@ -4985,7 +5427,9 @@
             }
             formatter.field("colon_token", Print::ref_cast(val));
         }
-        formatter.field("bounds", Lite(&_val.bounds));
+        if !_val.bounds.is_empty() {
+            formatter.field("bounds", Lite(&_val.bounds));
+        }
         if let Some(val) = &_val.eq_token {
             #[derive(RefCast)]
             #[repr(transparent)]
@@ -5158,7 +5602,9 @@
             }
             formatter.field("dyn_token", Print::ref_cast(val));
         }
-        formatter.field("bounds", Lite(&_val.bounds));
+        if !_val.bounds.is_empty() {
+            formatter.field("bounds", Lite(&_val.bounds));
+        }
         formatter.finish()
     }
 }
@@ -5166,7 +5612,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("TypeTuple");
-        formatter.field("elems", Lite(&_val.elems));
+        if !_val.elems.is_empty() {
+            formatter.field("elems", Lite(&_val.elems));
+        }
         formatter.finish()
     }
 }
@@ -5208,7 +5656,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("UseGroup");
-        formatter.field("items", Lite(&_val.items));
+        if !_val.items.is_empty() {
+            formatter.field("items", Lite(&_val.items));
+        }
         formatter.finish()
     }
 }
@@ -5274,7 +5724,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("Variant");
-        formatter.field("attrs", Lite(&_val.attrs));
+        if !_val.attrs.is_empty() {
+            formatter.field("attrs", Lite(&_val.attrs));
+        }
         formatter.field("ident", Lite(&_val.ident));
         formatter.field("fields", Lite(&_val.fields));
         if let Some(val) = &_val.discriminant {
@@ -5357,7 +5809,9 @@
     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
         let _val = &self.value;
         let mut formatter = formatter.debug_struct("WhereClause");
-        formatter.field("predicates", Lite(&_val.predicates));
+        if !_val.predicates.is_empty() {
+            formatter.field("predicates", Lite(&_val.predicates));
+        }
         formatter.finish()
     }
 }
diff --git a/tests/test_derive_input.rs b/tests/test_derive_input.rs
index 57f800b..bf4440b 100644
--- a/tests/test_derive_input.rs
+++ b/tests/test_derive_input.rs
@@ -17,12 +17,9 @@
 
     snapshot!(code as DeriveInput, @r###"
    ⋮DeriveInput {
-   ⋮    attrs: [],
    ⋮    vis: Inherited,
    ⋮    ident: "Unit",
-   ⋮    generics: Generics {
-   ⋮        params: [],
-   ⋮    },
+   ⋮    generics: Generics,
    ⋮    data: Data::Struct {
    ⋮        fields: Unit,
    ⋮        semi_token: Some,
@@ -62,14 +59,11 @@
        ⋮        VisPublic,
        ⋮    ),
        ⋮    ident: "Item",
-       ⋮    generics: Generics {
-       ⋮        params: [],
-       ⋮    },
+       ⋮    generics: Generics,
        ⋮    data: Data::Struct {
        ⋮        fields: Fields::Named {
        ⋮            named: [
        ⋮                Field {
-       ⋮                    attrs: [],
        ⋮                    vis: Public(
        ⋮                        VisPublic,
        ⋮                    ),
@@ -87,7 +81,6 @@
        ⋮                    },
        ⋮                },
        ⋮                Field {
-       ⋮                    attrs: [],
        ⋮                    vis: Public(
        ⋮                        VisPublic,
        ⋮                    ),