Skip to content

Commit e582c0a

Browse files
committed
refactor(ast_macros): simplify code
1 parent 1c15288 commit e582c0a

File tree

1 file changed

+10
-13
lines changed
  • crates/oxc_ast_macros/src

1 file changed

+10
-13
lines changed

crates/oxc_ast_macros/src/ast.rs

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
use std::mem;
2-
31
use proc_macro2::{TokenStream, TokenTree};
42
use quote::quote;
53
use syn::{
@@ -49,7 +47,7 @@ pub struct StructDetails {
4947
fn modify_struct(item: &mut ItemStruct, args: TokenStream) -> TokenStream {
5048
let assertions = assert_generated_derives(&item.attrs);
5149

52-
let item = reorder_struct_fields(item, args).unwrap_or_else(|| quote!(#item));
50+
reorder_struct_fields(item, args);
5351

5452
quote! {
5553
#[repr(C)]
@@ -60,22 +58,25 @@ fn modify_struct(item: &mut ItemStruct, args: TokenStream) -> TokenStream {
6058
}
6159

6260
/// Re-order struct fields, depending on instructions in `STRUCTS` (which is codegen-ed).
63-
fn reorder_struct_fields(item: &mut ItemStruct, args: TokenStream) -> Option<TokenStream> {
61+
///
62+
/// Mutates `item` in place, re-ordering its fields.
63+
fn reorder_struct_fields(item: &mut ItemStruct, args: TokenStream) {
6464
// Skip foreign types
6565
if let Some(TokenTree::Ident(ident)) = args.into_iter().next() {
6666
if ident == "foreign" {
67-
return None;
67+
return;
6868
}
6969
}
7070

7171
// Get struct data. Exit if no fields need re-ordering.
7272
let struct_name = item.ident.to_string();
73-
let field_order = STRUCTS[&struct_name].field_order?;
73+
let Some(field_order) = STRUCTS[&struct_name].field_order else {
74+
return;
75+
};
7476

7577
// Re-order fields.
7678
// `field_order` contains indexes of fields in the order they should be.
77-
let fields = mem::replace(&mut item.fields, Fields::Unit);
78-
let Fields::Named(FieldsNamed { brace_token, mut named }) = fields else { unreachable!() };
79+
let Fields::Named(FieldsNamed { named, .. }) = &mut item.fields else { unreachable!() };
7980

8081
assert!(
8182
named.len() == field_order.len(),
@@ -89,18 +90,14 @@ fn reorder_struct_fields(item: &mut ItemStruct, args: TokenStream) -> Option<Tok
8990
let mut fields = named.clone().into_pairs().zip(field_order).collect::<Vec<_>>();
9091
fields.sort_unstable_by_key(|(_, index)| **index);
9192

92-
for field in &mut named {
93+
for field in named.iter_mut() {
9394
field.attrs.insert(0, parse_quote!( #[cfg(doc)]));
9495
}
9596

9697
named.extend(fields.into_iter().map(|(mut pair, _)| {
9798
pair.value_mut().attrs.insert(0, parse_quote!( #[cfg(not(doc))]));
9899
pair
99100
}));
100-
101-
item.fields = Fields::Named(FieldsNamed { brace_token, named });
102-
103-
Some(quote!( #item ))
104101
}
105102

106103
/// Generate assertions that traits used in `#[generate_derive]` are in scope.

0 commit comments

Comments
 (0)