Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Skip collecting unmatched fields in variants that do not use flatten #2791

Merged
merged 4 commits into from
Aug 8, 2024

Conversation

dtolnay
Copy link
Member

@dtolnay dtolnay commented Aug 8, 2024

Fixes #2789.

For the enum in the repro:

#[derive(Deserialize)]
#[serde(untagged)]
enum Inner<'a> {
    Default {
        s: &'a str,
    },
    Builder {
        s: &'a str,
        #[serde(flatten)]
        o: Options,
    },
}

we would previously collect a Vec<Option<(Content, Content)>> of the unrecognized keys and values in the input. These would be used for deserializing o inside Builder, but when deserializing Default, the vector would not be used and would correctly trigger the "collection is never read" warning.

    error: collection is never read
       --> test_suite/tests/test_gen.rs:722:25
        |
    722 |     #[derive(Serialize, Deserialize)]
        |                         ^^^^^^^^^^^
        |
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collection_is_never_read
    note: the lint level is defined here
       --> test_suite/tests/test_gen.rs:22:9
        |
    22  | #![deny(clippy::collection_is_never_read)]
        |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        = note: this error originates in the derive macro `Deserialize` (in Nightly builds, run with -Z macro-backtrace for more info)
    error: collection is never read
       --> test_suite/tests/test_gen.rs:728:25
        |
    728 |     #[derive(Serialize, Deserialize)]
        |                         ^^^^^^^^^^^
        |
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collection_is_never_read
        = note: this error originates in the derive macro `Deserialize` (in Nightly builds, run with -Z macro-backtrace for more info)
    error: found both `σ` and `o` as identifiers, which look alike
       --> test_suite/tests/test_gen.rs:734:13
        |
    292 |         σ: f64,
        |         - other identifier used here
    ...
    734 |             o: T,
        |             ^ this identifier can be confused with `σ`
        |
    note: the lint level is defined here
       --> test_suite/tests/test_gen.rs:5:9
        |
    5   | #![deny(warnings)]
        |         ^^^^^^^^
        = note: `#[deny(confusable_idents)]` implied by `#[deny(warnings)]`
@dtolnay dtolnay merged commit c3eaf76 into serde-rs:master Aug 8, 2024
15 checks passed
@dtolnay dtolnay deleted the flatten branch August 8, 2024 01:52
@Mingun
Copy link
Contributor

Mingun commented Aug 9, 2024

A more complete fix for this is #2567. Please consider to merge it

# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
None yet
Development

Successfully merging this pull request may close these issues.

error: collection is never read on #[derive(Deserialize)]
2 participants