| //@ run-rustfix |
| |
| #![deny(unused_parens)] |
| #![allow(while_true)] // for rustfix |
| |
| #[derive(Eq, PartialEq)] |
| struct X { y: bool } |
| impl X { |
| fn foo(&self, conjunct: bool) -> bool { self.y && conjunct } |
| } |
| |
| fn foo() -> isize { |
| return 1; //~ ERROR unnecessary parentheses around `return` value |
| } |
| fn bar(y: bool) -> X { |
| return X { y }; //~ ERROR unnecessary parentheses around `return` value |
| } |
| |
| pub fn unused_parens_around_return_type() -> u32 { //~ ERROR unnecessary parentheses around type |
| panic!() |
| } |
| |
| pub fn unused_parens_around_block_return() -> u32 { |
| let _foo = { |
| 5 //~ ERROR unnecessary parentheses around block return value |
| }; |
| 5 //~ ERROR unnecessary parentheses around block return value |
| } |
| |
| pub trait Trait { |
| fn test(&self); |
| } |
| |
| pub fn passes_unused_parens_lint() -> &'static (dyn Trait) { |
| panic!() |
| } |
| |
| pub fn parens_with_keyword(e: &[()]) -> i32 { |
| if true {} //~ ERROR unnecessary parentheses around `if` |
| while true {} //~ ERROR unnecessary parentheses around `while` |
| for _ in e {} //~ ERROR unnecessary parentheses around `for` |
| match 1 { _ => ()} //~ ERROR unnecessary parentheses around `match` |
| return 1; //~ ERROR unnecessary parentheses around `return` value |
| } |
| |
| macro_rules! baz { |
| ($($foo:expr),+) => { |
| ($($foo),*) |
| }; |
| } |
| |
| macro_rules! unit { |
| () => { |
| () |
| }; |
| } |
| |
| struct One; |
| |
| impl std::ops::Sub<One> for () { |
| type Output = i32; |
| fn sub(self, _: One) -> Self::Output { |
| -1 |
| } |
| } |
| |
| impl std::ops::Neg for One { |
| type Output = i32; |
| fn neg(self) -> Self::Output { |
| -1 |
| } |
| } |
| |
| pub const CONST_ITEM: usize = 10; //~ ERROR unnecessary parentheses around assigned value |
| pub static STATIC_ITEM: usize = 10; //~ ERROR unnecessary parentheses around assigned value |
| |
| fn main() { |
| foo(); |
| bar(true); //~ ERROR unnecessary parentheses around function argument |
| |
| if true {} //~ ERROR unnecessary parentheses around `if` condition |
| while true {} //~ ERROR unnecessary parentheses around `while` condition |
| match true { //~ ERROR unnecessary parentheses around `match` scrutinee expression |
| _ => {} |
| } |
| if let 1 = 1 {} //~ ERROR unnecessary parentheses around `let` scrutinee expression |
| while let 1 = 2 {} //~ ERROR unnecessary parentheses around `let` scrutinee expression |
| let v = X { y: false }; |
| // struct lits needs parens, so these shouldn't warn. |
| if (v == X { y: true }) {} |
| if (X { y: true } == v) {} |
| if (X { y: false }.y) {} |
| // this shouldn't warn, because the parens are necessary to disambiguate let chains |
| if let true = (true && false) {} |
| |
| while (X { y: false }.foo(true)) {} |
| while (true | X { y: false }.y) {} |
| |
| match (X { y: false }) { |
| _ => {} |
| } |
| |
| X { y: false }.foo(true); //~ ERROR unnecessary parentheses around method argument |
| |
| let mut _a = 0; //~ ERROR unnecessary parentheses around assigned value |
| _a = 0; //~ ERROR unnecessary parentheses around assigned value |
| _a += 1; //~ ERROR unnecessary parentheses around assigned value |
| |
| let mut _a = 3; //~ ERROR unnecessary parentheses around pattern |
| let mut _a = 3; //~ ERROR unnecessary parentheses around pattern |
| let mut _a = 3; //~ ERROR unnecessary parentheses around pattern |
| |
| let _a = 3; //~ ERROR unnecessary parentheses around pattern |
| let _a = 3; //~ ERROR unnecessary parentheses around pattern |
| let _a = 3; //~ ERROR unnecessary parentheses around pattern |
| |
| let _a = baz!(3, 4); |
| let _b = baz!(3); |
| |
| let _ = { |
| unit!() - One //~ ERROR unnecessary parentheses around block return value |
| } + { |
| unit![] - One //~ ERROR unnecessary parentheses around block return value |
| } + { |
| // FIXME: false positive. This parenthesis is required. |
| unit! {} - One //~ ERROR unnecessary parentheses around block return value |
| }; |
| |
| // Do *not* lint around `&raw` (but do lint when `&` creates a reference). |
| let mut x = 0; |
| let _r = &x; //~ ERROR unnecessary parentheses |
| let _r = &mut x; //~ ERROR unnecessary parentheses |
| let _r = (&raw const x); |
| let _r = (&raw mut x); |
| } |