Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove #[system_param(ignore)] and #[world_query(ignore)] #8265

Merged
merged 3 commits into from
Mar 30, 2023

Conversation

JoJoJet
Copy link
Member

@JoJoJet JoJoJet commented Mar 30, 2023

Objective

Follow-up to #8030.

Now that SystemParam and WorldQuery are implemented for PhantomData, the ignore attributes are now unnecessary.


Changelog

  • Removed the attributes #[system_param(ignore)] and #[world_query(ignore)].

Migration Guide

The attributes #[system_param(ignore)] and #[world_query] ignore have been removed. If you were using either of these with PhantomData fields, you can simply remove the attribute:

#[derive(SystemParam)]
struct MyParam<'w, 's, Marker> {
    ...
    // Before:
    #[system_param(ignore)]
    _marker: PhantomData<Marker>,

    // After:
    _marker: PhantomData<Marker>,
}
#[derive(WorldQuery)]
struct MyQuery<Marker> {
    ...
    // Before:
    #[world_query(ignore)]
    _marker: PhantomData<Marker>,

    // After:
    _marker: PhantomData<Marker>,
}

If you were using this for another type that implements Default, consider wrapping that type in Local<> (this only works for SystemParam):

#[derive(SystemParam)]
struct MyParam<'w, 's> {
    // Before:
    #[system_param(ignore)]
    value: MyDefaultType, // This will be initialized using `Default` each time `MyParam` is created.

    // After:
    value: Local<MyDefaultType>, // This will be initialized using `Default` the first time `MyParam` is created.
}

If you are implementing either trait and need to preserve the exact behavior of the old ignore attributes, consider manually implementing SystemParam or WorldQuery for a wrapper struct that uses the Default trait:

// Before:

#[derive(WorldQuery)
struct MyQuery {
   #[world_query(ignore)]
    str: String,
}

// After:

#[derive(WorldQuery)
struct MyQuery {
    str: DefaultQuery<String>,
}

pub struct DefaultQuery<T: Default>(pub T);

unsafe impl<T: Default> WorldQuery for DefaultQuery<T> {
    type Item<'w> = Self;
    ...
    unsafe fn fetch<'w>(...) -> Self::Item<'w> {
        Self(T::default())
    }
}

@JoJoJet JoJoJet added A-ECS Entities, components, systems, and events C-Code-Quality A section of code that is hard to understand or change C-Breaking-Change A breaking change to Bevy's public API that needs to be noted in a migration guide labels Mar 30, 2023
@alice-i-cecile alice-i-cecile added this to the 0.11 milestone Mar 30, 2023
@james7132 james7132 added the S-Ready-For-Final-Review This PR has been approved by the community. It's ready for a maintainer to consider merging it label Mar 30, 2023
@james7132 james7132 added this pull request to the merge queue Mar 30, 2023
Merged via the queue into bevyengine:main with commit a954f3e Mar 30, 2023
@JoJoJet JoJoJet deleted the yeet-ignore branch March 31, 2023 00:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-ECS Entities, components, systems, and events C-Breaking-Change A breaking change to Bevy's public API that needs to be noted in a migration guide C-Code-Quality A section of code that is hard to understand or change S-Ready-For-Final-Review This PR has been approved by the community. It's ready for a maintainer to consider merging it
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants