Skip to content

Commit f642dc4

Browse files
authored
Rollup merge of #66983 - weiznich:bugfix/issue_66295, r=estebank
Fix `unused_parens` triggers on macro by example code Fix #66295 Unfortunately this does also break [an existing test](https://github.com/rust-lang/rust/blob/4787e97475de6be9487e3d9255a9c2d3c0bf9252/src/test/ui/lint/issue-47775-nested-macro-unnecessary-parens-arg.rs#L22). I'm not sure how to handle that, because that seems to be quite similar to the allowed cases If this gets accepted it would be great to backport this fix to beta.
2 parents 9860a4e + ab3f4fd commit f642dc4

5 files changed

+23
-30
lines changed

src/librustc_lint/unused.rs

+3-1
Original file line numberDiff line numberDiff line change
@@ -355,7 +355,9 @@ impl UnusedParens {
355355
match value.kind {
356356
ast::ExprKind::Paren(ref inner) => {
357357
if !Self::is_expr_parens_necessary(inner, followed_by_block) &&
358-
value.attrs.is_empty() {
358+
value.attrs.is_empty() &&
359+
!value.span.from_expansion()
360+
{
359361
let expr_text = if let Ok(snippet) = cx.sess().source_map()
360362
.span_to_snippet(value.span) {
361363
snippet

src/test/ui/lint/issue-47775-nested-macro-unnecessary-parens-arg.rs

-3
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,7 @@ macro_rules! the_worship_the_heart_lifts_above {
1717

1818
macro_rules! and_the_heavens_reject_not {
1919
() => {
20-
// ↓ But let's test that we still lint for unused parens around
21-
// function args inside of simple, one-deep macros.
2220
#[allow(dead_code)] fn the_night_for_the_morrow() -> Option<isize> { Some((2)) }
23-
//~^ WARN unnecessary parentheses around function argument
2421
}
2522
}
2623

src/test/ui/lint/issue-47775-nested-macro-unnecessary-parens-arg.stderr

-15
This file was deleted.

src/test/ui/lint/lint-unnecessary-parens.rs

+9
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,12 @@ fn passes_unused_parens_lint() -> &'static (dyn Trait) {
2525
panic!()
2626
}
2727

28+
macro_rules! baz {
29+
($($foo:expr),+) => {
30+
($($foo),*)
31+
}
32+
}
33+
2834
fn main() {
2935
foo();
3036
bar((true)); //~ ERROR unnecessary parentheses around function argument
@@ -55,4 +61,7 @@ fn main() {
5561
let mut _a = (0); //~ ERROR unnecessary parentheses around assigned value
5662
_a = (0); //~ ERROR unnecessary parentheses around assigned value
5763
_a += (1); //~ ERROR unnecessary parentheses around assigned value
64+
65+
let _a = baz!(3, 4);
66+
let _b = baz!(3);
5867
}

src/test/ui/lint/lint-unnecessary-parens.stderr

+11-11
Original file line numberDiff line numberDiff line change
@@ -23,69 +23,69 @@ LL | fn unused_parens_around_return_type() -> (u32) {
2323
| ^^^^^ help: remove these parentheses
2424

2525
error: unnecessary parentheses around function argument
26-
--> $DIR/lint-unnecessary-parens.rs:30:9
26+
--> $DIR/lint-unnecessary-parens.rs:36:9
2727
|
2828
LL | bar((true));
2929
| ^^^^^^ help: remove these parentheses
3030

3131
error: unnecessary parentheses around `if` condition
32-
--> $DIR/lint-unnecessary-parens.rs:32:8
32+
--> $DIR/lint-unnecessary-parens.rs:38:8
3333
|
3434
LL | if (true) {}
3535
| ^^^^^^ help: remove these parentheses
3636

3737
error: unnecessary parentheses around `while` condition
38-
--> $DIR/lint-unnecessary-parens.rs:33:11
38+
--> $DIR/lint-unnecessary-parens.rs:39:11
3939
|
4040
LL | while (true) {}
4141
| ^^^^^^ help: remove these parentheses
4242

4343
warning: denote infinite loops with `loop { ... }`
44-
--> $DIR/lint-unnecessary-parens.rs:33:5
44+
--> $DIR/lint-unnecessary-parens.rs:39:5
4545
|
4646
LL | while (true) {}
4747
| ^^^^^^^^^^^^ help: use `loop`
4848
|
4949
= note: `#[warn(while_true)]` on by default
5050

5151
error: unnecessary parentheses around `match` head expression
52-
--> $DIR/lint-unnecessary-parens.rs:35:11
52+
--> $DIR/lint-unnecessary-parens.rs:41:11
5353
|
5454
LL | match (true) {
5555
| ^^^^^^ help: remove these parentheses
5656

5757
error: unnecessary parentheses around `let` head expression
58-
--> $DIR/lint-unnecessary-parens.rs:38:16
58+
--> $DIR/lint-unnecessary-parens.rs:44:16
5959
|
6060
LL | if let 1 = (1) {}
6161
| ^^^ help: remove these parentheses
6262

6363
error: unnecessary parentheses around `let` head expression
64-
--> $DIR/lint-unnecessary-parens.rs:39:19
64+
--> $DIR/lint-unnecessary-parens.rs:45:19
6565
|
6666
LL | while let 1 = (2) {}
6767
| ^^^ help: remove these parentheses
6868

6969
error: unnecessary parentheses around method argument
70-
--> $DIR/lint-unnecessary-parens.rs:53:24
70+
--> $DIR/lint-unnecessary-parens.rs:59:24
7171
|
7272
LL | X { y: false }.foo((true));
7373
| ^^^^^^ help: remove these parentheses
7474

7575
error: unnecessary parentheses around assigned value
76-
--> $DIR/lint-unnecessary-parens.rs:55:18
76+
--> $DIR/lint-unnecessary-parens.rs:61:18
7777
|
7878
LL | let mut _a = (0);
7979
| ^^^ help: remove these parentheses
8080

8181
error: unnecessary parentheses around assigned value
82-
--> $DIR/lint-unnecessary-parens.rs:56:10
82+
--> $DIR/lint-unnecessary-parens.rs:62:10
8383
|
8484
LL | _a = (0);
8585
| ^^^ help: remove these parentheses
8686

8787
error: unnecessary parentheses around assigned value
88-
--> $DIR/lint-unnecessary-parens.rs:57:11
88+
--> $DIR/lint-unnecessary-parens.rs:63:11
8989
|
9090
LL | _a += (1);
9191
| ^^^ help: remove these parentheses

0 commit comments

Comments
 (0)