From 1229fc8a6dbdb91c32398ee2673de8ec3e878eca Mon Sep 17 00:00:00 2001 From: dishmaker <141624503+dishmaker@users.noreply.github.com> Date: Fri, 13 Feb 2026 11:03:37 +0100 Subject: [PATCH] serde_derive: rewrite fields_from_ast with less llvm-lines --- serde_derive/src/internals/ast.rs | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/serde_derive/src/internals/ast.rs b/serde_derive/src/internals/ast.rs index 5a760c65..1b89c6ad 100644 --- a/serde_derive/src/internals/ast.rs +++ b/serde_derive/src/internals/ast.rs @@ -202,17 +202,24 @@ fn fields_from_ast<'a>( container_default: &attr::Default, private: &Ident, ) -> Vec> { - fields - .iter() - .enumerate() - .map(|(i, field)| Field { + let mut dst_fields = Vec::with_capacity(fields.len()); + for field in fields { + dst_fields.push(Field { member: match &field.ident { Some(ident) => syn::Member::Named(ident.clone()), - None => syn::Member::Unnamed(i.into()), + None => syn::Member::Unnamed(dst_fields.len().into()), }, - attrs: attr::Field::from_ast(cx, i, field, attrs, container_default, private), + attrs: attr::Field::from_ast( + cx, + dst_fields.len(), + field, + attrs, + container_default, + private, + ), ty: &field.ty, original: field, - }) - .collect() + }); + } + dst_fields }