Fix new_without_default FP on private type with trait impl (#15782)

Closes rust-lang/rust-clippy#15778

changelog: [`new_without_default`] fix FP on private type with trait
impl
This commit is contained in:
Jason Newcomb 2025-09-29 18:43:30 +00:00 committed by GitHub
commit dfd8b2d3ee
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 41 additions and 1 deletions

View file

@ -94,7 +94,7 @@ impl<'tcx> LateLintPass<'tcx> for NewWithoutDefault {
return;
}
if sig.decl.inputs.is_empty()
&& cx.effective_visibilities.is_reachable(impl_item.owner_id.def_id)
&& cx.effective_visibilities.is_exported(impl_item.owner_id.def_id)
&& let self_ty = cx.tcx.type_of(item.owner_id).instantiate_identity()
&& self_ty == return_ty(cx, impl_item.owner_id)
&& let Some(default_trait_id) = cx.tcx.get_diagnostic_item(sym::Default)

View file

@ -322,3 +322,23 @@ where
Self { _kv: None }
}
}
mod issue15778 {
pub struct Foo(Vec<i32>);
impl Foo {
pub fn new() -> Self {
Self(Vec::new())
}
}
impl<'a> IntoIterator for &'a Foo {
type Item = &'a i32;
type IntoIter = std::slice::Iter<'a, i32>;
fn into_iter(self) -> Self::IntoIter {
self.0.as_slice().iter()
}
}
}

View file

@ -265,3 +265,23 @@ where
Self { _kv: None }
}
}
mod issue15778 {
pub struct Foo(Vec<i32>);
impl Foo {
pub fn new() -> Self {
Self(Vec::new())
}
}
impl<'a> IntoIterator for &'a Foo {
type Item = &'a i32;
type IntoIter = std::slice::Iter<'a, i32>;
fn into_iter(self) -> Self::IntoIter {
self.0.as_slice().iter()
}
}
}