]> git.lizzy.rs Git - rust.git/blobdiff - clippy_lints/src/double_parens.rs
Implement the double_parens lint.
[rust.git] / clippy_lints / src / double_parens.rs
index 85611cd6c8592fd9f2a72d4beebd7266962fdf87..a5b469d9c6c909ae5e36fea107c3e0f68754de66 100644 (file)
@@ -1,5 +1,5 @@
 use syntax::ast::*;
-use rustc::lint::{EarlyContext, LintArray, LintPass, EarlyLintPass};
+use rustc::lint::{EarlyContext, LintContext, LintArray, LintPass, EarlyLintPass};
 
 /// **What it does:** Checks for unnecessary double parentheses.
 ///
@@ -30,6 +30,33 @@ fn get_lints(&self) -> LintArray {
 
 impl EarlyLintPass for DoubleParens {
     fn check_expr(&mut self, cx: &EarlyContext, expr: &Expr) {
-        // insert check here.
+        match expr.node {
+            ExprKind::Paren(ref in_paren) => {
+                match in_paren.node {
+                    ExprKind::Paren(_) |
+                    ExprKind::Tup(_) => {
+                        cx.span_lint(DOUBLE_PARENS, expr.span, "Consider removing unnecessary double parentheses");
+                    },
+                    _ => {},
+                }
+            },
+            ExprKind::Call(_, ref params) => {
+                if params.len() == 1 {
+                    let param = &params[0];
+                    if let ExprKind::Paren(_) = param.node {
+                        cx.span_lint(DOUBLE_PARENS, param.span, "Consider removing unnecessary double parentheses");
+                    }
+                }
+            },
+            ExprKind::MethodCall(_, _, ref params) => {
+                if params.len() == 2 {
+                    let param = &params[1];
+                    if let ExprKind::Paren(_) = param.node {
+                        cx.span_lint(DOUBLE_PARENS, param.span, "Consider removing unnecessary double parentheses");
+                    }
+                }
+            },
+            _ => {},
+        }
     }
 }