Auto merge of #5966 - 1c3t3a:1c3t3a-dev-5819-fix, r=Manishearth
Corrects the float_equality_without_abs lint Fixes an issue in the `float_equality_without_abs` lint. The lint suggestion was configured in a way that it lints the whole error and not just the subtraction part. In the current configuration the lint would suggest to change the expression in a wrong way, e.g. ```rust let _ = (a - b) < f32::EPSILON; // before let _ = (a - b).abs(); // after ``` This was dicovered by @flip1995. (See discussion of PR #5952). Also the suggestion is now formatted via `utils::sugg`. changelog: none
This commit is contained in:
commit
64c4bb0d2b
2 changed files with 47 additions and 27 deletions
|
|
@ -1,5 +1,6 @@
|
|||
use crate::utils::{match_qpath, paths, snippet, span_lint_and_sugg};
|
||||
use crate::utils::{match_qpath, paths, span_lint_and_then, sugg};
|
||||
use if_chain::if_chain;
|
||||
use rustc_ast::util::parser::AssocOp;
|
||||
use rustc_errors::Applicability;
|
||||
use rustc_hir::{BinOpKind, Expr, ExprKind};
|
||||
use rustc_lint::{LateContext, LateLintPass};
|
||||
|
|
@ -84,27 +85,24 @@ impl<'tcx> LateLintPass<'tcx> for FloatEqualityWithoutAbs {
|
|||
if let ty::Float(_) = t_val_r.kind;
|
||||
|
||||
then {
|
||||
// get the snippet string
|
||||
let lhs_string = snippet(
|
||||
cx,
|
||||
lhs.span,
|
||||
"(...)",
|
||||
);
|
||||
let sug_l = sugg::Sugg::hir(cx, &val_l, "..");
|
||||
let sug_r = sugg::Sugg::hir(cx, &val_r, "..");
|
||||
// format the suggestion
|
||||
let suggestion = if lhs_string.starts_with('(') {
|
||||
format!("{}.abs()", lhs_string)
|
||||
} else {
|
||||
format!("({}).abs()", lhs_string)
|
||||
};
|
||||
let suggestion = format!("{}.abs()", sugg::make_assoc(AssocOp::Subtract, &sug_l, &sug_r).maybe_par());
|
||||
// spans the lint
|
||||
span_lint_and_sugg(
|
||||
span_lint_and_then(
|
||||
cx,
|
||||
FLOAT_EQUALITY_WITHOUT_ABS,
|
||||
expr.span,
|
||||
"float equality check without `.abs()`",
|
||||
"add `.abs()`",
|
||||
suggestion,
|
||||
Applicability::MaybeIncorrect,
|
||||
| diag | {
|
||||
diag.span_suggestion(
|
||||
lhs.span,
|
||||
"add `.abs()`",
|
||||
suggestion,
|
||||
Applicability::MaybeIncorrect,
|
||||
);
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue