rust-lang / rust-lang/rust-clippy

New Lint: Use rest pattern instead of ignoring values when destructuring structs and enums

Open
#10,666 3 comments 1 reaction 0 assignees View on GitHub

Nobody has claimed this yet.

A-lint
Dominant language
Rust
Stars
13.5k
Forks
2.2k
Avg merge
2d 10h
Merged PRs (30d)
32

Description

What it does

This lint will use a rest pattern (..), instead of ignoring values with _ when destructuring structs and enums.

I'm suggesting to only do this for _, and leave as they are the cases where the values are named and prefixed with an underscore.

Lint Name

ignored_field_when_destructuring

Category

style

Advantage
  • This reduces noise and makes it more obvious which fields are relevant, especially when there are many ignored values.
Drawbacks
  • This will prevent a compilation error if additional fields are added to the struct. Some programmers may want that error to remind them to do something with the newly added fields.
Example
struct Point {
    x: i32,
    y: i32,
}

let origin = Point { x: 0, y: 0 };
let Point { x, y: _ } = origin;

println!("x is {}", x);

Could be written as:

struct Point {
    x: i32,
    y: i32,
}

let origin = Point { x: 0, y: 0 };
let Point { x, .. } = origin;

println!("x is {}", x);

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 by locating the Clippy implementation and tests for the proposed ignored_field_when_destructuring lint. Use the struct and enum examples in the issue to define the accepted rest-pattern cases, including the distinction between _ and underscore-prefixed names, then verify the lint behavior with Clippy's relevant tests.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust
Domain
tooling
Issue type
Feature
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.