@@ -3,10 +3,10 @@ use clippy_utils::diagnostics::span_lint_and_help;
3
3
use clippy_utils:: msrvs:: { self , Msrv } ;
4
4
use rustc_ast:: ast:: { FloatTy , LitFloatType , LitKind } ;
5
5
use rustc_attr_parsing:: RustcVersion ;
6
- use rustc_hir:: { Expr , ExprKind } ;
6
+ use rustc_hir:: { HirId , Lit } ;
7
7
use rustc_lint:: { LateContext , LateLintPass } ;
8
8
use rustc_session:: impl_lint_pass;
9
- use rustc_span:: symbol;
9
+ use rustc_span:: { Span , symbol} ;
10
10
use std:: f64:: consts as f64;
11
11
12
12
declare_clippy_lint ! {
@@ -74,29 +74,15 @@ impl ApproxConstant {
74
74
}
75
75
}
76
76
77
- fn check_lit ( & self , cx : & LateContext < ' _ > , lit : & LitKind , e : & Expr < ' _ > ) {
78
- match * lit {
79
- LitKind :: Float ( s, LitFloatType :: Suffixed ( fty) ) => match fty {
80
- FloatTy :: F16 => self . check_known_consts ( cx, e, s, "f16" ) ,
81
- FloatTy :: F32 => self . check_known_consts ( cx, e, s, "f32" ) ,
82
- FloatTy :: F64 => self . check_known_consts ( cx, e, s, "f64" ) ,
83
- FloatTy :: F128 => self . check_known_consts ( cx, e, s, "f128" ) ,
84
- } ,
85
- // FIXME(f16_f128): add `f16` and `f128` when these types become stable.
86
- LitKind :: Float ( s, LitFloatType :: Unsuffixed ) => self . check_known_consts ( cx, e, s, "f{32, 64}" ) ,
87
- _ => ( ) ,
88
- }
89
- }
90
-
91
- fn check_known_consts ( & self , cx : & LateContext < ' _ > , e : & Expr < ' _ > , s : symbol:: Symbol , module : & str ) {
77
+ fn check_known_consts ( & self , cx : & LateContext < ' _ > , span : Span , s : symbol:: Symbol , module : & str ) {
92
78
let s = s. as_str ( ) ;
93
79
if s. parse :: < f64 > ( ) . is_ok ( ) {
94
80
for & ( constant, name, min_digits, msrv) in & KNOWN_CONSTS {
95
81
if is_approx_const ( constant, s, min_digits) && msrv. is_none_or ( |msrv| self . msrv . meets ( msrv) ) {
96
82
span_lint_and_help (
97
83
cx,
98
84
APPROX_CONSTANT ,
99
- e . span ,
85
+ span,
100
86
format ! ( "approximate value of `{module}::consts::{name}` found" ) ,
101
87
None ,
102
88
"consider using the constant directly" ,
@@ -111,9 +97,17 @@ impl ApproxConstant {
111
97
impl_lint_pass ! ( ApproxConstant => [ APPROX_CONSTANT ] ) ;
112
98
113
99
impl < ' tcx > LateLintPass < ' tcx > for ApproxConstant {
114
- fn check_expr ( & mut self , cx : & LateContext < ' tcx > , e : & ' tcx Expr < ' _ > ) {
115
- if let ExprKind :: Lit ( lit) = & e. kind {
116
- self . check_lit ( cx, & lit. node , e) ;
100
+ fn check_lit ( & mut self , cx : & LateContext < ' _ > , _hir_id : HirId , lit : & Lit , _negated : bool ) {
101
+ match lit. node {
102
+ LitKind :: Float ( s, LitFloatType :: Suffixed ( fty) ) => match fty {
103
+ FloatTy :: F16 => self . check_known_consts ( cx, lit. span , s, "f16" ) ,
104
+ FloatTy :: F32 => self . check_known_consts ( cx, lit. span , s, "f32" ) ,
105
+ FloatTy :: F64 => self . check_known_consts ( cx, lit. span , s, "f64" ) ,
106
+ FloatTy :: F128 => self . check_known_consts ( cx, lit. span , s, "f128" ) ,
107
+ } ,
108
+ // FIXME(f16_f128): add `f16` and `f128` when these types become stable.
109
+ LitKind :: Float ( s, LitFloatType :: Unsuffixed ) => self . check_known_consts ( cx, lit. span , s, "f{32, 64}" ) ,
110
+ _ => ( ) ,
117
111
}
118
112
}
119
113
0 commit comments