
# Objective - Some of the "large" crates have sub-crates, usually for things such as macros. - For an example, see [`bevy_ecs_macros` at `bevy_ecs/macros`](4f9f987099/crates/bevy_ecs/macros
). - The one crate that does not follow this convention is [`bevy_reflect_derive`](4f9f987099/crates/bevy_reflect/bevy_reflect_derive
), which is in the `bevy_reflect/bevy_reflect_derive` folder and not `bevy_reflect/derive` or `bevy_reflect/macros`. ## Solution - Rename folder `bevy_reflect_derive` to `derive`. - I chose to use `derive` instead of `macros` because the crate name itself ends in `_derive`. (One of only two crates to actually use this convention, funnily enough.) ## Testing - Build and test `bevy_reflect` and `bevy_reflect_derive`. - Apply the following patch to `publish.sh` to run it in `--dry-run` mode, to test that the path has been successfully updated: - If you have any security concerns about applying random diffs, feel free to skip this step. Worst case scenario it fails and Cart has to manually publish a few crates. ```bash # Apply patch to make `publish.sh` *not* actually publish anything. git apply path/to/foo.patch # Make `publish.sh` executable. chmod +x tools/publish.sh # Execute `publish.sh`. ./tools/publish.sh ``` ```patch diff --git a/tools/publish.sh b/tools/publish.sh index b020bad28..fbcc09281 100644 --- a/tools/publish.sh +++ b/tools/publish.sh @@ -49,7 +49,7 @@ crates=( if [ -n "$(git status --porcelain)" ]; then echo "You have local changes!" - exit 1 + # exit 1 fi pushd crates @@ -61,15 +61,15 @@ do cp ../LICENSE-APACHE "$crate" pushd "$crate" git add LICENSE-MIT LICENSE-APACHE - cargo publish --no-verify --allow-dirty + cargo publish --no-verify --allow-dirty --dry-run popd - sleep 20 + # sleep 20 done popd echo "Publishing root crate" -cargo publish --allow-dirty +cargo publish --allow-dirty --dry-run echo "Cleaning local state" git reset HEAD --hard ``` --- ## Changelog - Moved `bevy_reflect_derive` from `crates/bevy_reflect/bevy_reflect_derive` to `crates/bevy_reflect/derive`.
64 lines
2.5 KiB
Rust
64 lines
2.5 KiB
Rust
//! Contains code related specifically to Bevy's type registration.
|
|
|
|
use crate::derive_data::ReflectMeta;
|
|
use crate::serialization::SerializationDataDef;
|
|
use crate::utility::WhereClauseOptions;
|
|
use quote::quote;
|
|
use syn::Type;
|
|
|
|
/// Creates the `GetTypeRegistration` impl for the given type data.
|
|
#[allow(clippy::too_many_arguments)]
|
|
pub(crate) fn impl_get_type_registration<'a>(
|
|
meta: &ReflectMeta,
|
|
where_clause_options: &WhereClauseOptions,
|
|
serialization_data: Option<&SerializationDataDef>,
|
|
type_dependencies: Option<impl Iterator<Item = &'a Type>>,
|
|
) -> proc_macro2::TokenStream {
|
|
let type_path = meta.type_path();
|
|
let bevy_reflect_path = meta.bevy_reflect_path();
|
|
let registration_data = meta.attrs().idents();
|
|
|
|
let type_deps_fn = type_dependencies.map(|deps| {
|
|
quote! {
|
|
#[inline(never)]
|
|
fn register_type_dependencies(registry: &mut #bevy_reflect_path::TypeRegistry) {
|
|
#(<#deps as #bevy_reflect_path::__macro_exports::RegisterForReflection>::__register(registry);)*
|
|
}
|
|
}
|
|
});
|
|
|
|
let (impl_generics, ty_generics, where_clause) = type_path.generics().split_for_impl();
|
|
let where_reflect_clause = where_clause_options.extend_where_clause(where_clause);
|
|
|
|
let from_reflect_data = if meta.from_reflect().should_auto_derive() {
|
|
Some(quote! {
|
|
registration.insert::<#bevy_reflect_path::ReflectFromReflect>(#bevy_reflect_path::FromType::<Self>::from_type());
|
|
})
|
|
} else {
|
|
None
|
|
};
|
|
|
|
let serialization_data = serialization_data.map(|data| {
|
|
let serialization_data = data.as_serialization_data(bevy_reflect_path);
|
|
quote! {
|
|
registration.insert::<#bevy_reflect_path::serde::SerializationData>(#serialization_data);
|
|
}
|
|
});
|
|
|
|
quote! {
|
|
#[allow(unused_mut)]
|
|
impl #impl_generics #bevy_reflect_path::GetTypeRegistration for #type_path #ty_generics #where_reflect_clause {
|
|
fn get_type_registration() -> #bevy_reflect_path::TypeRegistration {
|
|
let mut registration = #bevy_reflect_path::TypeRegistration::of::<Self>();
|
|
registration.insert::<#bevy_reflect_path::ReflectFromPtr>(#bevy_reflect_path::FromType::<Self>::from_type());
|
|
#from_reflect_data
|
|
#serialization_data
|
|
#(registration.insert::<#registration_data>(#bevy_reflect_path::FromType::<Self>::from_type());)*
|
|
registration
|
|
}
|
|
|
|
#type_deps_fn
|
|
}
|
|
}
|
|
}
|