Skip to content

Commit

Permalink
Rollup merge of rust-lang#55138 - zackmdavis:the_paren_trap, r=pnkfelix
Browse files Browse the repository at this point in the history
in which unused-parens suggestions heed what the user actually wrote

Aaron Hill pointed out that unnecessary parens around a macro call (paradigmatically, `format!`) yielded a suggestion of hideous macro-expanded code. `span_to_snippet` is fallable as far as the type system is concerned, so the pretty-printing can live on in the oft-neglected `else` branch.

Resolves rust-lang#55109.
  • Loading branch information
pietroalbini committed Oct 25, 2018
2 parents f81e47f + 475be10 commit 6dfeb76
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 11 deletions.
18 changes: 14 additions & 4 deletions src/librustc_lint/unused.rs
Original file line number Diff line number Diff line change
Expand Up @@ -284,8 +284,13 @@ impl UnusedParens {
parser::contains_exterior_struct_lit(&inner)
};
if !necessary {
let pattern = pprust::expr_to_string(value);
Self::remove_outer_parens(cx, value.span, &pattern, msg);
let expr_text = if let Ok(snippet) = cx.sess().source_map()
.span_to_snippet(value.span) {
snippet
} else {
pprust::expr_to_string(value)
};
Self::remove_outer_parens(cx, value.span, &expr_text, msg);
}
}
}
Expand All @@ -295,8 +300,13 @@ impl UnusedParens {
value: &ast::Pat,
msg: &str) {
if let ast::PatKind::Paren(_) = value.node {
let pattern = pprust::pat_to_string(value);
Self::remove_outer_parens(cx, value.span, &pattern, msg);
let pattern_text = if let Ok(snippet) = cx.sess().source_map()
.span_to_snippet(value.span) {
snippet
} else {
pprust::pat_to_string(value)
};
Self::remove_outer_parens(cx, value.span, &pattern_text, msg);
}
}

Expand Down
4 changes: 2 additions & 2 deletions src/test/ui/lint/suggestions.rs
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ fn main() {
while true {
//~^ WARN denote infinite loops
//~| HELP use `loop`
let mut a = (1);
let mut registry_no = (format!("NX-{}", 74205));
//~^ WARN does not need to be mutable
//~| HELP remove this `mut`
//~| WARN unnecessary parentheses
Expand All @@ -72,6 +72,6 @@ fn main() {
//~^ WARN this pattern is redundant
//~| HELP remove this
}
println!("{} {}", a, b);
println!("{} {}", registry_no, b);
}
}
10 changes: 5 additions & 5 deletions src/test/ui/lint/suggestions.stderr
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
warning: unnecessary parentheses around assigned value
--> $DIR/suggestions.rs:59:21
--> $DIR/suggestions.rs:59:31
|
LL | let mut a = (1);
| ^^^ help: remove these parentheses
LL | let mut registry_no = (format!("NX-{}", 74205));
| ^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove these parentheses
|
note: lint level defined here
--> $DIR/suggestions.rs:13:21
Expand All @@ -21,8 +21,8 @@ LL | #[no_debug] // should suggest removal of deprecated attribute
warning: variable does not need to be mutable
--> $DIR/suggestions.rs:59:13
|
LL | let mut a = (1);
| ----^
LL | let mut registry_no = (format!("NX-{}", 74205));
| ----^^^^^^^^^^^
| |
| help: remove this `mut`
|
Expand Down

0 comments on commit 6dfeb76

Please sign in to comment.