less false positives for approx_const and float_cmp

This commit is contained in:
llogiq 2015-09-11 15:30:08 +02:00
parent aefad45ee7
commit 681bce925f
2 changed files with 10 additions and 2 deletions

View file

@ -1,8 +1,9 @@
use rustc::lint::*;
use rustc::metadata::cstore::crate_metadata;
use rustc_front::hir::*;
use syntax::codemap::Span;
use std::borrow::Borrow;
use std::f64::consts as f64;
use utils::span_lint;
declare_lint! {
@ -31,6 +32,13 @@ impl LintPass for ApproxConstant {
fn check_expr(&mut self, cx: &Context, e: &Expr) {
if let &ExprLit(ref lit) = &e.node {
if let Some(res) = cx.tcx.def_map.borrow().get(&e.id) {
let krate = res.def_id().krate;
let cdata = &cx.sess().cstore.get_crate_data(krate);
let crate_data : &crate_metadata = cdata.borrow();
let name = &crate_data.name;
if name == "f32" || name == "f64" { return; }
}
check_lit(cx, lit, e.span);
}
}

View file

@ -93,7 +93,7 @@ impl LintPass for FloatCmp {
return;
}
if let Some(name) = get_item_name(cx, expr) {
if name == "eq" || name == "ne" ||
if name == "eq" || name == "ne" || name == "is_nan" ||
name.as_str().starts_with("eq_") ||
name.as_str().ends_with("_eq") {
return;