diff options
| -rw-r--r-- | clippy_lints/src/shadow.rs | 7 | ||||
| -rw-r--r-- | tests/ui/shadow.rs | 6 | ||||
| -rw-r--r-- | tests/ui/shadow.stderr | 14 |
3 files changed, 25 insertions, 2 deletions
diff --git a/clippy_lints/src/shadow.rs b/clippy_lints/src/shadow.rs index 5f82aed872c..f6880af0cab 100644 --- a/clippy_lints/src/shadow.rs +++ b/clippy_lints/src/shadow.rs @@ -105,11 +105,16 @@ impl<'tcx> LateLintPass<'tcx> for Shadow { PatKind::Binding(_, hir_id, ident, _) => (hir_id, ident), _ => return, }; + + if pat.span.desugaring_kind().is_some() { + return; + } + if ident.span.from_expansion() || ident.span.is_dummy() { return; } - let HirId { owner, local_id } = id; + let HirId { owner, local_id } = id; // get (or insert) the list of items for this owner and symbol let data = self.bindings.last_mut().unwrap(); let items_with_name = data.entry(ident.name).or_default(); diff --git a/tests/ui/shadow.rs b/tests/ui/shadow.rs index 55caef59f7f..06f6949b66f 100644 --- a/tests/ui/shadow.rs +++ b/tests/ui/shadow.rs @@ -79,4 +79,10 @@ fn question_mark() -> Option<()> { None } +pub async fn foo1(_a: i32) {} + +pub async fn foo2(_a: i32, _b: i64) { + let _b = _a; +} + fn main() {} diff --git a/tests/ui/shadow.stderr b/tests/ui/shadow.stderr index feed6e1ba8b..dcc7d4e6b2f 100644 --- a/tests/ui/shadow.stderr +++ b/tests/ui/shadow.stderr @@ -241,5 +241,17 @@ note: previous binding is here LL | let _ = |[x]: [u32; 1]| { | ^ -error: aborting due to 20 previous errors +error: `_b` shadows a previous, unrelated binding + --> $DIR/shadow.rs:85:9 + | +LL | let _b = _a; + | ^^ + | +note: previous binding is here + --> $DIR/shadow.rs:84:28 + | +LL | pub async fn foo2(_a: i32, _b: i64) { + | ^^ + +error: aborting due to 21 previous errors |
