Clippy lints / Style
Clippy lint · Style · checked with Clippy 0.1.99
clippy::new_without_default: Checks for public types with a pub fn new() -> Self method and no implementation of Default
What it meansChecks for public types with a pub fn new() -> Self method and no implementation of Default. It is in the style group and warns by default.
Does it matter?
The user might expect to be able to use Default as the type can be constructed without arguments.
Code that works but is not idiomatic Rust. Warns by default.
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
pub struct Foo(Bar);
impl Foo {
pub fn new() -> Self {
Foo(Bar::new())
}
}
Write this instead
pub struct Foo(Bar);
impl Default for Foo {
fn default() -> Self {
Foo::new()
}
}
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_without_default)]
fn my_function() { /* ... */ }Whole crate (Cargo.toml)
[lints.clippy]
new_without_default = "allow"One run
cargo clippy -- -A clippy::new-without-defaultThe [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 public types with a pub fn new() -> Self method and no
implementation of
Default.
Why is this bad?
The user might expect to be able to use
Default as the
type can be constructed without arguments.
Example
pub struct Foo(Bar);
impl Foo {
pub fn new() -> Self {
Foo(Bar::new())
}
}
To fix the lint, add a Default implementation that delegates to new:
pub struct Foo(Bar);
impl Default for Foo {
fn default() -> Self {
Foo::new()
}
}
Past names
- new_without_default_derive
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
- len_zeroChecks for getting the length of something via .len() just to compare to zero, and suggests using .is_empty() where applicable
- needless_borrowthis expression creates a reference which is immediately dereferenced by the compiler
- 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
- new_ret_no_selfChecks for new not returning a type that contains Self
- non_minimal_cfgunneeded sub `cfg` when there is only one condition
- nonstandard_macro_bracesuse of irregular braces for `vec!` macro
- obfuscated_if_elsethis method chain can be written more clearly with `if .. else ..`
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?