]> git.lizzy.rs Git - rust.git/blob - clippy_lints/src/double_parens.rs
Auto merge of #5235 - flip1995:tag_deploy_fix, r=phansch
[rust.git] / clippy_lints / src / double_parens.rs
1 use crate::utils::span_lint;
2 use rustc_ast::ast::{Expr, ExprKind};
3 use rustc_lint::{EarlyContext, EarlyLintPass};
4 use rustc_session::{declare_lint_pass, declare_tool_lint};
5
6 declare_clippy_lint! {
7     /// **What it does:** Checks for unnecessary double parentheses.
8     ///
9     /// **Why is this bad?** This makes code harder to read and might indicate a
10     /// mistake.
11     ///
12     /// **Known problems:** None.
13     ///
14     /// **Example:**
15     /// ```rust
16     /// # fn foo(bar: usize) {}
17     /// ((0));
18     /// foo((0));
19     /// ((1, 2));
20     /// ```
21     pub DOUBLE_PARENS,
22     complexity,
23     "Warn on unnecessary double parentheses"
24 }
25
26 declare_lint_pass!(DoubleParens => [DOUBLE_PARENS]);
27
28 impl EarlyLintPass for DoubleParens {
29     fn check_expr(&mut self, cx: &EarlyContext<'_>, expr: &Expr) {
30         if expr.span.from_expansion() {
31             return;
32         }
33
34         match expr.kind {
35             ExprKind::Paren(ref in_paren) => match in_paren.kind {
36                 ExprKind::Paren(_) | ExprKind::Tup(_) => {
37                     span_lint(
38                         cx,
39                         DOUBLE_PARENS,
40                         expr.span,
41                         "Consider removing unnecessary double parentheses",
42                     );
43                 },
44                 _ => {},
45             },
46             ExprKind::Call(_, ref params) => {
47                 if params.len() == 1 {
48                     let param = &params[0];
49                     if let ExprKind::Paren(_) = param.kind {
50                         span_lint(
51                             cx,
52                             DOUBLE_PARENS,
53                             param.span,
54                             "Consider removing unnecessary double parentheses",
55                         );
56                     }
57                 }
58             },
59             ExprKind::MethodCall(_, ref params) => {
60                 if params.len() == 2 {
61                     let param = &params[1];
62                     if let ExprKind::Paren(_) = param.kind {
63                         span_lint(
64                             cx,
65                             DOUBLE_PARENS,
66                             param.span,
67                             "Consider removing unnecessary double parentheses",
68                         );
69                     }
70                 }
71             },
72             _ => {},
73         }
74     }
75 }