Skip to content

Commit

Permalink
Ignore new-without-default lint when new method has generic types
Browse files Browse the repository at this point in the history
There may be no sensible `Default` impl if the result of `new` depends
on a type parameter.
  • Loading branch information
scott-linder committed Jun 14, 2017
1 parent 7056018 commit 1ce3cbf
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 0 deletions.
5 changes: 5 additions & 0 deletions clippy_lints/src/new_without_default.rs
Expand Up @@ -108,6 +108,11 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for NewWithoutDefault {
// 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)));
Expand Down
7 changes: 7 additions & 0 deletions clippy_tests/examples/new_without_default.rs
Expand Up @@ -76,4 +76,11 @@ struct Const;
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() {}

0 comments on commit 1ce3cbf

Please sign in to comment.