diff options
| author | Guillaume Gomez <guillaume1.gomez@gmail.com> | 2024-01-12 15:37:43 +0100 |
|---|---|---|
| committer | Guillaume Gomez <guillaume1.gomez@gmail.com> | 2024-01-12 17:37:09 +0100 |
| commit | c8cd09a8e60ce2aae86963d3c8e7d63f33203f55 (patch) | |
| tree | d22eb01aa340142358a2d4118b1ccaff4cbcb4ae | |
| parent | 74db4b7f6d136abb138af2aabce4132c1f04b7ec (diff) | |
| download | rust-c8cd09a8e60ce2aae86963d3c8e7d63f33203f55.tar.gz rust-c8cd09a8e60ce2aae86963d3c8e7d63f33203f55.zip | |
Fix false positive in `PartialEq` check in `unconditional_recursion` lint
| -rw-r--r-- | clippy_lints/src/unconditional_recursion.rs | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/clippy_lints/src/unconditional_recursion.rs b/clippy_lints/src/unconditional_recursion.rs index e90306ded61..2c283002087 100644 --- a/clippy_lints/src/unconditional_recursion.rs +++ b/clippy_lints/src/unconditional_recursion.rs @@ -167,7 +167,15 @@ fn check_partial_eq(cx: &LateContext<'_>, method_span: Span, method_def_id: Loca false } }, - ExprKind::MethodCall(segment, _receiver, &[_arg], _) if segment.ident.name == name.name => { + ExprKind::MethodCall(segment, receiver, &[_arg], _) if segment.ident.name == name.name => { + if let Some(ty) = cx.typeck_results().expr_ty_opt(receiver) + && let Some(ty_id) = get_ty_def_id(ty) + && self_arg != ty_id + { + // Since this called on a different type, the lint should not be + // triggered here. + return; + } if let Some(fn_id) = cx.typeck_results().type_dependent_def_id(expr.hir_id) && let Some(trait_id) = cx.tcx.trait_of_item(fn_id) && trait_id == trait_def_id |
