Rollup merge of #58883 - estebank:unused-closure-arg, r=varkor

Suggest appropriate code for unused field when destructuring pattern

Fix #56472.
This commit is contained in:
Pietro Albini 2019-03-08 09:41:47 +01:00 committed by GitHub
commit 3005b4d918
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 54 additions and 1 deletions

View 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);
})
};

View file

@ -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();
}

View file

@ -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