1 use crate::syntax::ast::*;
2 use crate::rustc::lint::{EarlyContext, EarlyLintPass, LintArray, LintContext, LintPass};
3 use crate::rustc::{declare_tool_lint, lint_array};
5 /// **What it does:** Checks for unnecessary double parentheses.
7 /// **Why is this bad?** This makes code harder to read and might indicate a
10 /// **Known problems:** None.
18 declare_clippy_lint! {
21 "Warn on unnecessary double parentheses"
24 #[derive(Copy, Clone)]
25 pub struct DoubleParens;
27 impl LintPass for DoubleParens {
28 fn get_lints(&self) -> LintArray {
29 lint_array!(DOUBLE_PARENS)
33 impl EarlyLintPass for DoubleParens {
34 fn check_expr(&mut self, cx: &EarlyContext<'_>, expr: &Expr) {
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");
42 ExprKind::Call(_, ref params) => if params.len() == 1 {
43 let param = ¶ms[0];
44 if let ExprKind::Paren(_) = param.node {
45 cx.span_lint(DOUBLE_PARENS, param.span, "Consider removing unnecessary double parentheses");
48 ExprKind::MethodCall(_, ref params) => if params.len() == 2 {
49 let param = ¶ms[1];
50 if let ExprKind::Paren(_) = param.node {
51 cx.span_lint(DOUBLE_PARENS, param.span, "Consider removing unnecessary double parentheses");