]> git.lizzy.rs Git - rust.git/commitdiff
Suggest appropriate code for unused field when desrtucturing patttern
authorEsteban Küber <esteban@kuber.com.ar>
Sat, 2 Mar 2019 23:16:53 +0000 (15:16 -0800)
committerEsteban Küber <esteban@kuber.com.ar>
Sat, 2 Mar 2019 23:16:53 +0000 (15:16 -0800)
Fix #56472.

src/librustc/middle/liveness.rs
src/test/ui/suggestions/unused-closure-argument.rs [new file with mode: 0644]
src/test/ui/suggestions/unused-closure-argument.stderr [new file with mode: 0644]

index 76933a6e3484b02194d3341ba3b2bd0b6748c696..97f747c94a4123bdfea5d3146acc11d8b2f0fed6 100644 (file)
@@ -379,9 +379,22 @@ fn visit_fn<'a, 'tcx: 'a>(ir: &mut IrMaps<'a, 'tcx>,
     let body = ir.tcx.hir().body(body_id);
 
     for arg in &body.arguments {
+        let is_shorthand = match arg.pat.node {
+            crate::hir::PatKind::Struct(..) => true,
+            _ => false,
+        };
         arg.pat.each_binding(|_bm, hir_id, _x, ident| {
             debug!("adding argument {:?}", hir_id);
-            fn_maps.add_variable(Arg(hir_id, ident.name));
+            let var = if is_shorthand {
+                Local(LocalInfo {
+                    id: hir_id,
+                    name: ident.name,
+                    is_shorthand: true,
+                })
+            } else {
+                Arg(hir_id, ident.name)
+            };
+            fn_maps.add_variable(var);
         })
     };
 
diff --git a/src/test/ui/suggestions/unused-closure-argument.rs b/src/test/ui/suggestions/unused-closure-argument.rs
new file mode 100644 (file)
index 0000000..677003e
--- /dev/null
@@ -0,0 +1,20 @@
+#![deny(unused_variables)]
+
+struct Point {
+    x: i32,
+    y: i32,
+}
+
+fn main() {
+    let points = vec!(Point { x: 1, y: 2 }, Point { x: 3, y: 4 });
+
+    let _: i32 = points.iter()
+        .map(|Point { x, y }| y)
+        //~^ ERROR unused variable
+        .sum();
+
+    let _: i32 = points.iter()
+        .map(|x| 4)
+        //~^ ERROR unused variable
+        .sum();
+}
diff --git a/src/test/ui/suggestions/unused-closure-argument.stderr b/src/test/ui/suggestions/unused-closure-argument.stderr
new file mode 100644 (file)
index 0000000..5cfdd79
--- /dev/null
@@ -0,0 +1,20 @@
+error: unused variable: `x`
+  --> $DIR/unused-closure-argument.rs:12:23
+   |
+LL |         .map(|Point { x, y }| y)
+   |                       ^ help: try ignoring the field: `x: _`
+   |
+note: lint level defined here
+  --> $DIR/unused-closure-argument.rs:1:9
+   |
+LL | #![deny(unused_variables)]
+   |         ^^^^^^^^^^^^^^^^
+
+error: unused variable: `x`
+  --> $DIR/unused-closure-argument.rs:17:15
+   |
+LL |         .map(|x| 4)
+   |               ^ help: consider prefixing with an underscore: `_x`
+
+error: aborting due to 2 previous errors
+