2 use rustc::lint::{EarlyContext, EarlyLintPass, LintArray, LintContext, LintPass};
4 /// **What it does:** Checks for unnecessary double parentheses.
6 /// **Why is this bad?** This makes code harder to read and might indicate a
9 /// **Known problems:** None.
17 declare_clippy_lint! {
20 "Warn on unnecessary double parentheses"
23 #[derive(Copy, Clone)]
24 pub struct DoubleParens;
26 impl LintPass for DoubleParens {
27 fn get_lints(&self) -> LintArray {
28 lint_array!(DOUBLE_PARENS)
32 impl EarlyLintPass for DoubleParens {
33 fn check_expr(&mut self, cx: &EarlyContext, expr: &Expr) {
35 ExprKind::Paren(ref in_paren) => match in_paren.node {
36 ExprKind::Paren(_) | ExprKind::Tup(_) => {
37 cx.span_lint(DOUBLE_PARENS, expr.span, "Consider removing unnecessary double parentheses");
41 ExprKind::Call(_, ref params) => if params.len() == 1 {
42 let param = ¶ms[0];
43 if let ExprKind::Paren(_) = param.node {
44 cx.span_lint(DOUBLE_PARENS, param.span, "Consider removing unnecessary double parentheses");
47 ExprKind::MethodCall(_, ref params) => if params.len() == 2 {
48 let param = ¶ms[1];
49 if let ExprKind::Paren(_) = param.node {
50 cx.span_lint(DOUBLE_PARENS, param.span, "Consider removing unnecessary double parentheses");