
Takes the first two commits from #15375 and adds suggestions from this comment: https://github.com/bevyengine/bevy/pull/15375#issuecomment-2366968300 See #15375 for more reasoning/motivation. ## Rebasing (rerunning) ```rust git switch simpler-lint-fixes git reset --hard main cargo fmt --all -- --unstable-features --config normalize_comments=true,imports_granularity=Crate cargo fmt --all git add --update git commit --message "rustfmt" cargo clippy --workspace --all-targets --all-features --fix cargo fmt --all -- --unstable-features --config normalize_comments=true,imports_granularity=Crate cargo fmt --all git add --update git commit --message "clippy" git cherry-pick e6c0b94f6795222310fb812fa5c4512661fc7887 ```
42 lines
1.1 KiB
Rust
42 lines
1.1 KiB
Rust
use proc_macro2::TokenStream;
|
|
use quote::quote;
|
|
use syn::{parse::ParseStream, Expr, Path, Token};
|
|
|
|
#[derive(Default, Clone)]
|
|
pub(crate) struct CustomAttributes {
|
|
attributes: Vec<Expr>,
|
|
}
|
|
|
|
impl CustomAttributes {
|
|
/// Generates a `TokenStream` for `CustomAttributes` construction.
|
|
pub fn to_tokens(&self, bevy_reflect_path: &Path) -> TokenStream {
|
|
let attributes = self.attributes.iter().map(|value| {
|
|
quote! {
|
|
.with_attribute(#value)
|
|
}
|
|
});
|
|
|
|
quote! {
|
|
#bevy_reflect_path::attributes::CustomAttributes::default()
|
|
#(#attributes)*
|
|
}
|
|
}
|
|
|
|
/// Inserts a custom attribute into the list.
|
|
pub fn push(&mut self, value: Expr) -> syn::Result<()> {
|
|
self.attributes.push(value);
|
|
Ok(())
|
|
}
|
|
|
|
/// Parse `@` (custom attribute) attribute.
|
|
///
|
|
/// Examples:
|
|
/// - `#[reflect(@Foo))]`
|
|
/// - `#[reflect(@Bar::baz("qux"))]`
|
|
/// - `#[reflect(@0..256u8)]`
|
|
pub fn parse_custom_attribute(&mut self, input: ParseStream) -> syn::Result<()> {
|
|
input.parse::<Token![@]>()?;
|
|
self.push(input.parse()?)
|
|
}
|
|
}
|