]> git.lizzy.rs Git - rust.git/blob - clippy_lints/src/double_parens.rs
Fix `iterator_step_by_zero` description in declaration
[rust.git] / clippy_lints / src / double_parens.rs
1 use crate::utils::span_lint;
2 use rustc::declare_lint_pass;
3 use rustc::lint::{EarlyContext, EarlyLintPass, LintArray, LintPass};
4 use rustc_session::declare_tool_lint;
5 use syntax::ast::*;
6
7 declare_clippy_lint! {
8     /// **What it does:** Checks for unnecessary double parentheses.
9     ///
10     /// **Why is this bad?** This makes code harder to read and might indicate a
11     /// mistake.
12     ///
13     /// **Known problems:** None.
14     ///
15     /// **Example:**
16     /// ```rust
17     /// # fn foo(bar: usize) {}
18     /// ((0));
19     /// foo((0));
20     /// ((1, 2));
21     /// ```
22     pub DOUBLE_PARENS,
23     complexity,
24     "Warn on unnecessary double parentheses"
25 }
26
27 declare_lint_pass!(DoubleParens => [DOUBLE_PARENS]);
28
29 impl EarlyLintPass for DoubleParens {
30     fn check_expr(&mut self, cx: &EarlyContext<'_>, expr: &Expr) {
31         if expr.span.from_expansion() {
32             return;
33         }
34
35         match expr.kind {
36             ExprKind::Paren(ref in_paren) => match in_paren.kind {
37                 ExprKind::Paren(_) | ExprKind::Tup(_) => {
38                     span_lint(
39                         cx,
40                         DOUBLE_PARENS,
41                         expr.span,
42                         "Consider removing unnecessary double parentheses",
43                     );
44                 },
45                 _ => {},
46             },
47             ExprKind::Call(_, ref params) => {
48                 if params.len() == 1 {
49                     let param = &params[0];
50                     if let ExprKind::Paren(_) = param.kind {
51                         span_lint(
52                             cx,
53                             DOUBLE_PARENS,
54                             param.span,
55                             "Consider removing unnecessary double parentheses",
56                         );
57                     }
58                 }
59             },
60             ExprKind::MethodCall(_, ref params) => {
61                 if params.len() == 2 {
62                     let param = &params[1];
63                     if let ExprKind::Paren(_) = param.kind {
64                         span_lint(
65                             cx,
66                             DOUBLE_PARENS,
67                             param.span,
68                             "Consider removing unnecessary double parentheses",
69                         );
70                     }
71                 }
72             },
73             _ => {},
74         }
75     }
76 }