Diagnostics for label traits (#17441)
# Objective
Diagnostics for labels don't suggest how to best implement them.
```
error[E0277]: the trait bound `Label: ScheduleLabel` is not satisfied
--> src/main.rs:15:35
|
15 | let mut sched = Schedule::new(Label);
| ------------- ^^^^^ the trait `ScheduleLabel` is not implemented for `Label`
| |
| required by a bound introduced by this call
|
= help: the trait `ScheduleLabel` is implemented for `Interned<(dyn ScheduleLabel + 'static)>`
note: required by a bound in `bevy_ecs::schedule::Schedule::new`
--> /home/vj/workspace/rust/bevy/crates/bevy_ecs/src/schedule/schedule.rs:297:28
|
297 | pub fn new(label: impl ScheduleLabel) -> Self {
| ^^^^^^^^^^^^^ required by this bound in `Schedule::new`
```
## Solution
`diagnostics::on_unimplemented` and `diagnostics::do_not_recommend`
## Showcase
New error message:
```
error[E0277]: the trait bound `Label: ScheduleLabel` is not satisfied
--> src/main.rs:15:35
|
15 | let mut sched = Schedule::new(Label);
| ------------- ^^^^^ the trait `ScheduleLabel` is not implemented for `Label`
| |
| required by a bound introduced by this call
|
= note: consider annotating `Label` with `#[derive(ScheduleLabel)]`
note: required by a bound in `bevy_ecs::schedule::Schedule::new`
--> /home/vj/workspace/rust/bevy/crates/bevy_ecs/src/schedule/schedule.rs:297:28
|
297 | pub fn new(label: impl ScheduleLabel) -> Self {
| ^^^^^^^^^^^^^ required by this bound in `Schedule::new`
```
This commit is contained in:
parent
ebbd961739
commit
a7051a4815
@ -32,6 +32,9 @@ use std::{
|
|||||||
|
|
||||||
bevy_ecs::define_label!(
|
bevy_ecs::define_label!(
|
||||||
/// A strongly-typed class of labels used to identify an [`App`].
|
/// A strongly-typed class of labels used to identify an [`App`].
|
||||||
|
#[diagnostic::on_unimplemented(
|
||||||
|
note = "consider annotating `{Self}` with `#[derive(AppLabel)]`"
|
||||||
|
)]
|
||||||
AppLabel,
|
AppLabel,
|
||||||
APP_LABEL_INTERNER
|
APP_LABEL_INTERNER
|
||||||
);
|
);
|
||||||
|
|||||||
@ -20,12 +20,18 @@ use crate::{
|
|||||||
|
|
||||||
define_label!(
|
define_label!(
|
||||||
/// A strongly-typed class of labels used to identify a [`Schedule`](crate::schedule::Schedule).
|
/// A strongly-typed class of labels used to identify a [`Schedule`](crate::schedule::Schedule).
|
||||||
|
#[diagnostic::on_unimplemented(
|
||||||
|
note = "consider annotating `{Self}` with `#[derive(ScheduleLabel)]`"
|
||||||
|
)]
|
||||||
ScheduleLabel,
|
ScheduleLabel,
|
||||||
SCHEDULE_LABEL_INTERNER
|
SCHEDULE_LABEL_INTERNER
|
||||||
);
|
);
|
||||||
|
|
||||||
define_label!(
|
define_label!(
|
||||||
/// Types that identify logical groups of systems.
|
/// Types that identify logical groups of systems.
|
||||||
|
#[diagnostic::on_unimplemented(
|
||||||
|
note = "consider annotating `{Self}` with `#[derive(SystemSet)]`"
|
||||||
|
)]
|
||||||
SystemSet,
|
SystemSet,
|
||||||
SYSTEM_SET_INTERNER,
|
SYSTEM_SET_INTERNER,
|
||||||
extra_methods: {
|
extra_methods: {
|
||||||
|
|||||||
@ -14,6 +14,9 @@ use super::{EdgeExistence, InternedRenderLabel, IntoRenderNodeArray};
|
|||||||
pub use bevy_render_macros::RenderSubGraph;
|
pub use bevy_render_macros::RenderSubGraph;
|
||||||
|
|
||||||
define_label!(
|
define_label!(
|
||||||
|
#[diagnostic::on_unimplemented(
|
||||||
|
note = "consider annotating `{Self}` with `#[derive(RenderSubGraph)]`"
|
||||||
|
)]
|
||||||
/// A strongly-typed class of labels used to identify a [`SubGraph`] in a render graph.
|
/// A strongly-typed class of labels used to identify a [`SubGraph`] in a render graph.
|
||||||
RenderSubGraph,
|
RenderSubGraph,
|
||||||
RENDER_SUB_GRAPH_INTERNER
|
RENDER_SUB_GRAPH_INTERNER
|
||||||
|
|||||||
@ -23,6 +23,9 @@ pub use bevy_render_macros::RenderLabel;
|
|||||||
use super::{InternedRenderSubGraph, RenderSubGraph};
|
use super::{InternedRenderSubGraph, RenderSubGraph};
|
||||||
|
|
||||||
define_label!(
|
define_label!(
|
||||||
|
#[diagnostic::on_unimplemented(
|
||||||
|
note = "consider annotating `{Self}` with `#[derive(RenderLabel)]`"
|
||||||
|
)]
|
||||||
/// A strongly-typed class of labels used to identify a [`Node`] in a render graph.
|
/// A strongly-typed class of labels used to identify a [`Node`] in a render graph.
|
||||||
RenderLabel,
|
RenderLabel,
|
||||||
RENDER_LABEL_INTERNER
|
RENDER_LABEL_INTERNER
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user