1 use crate::utils::span_lint;
2 use rustc::declare_lint_pass;
3 use rustc::lint::{EarlyContext, EarlyLintPass, LintArray, LintPass};
4 use rustc_session::declare_tool_lint;
8 /// **What it does:** Checks for unnecessary double parentheses.
10 /// **Why is this bad?** This makes code harder to read and might indicate a
13 /// **Known problems:** None.
17 /// # fn foo(bar: usize) {}
24 "Warn on unnecessary double parentheses"
27 declare_lint_pass!(DoubleParens => [DOUBLE_PARENS]);
29 impl EarlyLintPass for DoubleParens {
30 fn check_expr(&mut self, cx: &EarlyContext<'_>, expr: &Expr) {
31 if expr.span.from_expansion() {
36 ExprKind::Paren(ref in_paren) => match in_paren.kind {
37 ExprKind::Paren(_) | ExprKind::Tup(_) => {
42 "Consider removing unnecessary double parentheses",
47 ExprKind::Call(_, ref params) => {
48 if params.len() == 1 {
49 let param = ¶ms[0];
50 if let ExprKind::Paren(_) = param.kind {
55 "Consider removing unnecessary double parentheses",
60 ExprKind::MethodCall(_, ref params) => {
61 if params.len() == 2 {
62 let param = ¶ms[1];
63 if let ExprKind::Paren(_) = param.kind {
68 "Consider removing unnecessary double parentheses",