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
- Keep only one option: #[entity_event(trigger = MyTraversal)] OR #[entity_event(propagate = MyPropagation)]
- Use two separate event types if you need both triggered and propagated behavior
- 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.