1 use crate::utils::{in_macro_or_desugar, span_lint};
2 use rustc::lint::{EarlyContext, EarlyLintPass, LintArray, LintPass};
3 use rustc::{declare_lint_pass, declare_tool_lint};
7 /// **What it does:** Checks for unnecessary double parentheses.
9 /// **Why is this bad?** This makes code harder to read and might indicate a
12 /// **Known problems:** None.
22 "Warn on unnecessary double parentheses"
25 declare_lint_pass!(DoubleParens => [DOUBLE_PARENS]);
27 impl EarlyLintPass for DoubleParens {
28 fn check_expr(&mut self, cx: &EarlyContext<'_>, expr: &Expr) {
29 if in_macro_or_desugar(expr.span) {
34 ExprKind::Paren(ref in_paren) => match in_paren.node {
35 ExprKind::Paren(_) | ExprKind::Tup(_) => {
40 "Consider removing unnecessary double parentheses",
45 ExprKind::Call(_, ref params) => {
46 if params.len() == 1 {
47 let param = ¶ms[0];
48 if let ExprKind::Paren(_) = param.node {
53 "Consider removing unnecessary double parentheses",
58 ExprKind::MethodCall(_, ref params) => {
59 if params.len() == 2 {
60 let param = ¶ms[1];
61 if let ExprKind::Paren(_) = param.node {
66 "Consider removing unnecessary double parentheses",