bevyengine/bevy · error · syn::Error

Cannot define both #[entity_event(trigger)] and #[entity_eve

Error message

Cannot define both #[entity_event(trigger)] and #[entity_event(propagate)]

What it means

Compile error from the derive_entity_event macro: after attribute parsing, both the trigger and propagate options of #[entity_event] were set. These select mutually exclusive observer traversal behaviors, so the derive aborts code generation with this guard.

Source

Thrown at crates/bevy_ecs/macros/src/event.rs:113

                    traversal = Some(meta.value()?.parse()?);
                }
                processed_attrs.push(PROPAGATE);
                Ok(())
            }
            Some(ident) if ident == TRIGGER => {
                trigger = Some(meta.value()?.parse()?);
                processed_attrs.push(TRIGGER);
                Ok(())
            }
            Some(ident) => Err(meta.error(format!("unsupported attribute: {ident}"))),
            None => Err(meta.error("expected identifier")),
        }) {
            return e.to_compile_error().into();
        }
    }

    if trigger.is_some() && propagate {
        return syn::Error::new(
            ast.span(),
            "Cannot define both #[entity_event(trigger)] and #[entity_event(propagate)]",
        )
        .into_compile_error()
        .into();
    }

    let entity_field = match get_event_target_field(&ast) {
        Ok(value) => value,
        Err(err) => return err.into_compile_error().into(),
    };

    let struct_name = &ast.ident;
    let (impl_generics, type_generics, where_clause) = &ast.generics.split_for_impl();

    let trigger = if let Some(trigger) = trigger {
        quote! {#trigger}
    } else if propagate {

View on GitHub (pinned to 396ca72708)

Solutions

  1. Keep only one option: #[entity_event(trigger = MyTraversal)] OR #[entity_event(propagate = MyPropagation)]
  2. Use two separate event types if you need both triggered and propagated behavior
  3. Remove the unwanted attribute from the derive invocation
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at crates/bevy_ecs/macros/src/event.rs:113 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of bevyengine/bevy@396ca72708 (2026-08-20). Data as JSON: /api/errors/31446eed52240e98. Report an issue: GitHub.