lint new_without_default on const fns too

This commit is contained in:
Centri3 2023-06-06 21:32:27 -05:00 committed by Catherine Flores
parent 237fbdd4da
commit f0adfe74b6
4 changed files with 28 additions and 9 deletions

View file

@ -75,10 +75,6 @@ impl<'tcx> LateLintPass<'tcx> for NewWithoutDefault {
if let hir::ImplItemKind::Fn(ref sig, _) = impl_item.kind {
let name = impl_item.ident.name;
let id = impl_item.owner_id;
if sig.header.constness == hir::Constness::Const {
// can't be implemented by default
return;
}
if sig.header.unsafety == hir::Unsafety::Unsafe {
// can't be implemented for unsafe new
return;

View file

@ -132,12 +132,18 @@ impl PrivateItem {
} // We don't lint private items on public structs
}
struct Const;
pub struct Const;
impl Default for Const {
fn default() -> Self {
Self::new()
}
}
impl Const {
pub const fn new() -> Const {
Const
} // const fns can't be implemented via Default
} // While Default is not const, it can still call const functions, so we should lint this
}
pub struct IgnoreGenericNew;

View file

@ -114,12 +114,12 @@ impl PrivateItem {
} // We don't lint private items on public structs
}
struct Const;
pub struct Const;
impl Const {
pub const fn new() -> Const {
Const
} // const fns can't be implemented via Default
} // While Default is not const, it can still call const functions, so we should lint this
}
pub struct IgnoreGenericNew;

View file

@ -55,6 +55,23 @@ LL + }
LL + }
|
error: you should consider adding a `Default` implementation for `Const`
--> $DIR/new_without_default.rs:120:5
|
LL | / pub const fn new() -> Const {
LL | | Const
LL | | } // While Default is not const, it can still call const functions, so we should lint this
| |_____^
|
help: try adding this
|
LL + impl Default for Const {
LL + fn default() -> Self {
LL + Self::new()
LL + }
LL + }
|
error: you should consider adding a `Default` implementation for `NewNotEqualToDerive`
--> $DIR/new_without_default.rs:180:5
|
@ -149,5 +166,5 @@ LL + }
LL + }
|
error: aborting due to 8 previous errors
error: aborting due to 9 previous errors