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