]> git.lizzy.rs Git - rust.git/blob - clippy_lints/src/double_parens.rs
Merge pull request #2021 from marcusklaas/needless-loop-2
[rust.git] / clippy_lints / src / double_parens.rs
1 use syntax::ast::*;
2 use rustc::lint::{EarlyContext, EarlyLintPass, LintArray, LintContext, LintPass};
3
4 /// **What it does:** Checks for unnecessary double parentheses.
5 ///
6 /// **Why is this bad?** This makes code harder to read and might indicate a
7 /// mistake.
8 ///
9 /// **Known problems:** None.
10 ///
11 /// **Example:**
12 /// ```rust
13 /// ((0))
14 /// foo((0))
15 /// ((1, 2))
16 /// ```
17 declare_lint! {
18     pub DOUBLE_PARENS, Warn,
19     "Warn on unnecessary double parentheses"
20 }
21
22 #[derive(Copy, Clone)]
23 pub struct DoubleParens;
24
25 impl LintPass for DoubleParens {
26     fn get_lints(&self) -> LintArray {
27         lint_array!(DOUBLE_PARENS)
28     }
29 }
30
31 impl EarlyLintPass for DoubleParens {
32     fn check_expr(&mut self, cx: &EarlyContext, expr: &Expr) {
33         match expr.node {
34             ExprKind::Paren(ref in_paren) => match in_paren.node {
35                 ExprKind::Paren(_) | ExprKind::Tup(_) => {
36                     cx.span_lint(DOUBLE_PARENS, expr.span, "Consider removing unnecessary double parentheses");
37                 },
38                 _ => {},
39             },
40             ExprKind::Call(_, ref params) => if params.len() == 1 {
41                 let param = &params[0];
42                 if let ExprKind::Paren(_) = param.node {
43                     cx.span_lint(DOUBLE_PARENS, param.span, "Consider removing unnecessary double parentheses");
44                 }
45             },
46             ExprKind::MethodCall(_, ref params) => if params.len() == 2 {
47                 let param = &params[1];
48                 if let ExprKind::Paren(_) = param.node {
49                     cx.span_lint(DOUBLE_PARENS, param.span, "Consider removing unnecessary double parentheses");
50                 }
51             },
52             _ => {},
53         }
54     }
55 }