Skip to content

Commit

Permalink
Auto merge of #46980 - zackmdavis:and_the_case_of_the_needlessly_pare…
Browse files Browse the repository at this point in the history
…nthesized_arguments, r=petrochenkov

in which the unused-parens lint comes to cover function and method args

Resolves #46137.
  • Loading branch information
bors committed Dec 27, 2017
2 parents 3fd27b2 + b7739f3 commit 5ccdeea
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 6 deletions.
2 changes: 1 addition & 1 deletion src/liballoc/vec_deque.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2480,7 +2480,7 @@ impl<T> From<VecDeque<T>> for Vec<T> {
if other.is_contiguous() {
ptr::copy(buf.offset(tail as isize), buf, len);
} else {
if (tail - head) >= cmp::min((cap - tail), head) {
if (tail - head) >= cmp::min(cap - tail, head) {
// There is enough free space in the centre for the shortest block so we can
// do this in at most three copy moves.
if (cap - tail) > head {
Expand Down
12 changes: 12 additions & 0 deletions src/librustc_lint/unused.rs
Original file line number Diff line number Diff line change
Expand Up @@ -302,6 +302,18 @@ impl EarlyLintPass for UnusedParens {
Assign(_, ref value) => (value, "assigned value", false),
AssignOp(.., ref value) => (value, "assigned value", false),
InPlace(_, ref value) => (value, "emplacement value", false),
Call(_, ref args) => {
for arg in args {
self.check_unused_parens_core(cx, arg, "function argument", false)
}
return;
},
MethodCall(_, ref args) => {
for arg in &args[1..] { // first "argument" is self (which sometimes needs parens)
self.check_unused_parens_core(cx, arg, "method argument", false)
}
return;
}
_ => return,
};
self.check_unused_parens_core(cx, &value, msg, struct_lit_needs_parens);
Expand Down
12 changes: 7 additions & 5 deletions src/test/compile-fail/lint-unnecessary-parens.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,19 +13,19 @@
#[derive(Eq, PartialEq)]
struct X { y: bool }
impl X {
fn foo(&self) -> bool { self.y }
fn foo(&self, conjunct: bool) -> bool { self.y && conjunct }
}

fn foo() -> isize {
return (1); //~ ERROR unnecessary parentheses around `return` value
}
fn bar() -> X {
return (X { y: true }); //~ ERROR unnecessary parentheses around `return` value
fn bar(y: bool) -> X {
return (X { y }); //~ ERROR unnecessary parentheses around `return` value
}

fn main() {
foo();
bar();
bar((true)); //~ ERROR unnecessary parentheses around function argument

if (true) {} //~ ERROR unnecessary parentheses around `if` condition
while (true) {} //~ ERROR unnecessary parentheses around `while` condition
Expand All @@ -40,13 +40,15 @@ fn main() {
if (X { y: true } == v) {}
if (X { y: false }.y) {}

while (X { y: false }.foo()) {}
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
Expand Down

0 comments on commit 5ccdeea

Please sign in to comment.