use crate::utils::{get_trait_def_id, implements_trait, snippet_opt, span_lint_and_then, SpanlessEq};
use crate::utils::{higher, sugg};
-use rustc::hir;
-use rustc::hir::intravisit::{walk_expr, NestedVisitorMap, Visitor};
-use rustc::lint::{LateContext, LateLintPass, LintArray, LintPass};
-use rustc::{declare_tool_lint, lint_array};
+use crate::rustc::hir;
+use crate::rustc::hir::intravisit::{walk_expr, NestedVisitorMap, Visitor};
+use crate::rustc::lint::{LateContext, LateLintPass, LintArray, LintPass};
+use crate::rustc::{declare_tool_lint, lint_array};
use if_chain::if_chain;
-use syntax::ast;
+use crate::syntax::ast;
+use crate::rustc_errors::Applicability;
/// **What it does:** Checks for `a = a op b` or `a = b commutative_op a`
/// patterns.
let r = &sugg::Sugg::hir(cx, rhs, "..");
let long =
format!("{} = {}", snip_a, sugg::make_binop(higher::binop(op.node), a, r));
- db.span_suggestion(
+ db.span_suggestion_with_applicability(
expr.span,
&format!(
"Did you mean {} = {} {} {} or {}? Consider replacing it with",
long
),
format!("{} {}= {}", snip_a, op.node.as_str(), snip_r),
+ Applicability::Unspecified,
);
- db.span_suggestion(expr.span, "or", long);
+ db.span_suggestion_with_applicability(
+ expr.span,
+ "or",
+ long,
+ Applicability::Unspecified,
+ );
}
},
);
if let (Some(snip_a), Some(snip_r)) =
(snippet_opt(cx, assignee.span), snippet_opt(cx, rhs.span))
{
- db.span_suggestion(
+ db.span_suggestion_with_applicability(
expr.span,
"replace it with",
format!("{} {}= {}", snip_a, op.node.as_str(), snip_r),
+ Applicability::Unspecified,
);
}
},
}
fn is_commutative(op: hir::BinOpKind) -> bool {
- use rustc::hir::BinOpKind::*;
+ use crate::rustc::hir::BinOpKind::*;
match op {
Add | Mul | And | Or | BitXor | BitAnd | BitOr | Eq | Ne => true,
Sub | Div | Rem | Shl | Shr | Lt | Le | Ge | Gt => false,