Ignore new-without-default lint when new
method has generic types
There may be no sensible `Default` impl if the result of `new` depends on a type parameter.
This commit is contained in:
parent
7056018335
commit
1ce3cbf9c4
@ -108,6 +108,11 @@ fn check_fn(
|
||||
// can't be implemented by default
|
||||
return;
|
||||
}
|
||||
if !sig.generics.ty_params.is_empty() {
|
||||
// when the result of `new()` depends on a type parameter we should not require an
|
||||
// impl of `Default`
|
||||
return;
|
||||
}
|
||||
if decl.inputs.is_empty() && name == "new" && cx.access_levels.is_reachable(id) {
|
||||
let self_ty = cx.tcx
|
||||
.type_of(cx.tcx.hir.local_def_id(cx.tcx.hir.get_parent(id)));
|
||||
|
@ -76,4 +76,11 @@ fn new() -> Private { unimplemented!() } // We don't lint private items
|
||||
impl Const {
|
||||
pub const fn new() -> Const { Const } // const fns can't be implemented via Default
|
||||
}
|
||||
|
||||
pub struct IgnoreGenericNew;
|
||||
|
||||
impl IgnoreGenericNew {
|
||||
pub fn new<T>() -> Self { IgnoreGenericNew } // the derived Default does not make sense here as the result depends on T
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
|
Loading…
Reference in New Issue
Block a user