LEGACY_DERIVE_HELPERS in rustc_lint_defs::builtin - Rust
Description: The `legacy_derive_helpers` lint detects derive helper attributes that are used before they are introduced.

Skip to main content

## LEGACY_DERIVE_HELPERS

# Static 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 */ }