diff options
| author | llogiq <bogusandre@gmail.com> | 2015-08-25 20:11:03 +0200 |
|---|---|---|
| committer | llogiq <bogusandre@gmail.com> | 2015-08-25 20:11:03 +0200 |
| commit | 9012d8f1975829a1440fde6f6fd6158a239595c4 (patch) | |
| tree | eaeaaeea4424a1dd43508698521ddd0034be70f5 /src | |
| parent | 56cdd58ad2312ecd941ba6eca8ddb5d7061a6a21 (diff) | |
| download | rust-9012d8f1975829a1440fde6f6fd6158a239595c4.tar.gz rust-9012d8f1975829a1440fde6f6fd6158a239595c4.zip | |
fixed false positives on structs/enum variants
Diffstat (limited to 'src')
| -rw-r--r-- | src/shadow.rs | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/shadow.rs b/src/shadow.rs index c4f636ae112..2c16d9d78f4 100644 --- a/src/shadow.rs +++ b/src/shadow.rs @@ -65,13 +65,20 @@ fn check_decl(cx: &Context, decl: &Decl, bindings: &mut Vec<Name>) { } } +fn is_binding(cx: &Context, pat: &Pat) -> bool { + match cx.tcx.def_map.borrow().get(&pat.id).map(|d| d.full_def()) { + Some(DefVariant(..)) | Some(DefStruct(..)) => false, + _ => true + } +} + fn check_pat<T>(cx: &Context, pat: &Pat, init: &Option<T>, span: Span, bindings: &mut Vec<Name>) where T: Deref<Target=Expr> { //TODO: match more stuff / destructuring match pat.node { PatIdent(_, ref ident, ref inner) => { let name = ident.node.name; - if pat_is_binding(&cx.tcx.def_map, pat) { + if is_binding(cx, pat) { if bindings.contains(&name) { lint_shadow(cx, name, span, pat.span, init); } |
