bevy_auto_plugin 0.10.0

Procedural attribute macros for Bevy apps that reduce boilerplate by automatically registering components, resources, events, states, and systems in your plugin's build function.
Documentation
use bevy::prelude::*;
use bevy_auto_plugin::prelude::*;
use internal_test_proc_macro::xtest;
use internal_test_util::create_minimal_app;

#[derive(AutoPlugin)]
#[auto_plugin(impl_plugin_trait)]
struct Test;

#[derive(Component)]
struct Foo;

#[derive(Resource, Default)]
struct ObserverCount(usize);

#[auto_observer(plugin = Test)]
fn foo_observer(_trigger: On<Add, Foo>, mut count: ResMut<ObserverCount>) {
    count.0 += 1;
}

fn app() -> App {
    let mut app = create_minimal_app();
    app.init_resource::<ObserverCount>();
    app.add_plugins(Test);
    app
}

#[xtest]
fn test_auto_observer() {
    let mut app = app();
    app.world_mut().spawn(Foo);
    assert_eq!(app.world().resource::<ObserverCount>().0, 1);
}