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