X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=clippy_lints%2Fsrc%2Fif_not_else.rs;h=7019cfa8cc8f120715eeb8060dbe223456ca5143;hb=e5a5b0a0774625eebbe7b29c67b49dc6431544d1;hp=19554c7e20721ac3287c3e4705ce26147a3adc27;hpb=da7aebc342b7dae444912b98dedbab22bf2a224c;p=rust.git diff --git a/clippy_lints/src/if_not_else.rs b/clippy_lints/src/if_not_else.rs index 19554c7e207..7019cfa8cc8 100644 --- a/clippy_lints/src/if_not_else.rs +++ b/clippy_lints/src/if_not_else.rs @@ -1,59 +1,60 @@ //! lint on if branches that could be swapped so no `!` operation is necessary //! on the condition +use rustc::declare_lint_pass; use rustc::lint::{in_external_macro, EarlyContext, EarlyLintPass, LintArray, LintContext, LintPass}; -use rustc::{declare_tool_lint, lint_array}; +use rustc_session::declare_tool_lint; use syntax::ast::*; use crate::utils::span_help_and_lint; -/// **What it does:** Checks for usage of `!` or `!=` in an if condition with an -/// else branch. -/// -/// **Why is this bad?** Negations reduce the readability of statements. -/// -/// **Known problems:** None. -/// -/// **Example:** -/// ```rust -/// if !v.is_empty() { -/// a() -/// } else { -/// b() -/// } -/// ``` -/// -/// Could be written: -/// -/// ```rust -/// if v.is_empty() { -/// b() -/// } else { -/// a() -/// } -/// ``` declare_clippy_lint! { + /// **What it does:** Checks for usage of `!` or `!=` in an if condition with an + /// else branch. + /// + /// **Why is this bad?** Negations reduce the readability of statements. + /// + /// **Known problems:** None. + /// + /// **Example:** + /// ```rust + /// # let v: Vec = vec![]; + /// # fn a() {} + /// # fn b() {} + /// if !v.is_empty() { + /// a() + /// } else { + /// b() + /// } + /// ``` + /// + /// Could be written: + /// + /// ```rust + /// # let v: Vec = vec![]; + /// # fn a() {} + /// # fn b() {} + /// if v.is_empty() { + /// b() + /// } else { + /// a() + /// } + /// ``` pub IF_NOT_ELSE, pedantic, "`if` branches that could be swapped so no negation operation is necessary on the condition" } -pub struct IfNotElse; - -impl LintPass for IfNotElse { - fn get_lints(&self) -> LintArray { - lint_array!(IF_NOT_ELSE) - } -} +declare_lint_pass!(IfNotElse => [IF_NOT_ELSE]); impl EarlyLintPass for IfNotElse { fn check_expr(&mut self, cx: &EarlyContext<'_>, item: &Expr) { if in_external_macro(cx.sess(), item.span) { return; } - if let ExprKind::If(ref cond, _, Some(ref els)) = item.node { - if let ExprKind::Block(..) = els.node { - match cond.node { + if let ExprKind::If(ref cond, _, Some(ref els)) = item.kind { + if let ExprKind::Block(..) = els.kind { + match cond.kind { ExprKind::Unary(UnOp::Not, _) => { span_help_and_lint( cx,