Skip to content

Commit

Permalink
Rollup merge of rust-lang#59993 - euclio:unused-ref-field, r=estebank
Browse files Browse the repository at this point in the history
include mode in unused binding suggestion span

Fixes rust-lang#54180.
  • Loading branch information
Centril authored Apr 16, 2019
2 parents 426e747 + 74560f3 commit a95ca29
Show file tree
Hide file tree
Showing 4 changed files with 119 additions and 5 deletions.
17 changes: 12 additions & 5 deletions src/librustc/middle/liveness.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1626,11 +1626,18 @@ impl<'a, 'tcx> Liveness<'a, 'tcx> {
);

if self.ir.variable_is_shorthand(var) {
err.multipart_suggestion(
"try ignoring the field",
spans.iter().map(|span| (*span, format!("{}: _", name))).collect(),
Applicability::MachineApplicable
);
if let Node::Binding(pat) = self.ir.tcx.hir().get_by_hir_id(hir_id) {
// Handle `ref` and `ref mut`.
let spans = spans.iter()
.map(|_span| (pat.span, format!("{}: _", name)))
.collect();

err.multipart_suggestion(
"try ignoring the field",
spans,
Applicability::MachineApplicable,
);
}
} else {
err.multipart_suggestion(
"consider prefixing with an underscore",
Expand Down
34 changes: 34 additions & 0 deletions src/test/ui/lint/issue-54180-unused-ref-field.fixed
Original file line number Diff line number Diff line change
@@ -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
};
}
34 changes: 34 additions & 0 deletions src/test/ui/lint/issue-54180-unused-ref-field.rs
Original file line number Diff line number Diff line change
@@ -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
};
}
39 changes: 39 additions & 0 deletions src/test/ui/lint/issue-54180-unused-ref-field.stderr
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit a95ca29

Please sign in to comment.