rust-lang / rust-lang/rust-clippy

Manual map 2021 false negative

Open
#7,876 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

C-bug I-false-negative
Dominant language
Rust
Stars
13.5k
Forks
2.2k
Avg merge
2d 10h
Merged PRs (30d)
32

Description

Lint name: manual_map

The 2021 edition made closure capturing smarter. We can now make some suggestions that previously wouldn't compile.
Edition Docs

I tried this code:

This is the test case for issue #6797

    let x1 = (Some(String::new()), 0);
    let x2 = x1.0;

    match x2 {
        Some(x) => Some((x, x1.1)),
        None => None,
    };

I expected to see this happen:
This recommendation if I'm using 2021.

    x2.map(|x| Some((x, x1.1)));

Instead, this happened:
No, warning. It's a false negative.


playground

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the manual_map lint and reproduce the supplied Rust example in the linked Rust Playground using the 2021 edition. Compare its behavior with the expected map suggestion; done means the example receives the appropriate warning without regressing existing manual_map cases.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust
Domain
tooling
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
38/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.