Clippy lints / Nursery
Clippy lint · Nursery · checked with Clippy 0.1.99
clippy::use_self: unnecessary structure name repetition
What it meansChecks for unnecessary repetition of structure name when a replacement with Self is applicable. It is in the nursery group and off by default.
What you see
warning: unnecessary structure name repetition --> main.rs:5:17 | 5 | fn new() -> Foo { | ^^^ help: use the applicable keyword: `Self` | = help: for further information visit https://rust-lang.github.io/rust-clippy/stable/index.html#use_self = note: `-W clippy::use-self` implied by `-W clippy::nursery`
Real output of Clippy 0.1.99 (Rust 1.99) on the example below. Names and line numbers in yours will differ.
Does it matter?
Unnecessary repetition. Mixed use of Self and struct name feels inconsistent.
New lints still being finished. Off by default and may have false positives.
How to fix it
Clippy can fix this one for you: run cargo clippy --fix (add --allow-dirty if you have uncommitted changes). Review the diff before you commit.
Flagged
struct Foo;
impl Foo {
fn new() -> Foo {
Foo {}
}
}
Write this instead
struct Foo;
impl Foo {
fn new() -> Self {
Self {}
}
}
Turn it off, or on
It is off by default. To use it, set it to warn or deny:
Whole crate (Cargo.toml)
[lints.clippy]
use_self = "warn"In code
#![warn(clippy::use_self)]One run
cargo clippy -- -W clippy::use-selfThe [lints] table needs Rust 1.74 or newer. In a workspace, put it under [workspace.lints.clippy] and add [lints] workspace = true to each member.
Settings in clippy.toml
msrv: The minimum rust version that the project supports. Defaults to the rust-version field in Cargo.tomlrecursive-self-in-type-definitions: Whether the type itself in a struct or enum should be replaced with Self when encountering recursive types.
Clippy's own documentation
What it does
Checks for unnecessary repetition of structure name when a
replacement with Self is applicable.
Why is this bad?
Unnecessary repetition. Mixed use of Self and struct
name
feels inconsistent.
Known problems
- Unaddressed false negative in fn bodies of trait implementations
Example
struct Foo;
impl Foo {
fn new() -> Foo {
Foo {}
}
}
could be
struct Foo;
impl Foo {
fn new() -> Self {
Self {}
}
}
Configuration
-
msrv: The minimum rust version that the project supports. Defaults to therust-versionfield inCargo.toml(default:
current version) -
recursive-self-in-type-definitions: Whether the type itself in a struct or enum should be replaced withSelfwhen encountering recursive types.(default:
true)
From the Clippy lint list (0.1.99), part of the Rust project, MIT or Apache-2.0. Official entry.
Related lints
- redundant_cloneChecks for a redundant clone() (and its relatives) which clones an owned value that is going to be dropped without further use
- unnecessary_struct_initializationunnecessary struct building
- unused_peekable`peek` never called on `Peekable` iterator
- unused_roundingused the `ceil` method with a whole number float
- useless_let_if_seqChecks for variable declarations immediately followed by a conditional affectation
- volatile_compositestype `main::MyDevice` is not volatile-compatible
- while_floatwhile condition comparing floats
All 847 Clippy lints · Rust compiler errors · Cargo.toml checker
Up next
Related lintclippy::redundant_cloneChecks for a redundant clone() (and its relatives) which clones an owned value that is going to be dropped without further useRead it next →Did this answer your question?