2 use rustc::lint::{EarlyContext, LintContext, LintArray, LintPass, EarlyLintPass};
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) => {
38 cx.span_lint(DOUBLE_PARENS, expr.span, "Consider removing unnecessary double parentheses");
43 ExprKind::Call(_, ref params) => {
44 if params.len() == 1 {
45 let param = ¶ms[0];
46 if let ExprKind::Paren(_) = param.node {
47 cx.span_lint(DOUBLE_PARENS, param.span, "Consider removing unnecessary double parentheses");
51 ExprKind::MethodCall(_, ref params) => {
52 if params.len() == 2 {
53 let param = ¶ms[1];
54 if let ExprKind::Paren(_) = param.node {
55 cx.span_lint(DOUBLE_PARENS, param.span, "Consider removing unnecessary double parentheses");