diff --git a/crates/bevy_reflect/derive/src/derive_data.rs b/crates/bevy_reflect/derive/src/derive_data.rs index 826b225debbcb..fd2669a0636f1 100644 --- a/crates/bevy_reflect/derive/src/derive_data.rs +++ b/crates/bevy_reflect/derive/src/derive_data.rs @@ -14,7 +14,7 @@ use crate::{ }; use bevy_macro_utils::ResultSifter; use quote::{format_ident, quote, ToTokens}; -use syn::token::Comma; +use syn::{token::Comma, MacroDelimiter}; use crate::enum_utility::{EnumVariantOutputData, ReflectCloneVariantBuilder, VariantBuilder}; use crate::field_attributes::CloneBehavior; @@ -197,7 +197,16 @@ impl<'a> ReflectDerive<'a> { for attribute in &input.attrs { match &attribute.meta { Meta::List(meta_list) if meta_list.path.is_ident(REFLECT_ATTRIBUTE_NAME) => { - container_attributes.parse_meta_list(meta_list, provenance.trait_)?; + if let MacroDelimiter::Paren(_) = meta_list.delimiter { + container_attributes.parse_meta_list(meta_list, provenance.trait_)?; + } else { + return Err(syn::Error::new( + meta_list.delimiter.span().join(), + format_args!( + "`#[{REFLECT_ATTRIBUTE_NAME}(\"...\")]` must use parentheses `(` and `)`" + ), + )); + } } Meta::NameValue(pair) if pair.path.is_ident(TYPE_PATH_ATTRIBUTE_NAME) => { let syn::Expr::Lit(syn::ExprLit { diff --git a/crates/bevy_render/src/sync_world.rs b/crates/bevy_render/src/sync_world.rs index d9a8a430b28fe..ba3d6d860f60d 100644 --- a/crates/bevy_render/src/sync_world.rs +++ b/crates/bevy_render/src/sync_world.rs @@ -119,7 +119,7 @@ impl Plugin for SyncWorldPlugin { /// [`ExtractComponentPlugin`]: crate::extract_component::ExtractComponentPlugin /// [`SyncComponentPlugin`]: crate::sync_component::SyncComponentPlugin #[derive(Component, Copy, Clone, Debug, Default, Reflect)] -#[reflect[Component, Default, Clone]] +#[reflect(Component, Default, Clone)] #[component(storage = "SparseSet")] pub struct SyncToRenderWorld; diff --git a/release-content/migration-guides/reflect_parentheses.md b/release-content/migration-guides/reflect_parentheses.md new file mode 100644 index 0000000000000..c21b60f167680 --- /dev/null +++ b/release-content/migration-guides/reflect_parentheses.md @@ -0,0 +1,25 @@ +--- +title: "`#[reflect(...)]` now supports only parentheses" +pull_requests: [21400] +--- + +Previously, the `#[reflect(...)]` attribute of the `Reflect` derive macro +supported parentheses, braces, or brackets. Now it supports only parentheses. + +```rust +/// before +#[derive(Clone, Reflect) +#[reflect[Clone]] + +/// after +#[derive(Clone, Reflect) +#[reflect(Clone)] + +/// before +#[derive(Clone, Reflect) +#[reflect{Clone}] + +/// after +#[derive(Clone, Reflect) +#[reflect(Clone)] +```