Static rustc_lint_defs::builtin::LEGACY_DERIVE_HELPERS
source · pub static LEGACY_DERIVE_HELPERS: &Lint
Expand description
The legacy_derive_helpers
lint detects derive helper attributes
that are used before they are introduced.
Example
ⓘ
#[serde(rename_all = "camelCase")]
#[derive(Deserialize)]
struct S { /* fields */ }
produces:
warning: derive helper attribute is used before it is introduced
--> $DIR/legacy-derive-helpers.rs:1:3
|
1 | #[serde(rename_all = "camelCase")]
| ^^^^^
...
2 | #[derive(Deserialize)]
| ----------- the attribute is introduced here
Explanation
Attributes like this work for historical reasons, but attribute expansion works in
left-to-right order in general, so, to resolve #[serde]
, compiler has to try to “look
into the future” at not yet expanded part of the item , but such attempts are not always
reliable.
To fix the warning place the helper attribute after its corresponding derive.
ⓘ
#[derive(Deserialize)]
#[serde(rename_all = "camelCase")]
struct S { /* fields */ }