Skip to content

Commit 060787a

Browse files
committed
cargo fmt
1 parent f0d85ac commit 060787a

File tree

1 file changed

+123
-121
lines changed

1 file changed

+123
-121
lines changed

support/procedural-fork/src/no_bound/default.rs

Lines changed: 123 additions & 121 deletions
Original file line numberDiff line numberDiff line change
@@ -27,132 +27,134 @@ pub fn derive_default_no_bound(input: proc_macro::TokenStream) -> proc_macro::To
2727

2828
let (impl_generics, ty_generics, where_clause) = input.generics.split_for_impl();
2929

30-
let impl_ =
31-
match input.data {
32-
Data::Struct(struct_) => match struct_.fields {
33-
Fields::Named(named) => {
34-
let fields = named.named.iter().map(|field| &field.ident).map(|ident| {
35-
quote_spanned! {ident.span() =>
36-
#ident: ::core::default::Default::default()
37-
}
38-
});
30+
let impl_ = match input.data {
31+
Data::Struct(struct_) => match struct_.fields {
32+
Fields::Named(named) => {
33+
let fields = named.named.iter().map(|field| &field.ident).map(|ident| {
34+
quote_spanned! {ident.span() =>
35+
#ident: ::core::default::Default::default()
36+
}
37+
});
38+
39+
quote!(Self { #( #fields, )* })
40+
}
41+
Fields::Unnamed(unnamed) => {
42+
let fields = unnamed.unnamed.iter().map(|field| {
43+
quote_spanned! {field.span()=>
44+
::core::default::Default::default()
45+
}
46+
});
47+
48+
quote!(Self( #( #fields, )* ))
49+
}
50+
Fields::Unit => {
51+
quote!(Self)
52+
}
53+
},
54+
Data::Enum(enum_) => {
55+
if enum_.variants.is_empty() {
56+
return syn::Error::new_spanned(name, "cannot derive Default for an empty enum")
57+
.to_compile_error()
58+
.into();
59+
}
3960

40-
quote!(Self { #( #fields, )* })
41-
}
42-
Fields::Unnamed(unnamed) => {
43-
let fields = unnamed.unnamed.iter().map(|field| {
44-
quote_spanned! {field.span()=>
45-
::core::default::Default::default()
61+
// all #[default] attrs with the variant they're on; i.e. a var
62+
let default_variants = enum_
63+
.variants
64+
.into_iter()
65+
.filter(|variant| {
66+
variant
67+
.attrs
68+
.iter()
69+
.any(|attr| attr.path().is_ident("default"))
70+
})
71+
.collect::<Vec<_>>();
72+
73+
match &*default_variants {
74+
[] => return syn::Error::new(
75+
name.clone().span(),
76+
"no default declared, make a variant default by placing `#[default]` above it",
77+
)
78+
.into_compile_error()
79+
.into(),
80+
// only one variant with the #[default] attribute set
81+
[default_variant] => {
82+
let variant_attrs = default_variant
83+
.attrs
84+
.iter()
85+
.filter(|a| a.path().is_ident("default"))
86+
.collect::<Vec<_>>();
87+
88+
// check that there is only one #[default] attribute on the variant
89+
if let [first_attr, second_attr, additional_attrs @ ..] = &*variant_attrs {
90+
let mut err =
91+
syn::Error::new(Span::call_site(), "multiple `#[default]` attributes");
92+
93+
err.combine(syn::Error::new_spanned(
94+
first_attr,
95+
"`#[default]` used here",
96+
));
97+
98+
err.extend([second_attr].into_iter().chain(additional_attrs).map(
99+
|variant| {
100+
syn::Error::new_spanned(variant, "`#[default]` used again here")
101+
},
102+
));
103+
104+
return err.into_compile_error().into();
105+
}
106+
107+
let variant_ident = &default_variant.ident;
108+
109+
let fully_qualified_variant_path = quote!(Self::#variant_ident);
110+
111+
match &default_variant.fields {
112+
Fields::Named(named) => {
113+
let fields =
114+
named.named.iter().map(|field| &field.ident).map(|ident| {
115+
quote_spanned! {ident.span()=>
116+
#ident: ::core::default::Default::default()
117+
}
118+
});
119+
120+
quote!(#fully_qualified_variant_path { #( #fields, )* })
46121
}
47-
});
48-
49-
quote!(Self( #( #fields, )* ))
50-
}
51-
Fields::Unit => {
52-
quote!(Self)
53-
}
54-
},
55-
Data::Enum(enum_) => {
56-
if enum_.variants.is_empty() {
57-
return syn::Error::new_spanned(name, "cannot derive Default for an empty enum")
58-
.to_compile_error()
59-
.into();
122+
Fields::Unnamed(unnamed) => {
123+
let fields = unnamed.unnamed.iter().map(|field| {
124+
quote_spanned! {field.span()=>
125+
::core::default::Default::default()
126+
}
127+
});
128+
129+
quote!(#fully_qualified_variant_path( #( #fields, )* ))
130+
}
131+
Fields::Unit => fully_qualified_variant_path,
132+
}
60133
}
134+
[first, additional @ ..] => {
135+
let mut err = syn::Error::new(Span::call_site(), "multiple declared defaults");
61136

62-
// all #[default] attrs with the variant they're on; i.e. a var
63-
let default_variants = enum_
64-
.variants
65-
.into_iter()
66-
.filter(|variant| {
67-
variant
68-
.attrs
69-
.iter()
70-
.any(|attr| attr.path().is_ident("default"))
71-
})
72-
.collect::<Vec<_>>();
73-
74-
match &*default_variants {
75-
[] => return syn::Error::new(
76-
name.clone().span(),
77-
"no default declared, make a variant default by placing `#[default]` above it",
78-
)
79-
.into_compile_error()
80-
.into(),
81-
// only one variant with the #[default] attribute set
82-
[default_variant] => {
83-
let variant_attrs = default_variant
84-
.attrs
85-
.iter()
86-
.filter(|a| a.path().is_ident("default"))
87-
.collect::<Vec<_>>();
88-
89-
// check that there is only one #[default] attribute on the variant
90-
if let [first_attr, second_attr, additional_attrs @ ..] = &*variant_attrs {
91-
let mut err =
92-
syn::Error::new(Span::call_site(), "multiple `#[default]` attributes");
93-
94-
err.combine(syn::Error::new_spanned(first_attr, "`#[default]` used here"));
95-
96-
err.extend([second_attr].into_iter().chain(additional_attrs).map(
97-
|variant| {
98-
syn::Error::new_spanned(variant, "`#[default]` used again here")
99-
},
100-
));
101-
102-
return err.into_compile_error().into()
103-
}
104-
105-
let variant_ident = &default_variant.ident;
106-
107-
let fully_qualified_variant_path = quote!(Self::#variant_ident);
108-
109-
match &default_variant.fields {
110-
Fields::Named(named) => {
111-
let fields =
112-
named.named.iter().map(|field| &field.ident).map(|ident| {
113-
quote_spanned! {ident.span()=>
114-
#ident: ::core::default::Default::default()
115-
}
116-
});
117-
118-
quote!(#fully_qualified_variant_path { #( #fields, )* })
119-
},
120-
Fields::Unnamed(unnamed) => {
121-
let fields = unnamed.unnamed.iter().map(|field| {
122-
quote_spanned! {field.span()=>
123-
::core::default::Default::default()
124-
}
125-
});
126-
127-
quote!(#fully_qualified_variant_path( #( #fields, )* ))
128-
},
129-
Fields::Unit => fully_qualified_variant_path,
130-
}
131-
},
132-
[first, additional @ ..] => {
133-
let mut err = syn::Error::new(Span::call_site(), "multiple declared defaults");
134-
135-
err.combine(syn::Error::new_spanned(first, "first default"));
136-
137-
err.extend(
138-
additional
139-
.into_iter()
140-
.map(|variant| syn::Error::new_spanned(variant, "additional default")),
141-
);
142-
143-
return err.into_compile_error().into()
144-
},
145-
}
146-
}
147-
Data::Union(union_) => {
148-
return syn::Error::new_spanned(
149-
union_.union_token,
150-
"Union type not supported by `derive(DefaultNoBound)`",
151-
)
152-
.to_compile_error()
153-
.into()
137+
err.combine(syn::Error::new_spanned(first, "first default"));
138+
139+
err.extend(
140+
additional
141+
.into_iter()
142+
.map(|variant| syn::Error::new_spanned(variant, "additional default")),
143+
);
144+
145+
return err.into_compile_error().into();
146+
}
154147
}
155-
};
148+
}
149+
Data::Union(union_) => {
150+
return syn::Error::new_spanned(
151+
union_.union_token,
152+
"Union type not supported by `derive(DefaultNoBound)`",
153+
)
154+
.to_compile_error()
155+
.into()
156+
}
157+
};
156158

157159
quote!(
158160
const _: () = {

0 commit comments

Comments
 (0)