about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJason Newcomb <jsnewcomb@pm.me>2024-12-11 02:17:28 +0000
committerGitHub <noreply@github.com>2024-12-11 02:17:28 +0000
commitc2d23ad0df5b3603ea0a1d2f4892fb84faaf8a3f (patch)
treedebad8c5f99699e00d6ef4b13372778f5a8856db
parent59740a8eb1081fba7a25b60ab7d7acae98f1d3bd (diff)
parentf51f72b400b554effa48811534219430b68f3861 (diff)
downloadrust-c2d23ad0df5b3603ea0a1d2f4892fb84faaf8a3f.tar.gz
rust-c2d23ad0df5b3603ea0a1d2f4892fb84faaf8a3f.zip
Detect shadowing in pattern field (#13797)
Fix #13795

changelog: [`shadow_same`]: detect shadowing as a pattern field
-rw-r--r--clippy_lints/src/shadow.rs2
-rw-r--r--tests/ui/shadow.rs8
-rw-r--r--tests/ui/shadow.stderr14
3 files changed, 22 insertions, 2 deletions
diff --git a/clippy_lints/src/shadow.rs b/clippy_lints/src/shadow.rs
index 49d22377119..83199ba0f70 100644
--- a/clippy_lints/src/shadow.rs
+++ b/clippy_lints/src/shadow.rs
@@ -263,7 +263,7 @@ fn is_self_shadow(cx: &LateContext<'_>, pat: &Pat<'_>, mut expr: &Expr<'_>, hir_
 fn find_init<'tcx>(cx: &LateContext<'tcx>, hir_id: HirId) -> Option<(&'tcx Expr<'tcx>, Option<HirId>)> {
     for (hir_id, node) in cx.tcx.hir().parent_iter(hir_id) {
         let init = match node {
-            Node::Arm(_) | Node::Pat(_) | Node::Param(_) => continue,
+            Node::Arm(_) | Node::Pat(_) | Node::PatField(_) | Node::Param(_) => continue,
             Node::Expr(expr) => match expr.kind {
                 ExprKind::Match(e, _, _) | ExprKind::Let(&LetExpr { init: e, .. }) => Some((e, None)),
                 // If we're a closure argument, then a parent call is also an associated item.
diff --git a/tests/ui/shadow.rs b/tests/ui/shadow.rs
index 30b96277f99..31944f5ef1b 100644
--- a/tests/ui/shadow.rs
+++ b/tests/ui/shadow.rs
@@ -133,4 +133,12 @@ fn shadow_closure() {
         .collect();
 }
 
+struct Issue13795 {
+    value: i32,
+}
+
+fn issue13795(value: Issue13795) {
+    let Issue13795 { value, .. } = value;
+}
+
 fn main() {}
diff --git a/tests/ui/shadow.stderr b/tests/ui/shadow.stderr
index 5d2d7060450..c8c524b3a2f 100644
--- a/tests/ui/shadow.stderr
+++ b/tests/ui/shadow.stderr
@@ -304,5 +304,17 @@ note: previous binding is here
 LL |         .map(|i| i.map(|i| i - 10))
    |               ^
 
-error: aborting due to 25 previous errors
+error: `value` is shadowed by itself in `value`
+  --> tests/ui/shadow.rs:141:22
+   |
+LL |     let Issue13795 { value, .. } = value;
+   |                      ^^^^^
+   |
+note: previous binding is here
+  --> tests/ui/shadow.rs:140:15
+   |
+LL | fn issue13795(value: Issue13795) {
+   |               ^^^^^
+
+error: aborting due to 26 previous errors