mirror of
https://github.com/rust-lang/rust.git
synced 2026-05-17 15:13:24 +03:00
Refactor double_parens:
* Merge control flow before emission * Check the AST before the macro check
This commit is contained in:
@@ -40,35 +40,29 @@
|
||||
|
||||
impl EarlyLintPass for DoubleParens {
|
||||
fn check_expr(&mut self, cx: &EarlyContext<'_>, expr: &Expr) {
|
||||
if expr.span.from_expansion() {
|
||||
return;
|
||||
}
|
||||
|
||||
let msg: &str = "consider removing unnecessary double parentheses";
|
||||
|
||||
match expr.kind {
|
||||
ExprKind::Paren(ref in_paren) => match in_paren.kind {
|
||||
ExprKind::Paren(_) | ExprKind::Tup(_) => {
|
||||
span_lint(cx, DOUBLE_PARENS, expr.span, msg);
|
||||
},
|
||||
_ => {},
|
||||
let span = match &expr.kind {
|
||||
ExprKind::Paren(in_paren) if matches!(in_paren.kind, ExprKind::Paren(_) | ExprKind::Tup(_)) => expr.span,
|
||||
ExprKind::Call(_, params)
|
||||
if let [param] = &**params
|
||||
&& let ExprKind::Paren(_) = param.kind =>
|
||||
{
|
||||
param.span
|
||||
},
|
||||
ExprKind::Call(_, ref params) => {
|
||||
if params.len() == 1 {
|
||||
let param = ¶ms[0];
|
||||
if let ExprKind::Paren(_) = param.kind {
|
||||
span_lint(cx, DOUBLE_PARENS, param.span, msg);
|
||||
}
|
||||
}
|
||||
ExprKind::MethodCall(call)
|
||||
if let [arg] = &*call.args
|
||||
&& let ExprKind::Paren(_) = arg.kind =>
|
||||
{
|
||||
arg.span
|
||||
},
|
||||
ExprKind::MethodCall(ref call) => {
|
||||
if let [ref arg] = call.args[..] {
|
||||
if let ExprKind::Paren(_) = arg.kind {
|
||||
span_lint(cx, DOUBLE_PARENS, arg.span, msg);
|
||||
}
|
||||
}
|
||||
},
|
||||
_ => {},
|
||||
_ => return,
|
||||
};
|
||||
if !expr.span.from_expansion() {
|
||||
span_lint(
|
||||
cx,
|
||||
DOUBLE_PARENS,
|
||||
span,
|
||||
"consider removing unnecessary double parentheses",
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user