Skip to content

Commit

Permalink
Fixes #7915
Browse files Browse the repository at this point in the history
Fix shadow_same's positive false for async function's params:

Example Code:
```rust
#![deny(clippy::shadow_same)]

pub async fn foo(_a: i32) {
}
```
Output:
```
error: `_a` is shadowed by itself in `_a
```

Hir:
```rust
pub async fn foo(_a: i32)
 ->
     /*impl Trait*/ #[lang = "from_generator"](move |mut _task_context|
                                                   {
                                                       let _a = _a;
                                                       { let _t = { }; _t }
                                                   })
```

Skip checking async function's params.

changelog: Fix shadow_same's positive false for async function's params
  • Loading branch information
surechen committed Nov 21, 2021
1 parent bb58dc8 commit 846c0be
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 2 deletions.
7 changes: 6 additions & 1 deletion clippy_lints/src/shadow.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down
6 changes: 6 additions & 0 deletions tests/ui/shadow.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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() {}
14 changes: 13 additions & 1 deletion tests/ui/shadow.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -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

0 comments on commit 846c0be

Please sign in to comment.