1 use crate::utils::{in_macro, span_lint};
2 use rustc::lint::{EarlyContext, EarlyLintPass, LintArray, LintPass};
3 use rustc::{declare_tool_lint, lint_array};
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 #[derive(Copy, Clone)]
26 pub struct DoubleParens;
28 impl LintPass for DoubleParens {
29 fn get_lints(&self) -> LintArray {
30 lint_array!(DOUBLE_PARENS)
33 fn name(&self) -> &'static str {
38 impl EarlyLintPass for DoubleParens {
39 fn check_expr(&mut self, cx: &EarlyContext<'_>, expr: &Expr) {
40 if in_macro(expr.span) {
45 ExprKind::Paren(ref in_paren) => match in_paren.node {
46 ExprKind::Paren(_) | ExprKind::Tup(_) => {
51 "Consider removing unnecessary double parentheses",
56 ExprKind::Call(_, ref params) => {
57 if params.len() == 1 {
58 let param = ¶ms[0];
59 if let ExprKind::Paren(_) = param.node {
64 "Consider removing unnecessary double parentheses",
69 ExprKind::MethodCall(_, ref params) => {
70 if params.len() == 2 {
71 let param = ¶ms[1];
72 if let ExprKind::Paren(_) = param.node {
77 "Consider removing unnecessary double parentheses",