From 0551235c9196a92e61674a6464d1e254a7b8fe11 Mon Sep 17 00:00:00 2001 From: CoffeeVampir3 <48565901+CoffeeVampir3@users.noreply.github.com> Date: Wed, 8 Mar 2023 19:06:17 -0700 Subject: [PATCH 1/4] Fixed derived reflect outputting incorrect where clause. --- crates/bevy_reflect/bevy_reflect_derive/src/utility.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/bevy_reflect/bevy_reflect_derive/src/utility.rs b/crates/bevy_reflect/bevy_reflect_derive/src/utility.rs index cb9b11957c91f..c9c99f27f79f9 100644 --- a/crates/bevy_reflect/bevy_reflect_derive/src/utility.rs +++ b/crates/bevy_reflect/bevy_reflect_derive/src/utility.rs @@ -123,7 +123,7 @@ pub(crate) fn extend_where_clause( let ignored_trait_bounds = &where_clause_options.ignored_trait_bounds; let mut generic_where_clause = if where_clause.is_some() { - quote! {#where_clause} + quote! {#where_clause,} } else if !(active_types.is_empty() && ignored_types.is_empty()) { quote! {where} } else { From 4af2d47cf541b53fead8ac2fc1faa07f73e0001e Mon Sep 17 00:00:00 2001 From: CoffeeVampir3 <48565901+CoffeeVampir3@users.noreply.github.com> Date: Wed, 8 Mar 2023 21:07:41 -0700 Subject: [PATCH 2/4] changed to GVSV's fix --- crates/bevy_reflect/bevy_reflect_derive/src/utility.rs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/crates/bevy_reflect/bevy_reflect_derive/src/utility.rs b/crates/bevy_reflect/bevy_reflect_derive/src/utility.rs index c9c99f27f79f9..9f4672a05bfe7 100644 --- a/crates/bevy_reflect/bevy_reflect_derive/src/utility.rs +++ b/crates/bevy_reflect/bevy_reflect_derive/src/utility.rs @@ -122,13 +122,16 @@ pub(crate) fn extend_where_clause( let active_trait_bounds = &where_clause_options.active_trait_bounds; let ignored_trait_bounds = &where_clause_options.ignored_trait_bounds; - let mut generic_where_clause = if where_clause.is_some() { - quote! {#where_clause,} + let mut generic_where_clause = if let Some(where_clause) = where_clause { + // This removes the optional, user-defined trailing comma from the equation + let predicates = where_clause.predicates.iter(); + quote! {where #(#predicates,)*} } else if !(active_types.is_empty() && ignored_types.is_empty()) { quote! {where} } else { quote! {} }; + generic_where_clause.extend(quote! { #(#active_types: #active_trait_bounds,)* #(#ignored_types: #ignored_trait_bounds,)* From 8c034851621c2abd0ec7807d53aa32cb7f3198e4 Mon Sep 17 00:00:00 2001 From: CoffeeVampir3 <48565901+CoffeeVampir3@users.noreply.github.com> Date: Wed, 8 Mar 2023 21:11:26 -0700 Subject: [PATCH 3/4] trying gvsv fix for FromReflect --- .../bevy_reflect_derive/src/from_reflect.rs | 22 +++++++++---------- 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/crates/bevy_reflect/bevy_reflect_derive/src/from_reflect.rs b/crates/bevy_reflect/bevy_reflect_derive/src/from_reflect.rs index 08342cccbe943..0724d9298cdde 100644 --- a/crates/bevy_reflect/bevy_reflect_derive/src/from_reflect.rs +++ b/crates/bevy_reflect/bevy_reflect_derive/src/from_reflect.rs @@ -118,18 +118,16 @@ fn impl_struct_internal(reflect_struct: &ReflectStruct, is_tuple: bool) -> Token }; let (impl_generics, ty_generics, where_clause) = generics.split_for_impl(); - - // Add FromReflect bound for each active field - let mut where_from_reflect_clause = if where_clause.is_some() { - quote! {#where_clause} - } else if !active_members.is_empty() { - quote! {where} - } else { - quote! {} - }; - where_from_reflect_clause.extend(quote! { - #(#field_types: #bevy_reflect_path::FromReflect,)* - }); + + let where_from_reflect_clause = extend_where_clause( + where_clause, + &WhereClauseOptions { + active_types: reflect_struct.active_types().into_boxed_slice(), + ignored_types: reflect_struct.ignored_types().into_boxed_slice(), + active_trait_bounds: quote!(#bevy_reflect_path::FromReflect), + ignored_trait_bounds: quote!(#FQDefault), + }, + ); TokenStream::from(quote! { impl #impl_generics #bevy_reflect_path::FromReflect for #struct_name #ty_generics #where_from_reflect_clause From 2c7740813aa8b8f8fcd1aac670815374e59d2d07 Mon Sep 17 00:00:00 2001 From: CoffeeVampir3 <48565901+CoffeeVampir3@users.noreply.github.com> Date: Wed, 8 Mar 2023 21:46:00 -0700 Subject: [PATCH 4/4] Update from_reflect.rs --- crates/bevy_reflect/bevy_reflect_derive/src/from_reflect.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/crates/bevy_reflect/bevy_reflect_derive/src/from_reflect.rs b/crates/bevy_reflect/bevy_reflect_derive/src/from_reflect.rs index 0724d9298cdde..668e858c47f73 100644 --- a/crates/bevy_reflect/bevy_reflect_derive/src/from_reflect.rs +++ b/crates/bevy_reflect/bevy_reflect_derive/src/from_reflect.rs @@ -9,6 +9,7 @@ use proc_macro::TokenStream; use proc_macro2::Span; use quote::{quote, ToTokens}; use syn::{Field, Ident, Lit, LitInt, LitStr, Member}; +use bevy::reflect::WhereClauseOptions; /// Implements `FromReflect` for the given struct pub(crate) fn impl_struct(reflect_struct: &ReflectStruct) -> TokenStream {