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.
18 pub DOUBLE_PARENS, Warn,
19 "Warn on unnecessary double parentheses"
22 #[derive(Copy, Clone)]
23 pub struct DoubleParens;
25 impl LintPass for DoubleParens {
26 fn get_lints(&self) -> LintArray {
27 lint_array!(DOUBLE_PARENS)
31 impl EarlyLintPass for DoubleParens {
32 fn check_expr(&mut self, cx: &EarlyContext, expr: &Expr) {
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");
40 ExprKind::Call(_, ref params) => if params.len() == 1 {
41 let param = ¶ms[0];
42 if let ExprKind::Paren(_) = param.node {
43 cx.span_lint(DOUBLE_PARENS, param.span, "Consider removing unnecessary double parentheses");
46 ExprKind::MethodCall(_, ref params) => if params.len() == 2 {
47 let param = ¶ms[1];
48 if let ExprKind::Paren(_) = param.node {
49 cx.span_lint(DOUBLE_PARENS, param.span, "Consider removing unnecessary double parentheses");