about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorllogiq <bogusandre@gmail.com>2015-08-25 20:11:03 +0200
committerllogiq <bogusandre@gmail.com>2015-08-25 20:11:03 +0200
commit9012d8f1975829a1440fde6f6fd6158a239595c4 (patch)
treeeaeaaeea4424a1dd43508698521ddd0034be70f5 /src
parent56cdd58ad2312ecd941ba6eca8ddb5d7061a6a21 (diff)
downloadrust-9012d8f1975829a1440fde6f6fd6158a239595c4.tar.gz
rust-9012d8f1975829a1440fde6f6fd6158a239595c4.zip
fixed false positives on structs/enum variants
Diffstat (limited to 'src')
-rw-r--r--src/shadow.rs9
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);
                 }