Skip to content

Commit 51b5272

Browse files
committed
Fix bug found during review
rust-lang/rust-clippy#13286 (comment)
1 parent 5c2f6db commit 51b5272

File tree

3 files changed

+52
-14
lines changed

3 files changed

+52
-14
lines changed

clippy_lints/src/lifetimes.rs

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,12 @@ use rustc_errors::Applicability;
66
use rustc_hir::FnRetTy::Return;
77
use rustc_hir::intravisit::nested_filter::{self as hir_nested_filter, NestedFilter};
88
use rustc_hir::intravisit::{
9-
Visitor, walk_fn_decl, walk_generic_arg, walk_generics, walk_impl_item_ref, walk_item, walk_param_bound,
9+
Visitor, walk_fn_decl, walk_generic_args, walk_generics, walk_impl_item_ref, walk_item, walk_param_bound,
1010
walk_poly_trait_ref, walk_trait_ref, walk_ty, walk_where_predicate,
1111
};
1212
use rustc_hir::{
13-
BareFnTy, BodyId, FnDecl, FnSig, GenericArg, GenericBound, GenericParam, GenericParamKind, Generics, Impl,
14-
ImplItem, ImplItemKind, Item, ItemKind, Lifetime, LifetimeName, LifetimeParamKind, Node, PolyTraitRef,
13+
BareFnTy, BodyId, FnDecl, FnSig, GenericArg, GenericArgs, GenericBound, GenericParam, GenericParamKind, Generics,
14+
Impl, ImplItem, ImplItemKind, Item, ItemKind, Lifetime, LifetimeName, LifetimeParamKind, Node, PolyTraitRef,
1515
PredicateOrigin, TraitFn, TraitItem, TraitItemKind, Ty, TyKind, WherePredicate, lang_items,
1616
};
1717
use rustc_lint::{LateContext, LateLintPass, LintContext};
@@ -494,14 +494,14 @@ fn has_where_lifetimes<'tcx>(cx: &LateContext<'tcx>, generics: &'tcx Generics<'_
494494
struct Usage {
495495
lifetime: Lifetime,
496496
in_where_predicate: bool,
497-
in_generic_arg: bool,
497+
in_generics_arg: bool,
498498
}
499499

500500
struct LifetimeChecker<'cx, 'tcx, F> {
501501
cx: &'cx LateContext<'tcx>,
502502
map: FxHashMap<LocalDefId, Vec<Usage>>,
503503
where_predicate_depth: usize,
504-
generic_arg_depth: usize,
504+
generic_args_depth: usize,
505505
phantom: std::marker::PhantomData<F>,
506506
}
507507

@@ -512,7 +512,7 @@ impl<'cx, 'tcx, F> LifetimeChecker<'cx, 'tcx, F> {
512512
cx,
513513
map,
514514
where_predicate_depth: 0,
515-
generic_arg_depth: 0,
515+
generic_args_depth: 0,
516516
phantom: std::marker::PhantomData,
517517
}
518518
}
@@ -533,7 +533,7 @@ where
533533
usages.push(Usage {
534534
lifetime: *lifetime,
535535
in_where_predicate: self.where_predicate_depth != 0,
536-
in_generic_arg: self.generic_arg_depth != 0,
536+
in_generics_arg: self.generic_args_depth != 0,
537537
});
538538
}
539539
}
@@ -544,10 +544,10 @@ where
544544
self.where_predicate_depth -= 1;
545545
}
546546

547-
fn visit_generic_arg(&mut self, generic_arg: &'tcx GenericArg<'tcx>) -> Self::Result {
548-
self.generic_arg_depth += 1;
549-
walk_generic_arg(self, generic_arg);
550-
self.generic_arg_depth -= 1;
547+
fn visit_generic_args(&mut self, generic_args: &'tcx GenericArgs<'tcx>) -> Self::Result {
548+
self.generic_args_depth += 1;
549+
walk_generic_args(self, generic_args);
550+
self.generic_args_depth -= 1;
551551
}
552552

553553
fn nested_visit_map(&mut self) -> Self::Map {
@@ -574,7 +574,7 @@ fn report_extra_lifetimes<'tcx>(cx: &LateContext<'tcx>, func: &'tcx FnDecl<'_>,
574574
for (def_id, usages) in checker.map {
575575
if usages
576576
.iter()
577-
.all(|usage| usage.in_where_predicate && !usage.in_generic_arg)
577+
.all(|usage| usage.in_where_predicate && !usage.in_generics_arg)
578578
{
579579
span_lint(
580580
cx,
@@ -612,7 +612,7 @@ fn report_extra_impl_lifetimes<'tcx>(cx: &LateContext<'tcx>, impl_: &'tcx Impl<'
612612
for (&def_id, usages) in &checker.map {
613613
if usages
614614
.iter()
615-
.all(|usage| usage.in_where_predicate && !usage.in_generic_arg)
615+
.all(|usage| usage.in_where_predicate && !usage.in_generics_arg)
616616
{
617617
span_lint(
618618
cx,
@@ -646,7 +646,7 @@ fn report_elidable_impl_lifetimes<'tcx>(
646646
}
647647
| Usage {
648648
lifetime,
649-
in_generic_arg: false,
649+
in_generics_arg: false,
650650
..
651651
},
652652
] = usages.as_slice()

tests/ui/needless_lifetimes.fixed

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -543,4 +543,23 @@ mod issue5787 {
543543
}
544544
}
545545

546+
// https://github.com/rust-lang/rust-clippy/pull/13286#issuecomment-2374245772
547+
mod rayon {
548+
trait ParallelIterator {
549+
type Item;
550+
}
551+
552+
struct Copied<I: ParallelIterator> {
553+
base: I,
554+
}
555+
556+
impl<'a, T, I> ParallelIterator for Copied<I>
557+
where
558+
I: ParallelIterator<Item = &'a T>,
559+
T: 'a + Copy + Send + Sync,
560+
{
561+
type Item = T;
562+
}
563+
}
564+
546565
fn main() {}

tests/ui/needless_lifetimes.rs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -543,4 +543,23 @@ mod issue5787 {
543543
}
544544
}
545545

546+
// https://github.com/rust-lang/rust-clippy/pull/13286#issuecomment-2374245772
547+
mod rayon {
548+
trait ParallelIterator {
549+
type Item;
550+
}
551+
552+
struct Copied<I: ParallelIterator> {
553+
base: I,
554+
}
555+
556+
impl<'a, T, I> ParallelIterator for Copied<I>
557+
where
558+
I: ParallelIterator<Item = &'a T>,
559+
T: 'a + Copy + Send + Sync,
560+
{
561+
type Item = T;
562+
}
563+
}
564+
546565
fn main() {}

0 commit comments

Comments
 (0)