Clippy lints / Style
Clippy lint · Style · checked with Clippy 0.1.99
clippy::new_ret_no_self: Checks for new not returning a type that contains Self
What it meansChecks for new not returning a type that contains Self. It is in the style group and warns by default.
Does it matter?
As a convention, new methods are used to make a new instance of a type.
Code that works but is not idiomatic Rust. Warns by default.
How to fix it
Clippy does not fix this one automatically. Change the code by hand:
Flagged
impl Foo {
fn new() -> NotAFoo {
}
}
Write this instead
struct Bar(Foo);
impl Foo {
// Bad. The type name must contain `Self`
fn new() -> Bar {
}
}
Turn it off, or on
Allow it where it does not fit your code, as narrowly as you can:
On one item
#[allow(clippy::new_ret_no_self)]
fn my_function() { /* ... */ }Whole crate (Cargo.toml)
[lints.clippy]
new_ret_no_self = "allow"One run
cargo clippy -- -A clippy::new-ret-no-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.
Clippy's own documentation
What it does
Checks for new not returning a type that contains Self.
Why is this bad?
As a convention, new methods are used to make a new
instance of a type.
Example
In an impl block:
impl Foo {
fn new() -> NotAFoo {
}
}
struct Bar(Foo);
impl Foo {
// Bad. The type name must contain `Self`
fn new() -> Bar {
}
}
impl Foo {
// Good. Return type contains `Self`
fn new() -> Result<Foo, FooError> {
}
}
Or in a trait definition:
pub trait Trait {
// Bad. The type name must contain `Self`
fn new();
}
pub trait Trait {
// Good. Return type contains `Self`
fn new() -> Self;
}
From the Clippy lint list (0.1.99), part of the Rust project, MIT or Apache-2.0. Official entry.
Related lints
- needless_returnunneeded `return` statement
- new_without_defaultChecks for public types with a pub fn new() -> Self method and no implementation of Default
- len_zeroChecks for getting the length of something via .len() just to compare to zero, and suggests using .is_empty() where applicable
- needless_return_with_question_markChecks for return statements on Err paired with the ? operator
- neg_multiplyChecks for multiplication by -1 as a form of negation
- non_minimal_cfgunneeded sub `cfg` when there is only one condition
- nonstandard_macro_bracesuse of irregular braces for `vec!` macro
All 847 Clippy lints · Rust compiler errors · Cargo.toml checker
Up next
Related lintclippy::needless_returnunneeded `return` statementRead it next →Did this answer your question?