Skip to content

Commit e5b5220

Browse files
committed
Follow up on Todo in bevy_reflect_derive (#7461)
# Objective Follow up on Todo in bevy_reflect_derive ## Solution - Replaced all Instances that do the same as `ident_or_index` with a call to it. - Only the following Line wasn't replaced, as it only wants the index, and not the ident: [https://github.com/bevyengine/bevy/blob/69fc8c6b70dd350ef31eb260a1137a2d6c8a3c19/crates/bevy_reflect/bevy_reflect_derive/src/impls/tuple_structs.rs#L18](https://github.com/bevyengine/bevy/blob/69fc8c6b70dd350ef31eb260a1137a2d6c8a3c19/crates/bevy_reflect/bevy_reflect_derive/src/impls/tuple_structs.rs#L18)
1 parent 6beb463 commit e5b5220

File tree

3 files changed

+8
-31
lines changed

3 files changed

+8
-31
lines changed

crates/bevy_reflect/bevy_reflect_derive/src/from_reflect.rs

Lines changed: 6 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,12 @@ use crate::derive_data::ReflectEnum;
33
use crate::enum_utility::{get_variant_constructors, EnumVariantConstructors};
44
use crate::field_attributes::DefaultBehavior;
55
use crate::fq_std::{FQAny, FQClone, FQDefault, FQOption};
6+
use crate::utility::ident_or_index;
67
use crate::{ReflectMeta, ReflectStruct};
78
use proc_macro::TokenStream;
89
use proc_macro2::Span;
910
use quote::{quote, ToTokens};
10-
use syn::{Field, Ident, Index, Lit, LitInt, LitStr, Member};
11+
use syn::{Field, Ident, Lit, LitInt, LitStr, Member};
1112

1213
/// Implements `FromReflect` for the given struct
1314
pub(crate) fn impl_struct(reflect_struct: &ReflectStruct) -> TokenStream {
@@ -104,8 +105,7 @@ fn impl_struct_internal(reflect_struct: &ReflectStruct, is_tuple: bool) -> Token
104105
#FQOption::Some(__this)
105106
)
106107
} else {
107-
let MemberValuePair(ignored_members, ignored_values) =
108-
get_ignored_fields(reflect_struct, is_tuple);
108+
let MemberValuePair(ignored_members, ignored_values) = get_ignored_fields(reflect_struct);
109109

110110
quote!(
111111
#FQOption::Some(
@@ -149,12 +149,12 @@ fn impl_struct_internal(reflect_struct: &ReflectStruct, is_tuple: bool) -> Token
149149
///
150150
/// Each value of the `MemberValuePair` is a token stream that generates a
151151
/// a default value for the ignored field.
152-
fn get_ignored_fields(reflect_struct: &ReflectStruct, is_tuple: bool) -> MemberValuePair {
152+
fn get_ignored_fields(reflect_struct: &ReflectStruct) -> MemberValuePair {
153153
MemberValuePair::new(
154154
reflect_struct
155155
.ignored_fields()
156156
.map(|field| {
157-
let member = get_ident(field.data, field.index, is_tuple);
157+
let member = ident_or_index(field.data.ident.as_ref(), field.index);
158158

159159
let value = match &field.attrs.default {
160160
DefaultBehavior::Func(path) => quote! {#path()},
@@ -183,7 +183,7 @@ fn get_active_fields(
183183
reflect_struct
184184
.active_fields()
185185
.map(|field| {
186-
let member = get_ident(field.data, field.index, is_tuple);
186+
let member = ident_or_index(field.data.ident.as_ref(), field.index);
187187
let accessor = get_field_accessor(field.data, field.index, is_tuple);
188188
let ty = field.data.ty.clone();
189189

@@ -221,19 +221,6 @@ fn get_active_fields(
221221
)
222222
}
223223

224-
/// Returns the member for a given field of a struct or tuple struct.
225-
fn get_ident(field: &Field, index: usize, is_tuple: bool) -> Member {
226-
if is_tuple {
227-
Member::Unnamed(Index::from(index))
228-
} else {
229-
field
230-
.ident
231-
.as_ref()
232-
.map(|ident| Member::Named(ident.clone()))
233-
.unwrap_or_else(|| Member::Unnamed(Index::from(index)))
234-
}
235-
}
236-
237224
/// Returns the accessor for a given field of a struct or tuple struct.
238225
///
239226
/// This differs from a member in that it needs to be a number for tuple structs

crates/bevy_reflect/bevy_reflect_derive/src/impls/structs.rs

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
use crate::fq_std::{FQAny, FQBox, FQDefault, FQOption, FQResult};
22
use crate::impls::impl_typed;
3-
use crate::utility::extend_where_clause;
3+
use crate::utility::{extend_where_clause, ident_or_index};
44
use crate::ReflectStruct;
55
use proc_macro::TokenStream;
66
use quote::{quote, ToTokens};
7-
use syn::{Index, Member};
87

98
/// Implements `Struct`, `GetTypeRegistration`, and `Reflect` for the given derive data.
109
pub(crate) fn impl_struct(reflect_struct: &ReflectStruct) -> TokenStream {
@@ -26,14 +25,7 @@ pub(crate) fn impl_struct(reflect_struct: &ReflectStruct) -> TokenStream {
2625
.collect::<Vec<String>>();
2726
let field_idents = reflect_struct
2827
.active_fields()
29-
.map(|field| {
30-
field
31-
.data
32-
.ident
33-
.as_ref()
34-
.map(|ident| Member::Named(ident.clone()))
35-
.unwrap_or_else(|| Member::Unnamed(Index::from(field.index)))
36-
})
28+
.map(|field| ident_or_index(field.data.ident.as_ref(), field.index))
3729
.collect::<Vec<_>>();
3830
let field_types = reflect_struct.active_types();
3931
let field_count = field_idents.len();

crates/bevy_reflect/bevy_reflect_derive/src/utility.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,6 @@ pub(crate) struct ResultSifter<T> {
5252
/// a tuple struct or a struct with named fields. If you don't have a field name,
5353
/// it means you need to access the struct through an index.
5454
pub(crate) fn ident_or_index(ident: Option<&Ident>, index: usize) -> Member {
55-
// TODO(Quality) when #4761 is merged, code that does this should be replaced
56-
// by a call to `ident_or_index`.
5755
ident.map_or_else(
5856
|| Member::Unnamed(index.into()),
5957
|ident| Member::Named(ident.clone()),

0 commit comments

Comments
 (0)