Rollup merge of #59993 - euclio:unused-ref-field, r=estebank

include mode in unused binding suggestion span

Fixes #54180.
This commit is contained in:
Mazdak Farrokhzad 2019-04-16 05:14:25 +02:00 committed by GitHub
commit a95ca298a6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 119 additions and 5 deletions

View File

@ -1626,11 +1626,18 @@ impl<'a, 'tcx> Liveness<'a, 'tcx> {
); );
if self.ir.variable_is_shorthand(var) { if self.ir.variable_is_shorthand(var) {
err.multipart_suggestion( if let Node::Binding(pat) = self.ir.tcx.hir().get_by_hir_id(hir_id) {
"try ignoring the field", // Handle `ref` and `ref mut`.
spans.iter().map(|span| (*span, format!("{}: _", name))).collect(), let spans = spans.iter()
Applicability::MachineApplicable .map(|_span| (pat.span, format!("{}: _", name)))
); .collect();
err.multipart_suggestion(
"try ignoring the field",
spans,
Applicability::MachineApplicable,
);
}
} else { } else {
err.multipart_suggestion( err.multipart_suggestion(
"consider prefixing with an underscore", "consider prefixing with an underscore",

View File

@ -0,0 +1,34 @@
// run-rustfix
#![deny(unused)]
pub struct S {
pub f1: i32,
}
pub struct Point {
pub x: i32,
pub y: i32,
}
pub enum E {
Variant { field: String }
}
pub fn foo(arg: &E) {
match arg {
E::Variant { field: _ } => (), //~ ERROR unused variable
}
}
fn main() {
let s = S { f1: 123 };
let S { f1: _ } = s; //~ ERROR unused variable
let points = vec![Point { x: 1, y: 2 }];
let _: i32 = points.iter().map(|Point { x: _, y }| y).sum(); //~ ERROR unused variable
match (Point { x: 1, y: 2 }) {
Point { y, x: _ } => y, //~ ERROR unused variable
};
}

View File

@ -0,0 +1,34 @@
// run-rustfix
#![deny(unused)]
pub struct S {
pub f1: i32,
}
pub struct Point {
pub x: i32,
pub y: i32,
}
pub enum E {
Variant { field: String }
}
pub fn foo(arg: &E) {
match arg {
E::Variant { ref field } => (), //~ ERROR unused variable
}
}
fn main() {
let s = S { f1: 123 };
let S { ref f1 } = s; //~ ERROR unused variable
let points = vec![Point { x: 1, y: 2 }];
let _: i32 = points.iter().map(|Point { x, y }| y).sum(); //~ ERROR unused variable
match (Point { x: 1, y: 2 }) {
Point { y, ref mut x } => y, //~ ERROR unused variable
};
}

View File

@ -0,0 +1,39 @@
error: unused variable: `field`
--> $DIR/issue-54180-unused-ref-field.rs:20:26
|
LL | E::Variant { ref field } => (),
| ----^^^^^
| |
| help: try ignoring the field: `field: _`
|
note: lint level defined here
--> $DIR/issue-54180-unused-ref-field.rs:3:9
|
LL | #![deny(unused)]
| ^^^^^^
= note: #[deny(unused_variables)] implied by #[deny(unused)]
error: unused variable: `x`
--> $DIR/issue-54180-unused-ref-field.rs:29:45
|
LL | let _: i32 = points.iter().map(|Point { x, y }| y).sum();
| ^ help: try ignoring the field: `x: _`
error: unused variable: `f1`
--> $DIR/issue-54180-unused-ref-field.rs:26:17
|
LL | let S { ref f1 } = s;
| ----^^
| |
| help: try ignoring the field: `f1: _`
error: unused variable: `x`
--> $DIR/issue-54180-unused-ref-field.rs:32:28
|
LL | Point { y, ref mut x } => y,
| --------^
| |
| help: try ignoring the field: `x: _`
error: aborting due to 4 previous errors