Auto merge of #10952 - Centri3:excessive_precision, r=dswij
Don't lint `excessive_precision` on inf Fixes #9910 changelog: [`excessive_precision`]: No longer lints overflowing literals
This commit is contained in:
commit
62972ae2dd
@ -82,19 +82,24 @@ fn check_expr(&mut self, cx: &LateContext<'tcx>, expr: &'tcx hir::Expr<'_>) {
|
||||
LitFloatType::Suffixed(ast::FloatTy::F64) => Some("f64"),
|
||||
LitFloatType::Unsuffixed => None
|
||||
};
|
||||
let (is_whole, mut float_str) = match fty {
|
||||
let (is_whole, is_inf, mut float_str) = match fty {
|
||||
FloatTy::F32 => {
|
||||
let value = sym_str.parse::<f32>().unwrap();
|
||||
|
||||
(value.fract() == 0.0, formatter.format(value))
|
||||
(value.fract() == 0.0, value.is_infinite(), formatter.format(value))
|
||||
},
|
||||
FloatTy::F64 => {
|
||||
let value = sym_str.parse::<f64>().unwrap();
|
||||
|
||||
(value.fract() == 0.0, formatter.format(value))
|
||||
|
||||
(value.fract() == 0.0, value.is_infinite(), formatter.format(value))
|
||||
},
|
||||
};
|
||||
|
||||
if is_inf {
|
||||
return;
|
||||
}
|
||||
|
||||
if is_whole && !sym_str.contains(|c| c == 'e' || c == 'E') {
|
||||
// Normalize the literal by stripping the fractional portion
|
||||
if sym_str.split('.').next().unwrap() != float_str {
|
||||
|
@ -1,6 +1,12 @@
|
||||
//@run-rustfix
|
||||
#![warn(clippy::excessive_precision)]
|
||||
#![allow(dead_code, unused_variables, clippy::print_literal, clippy::useless_vec)]
|
||||
#![allow(
|
||||
dead_code,
|
||||
overflowing_literals,
|
||||
unused_variables,
|
||||
clippy::print_literal,
|
||||
clippy::useless_vec
|
||||
)]
|
||||
|
||||
fn main() {
|
||||
// Consts
|
||||
@ -66,4 +72,11 @@ fn main() {
|
||||
|
||||
// issue #7745
|
||||
let _ = 0_f64;
|
||||
|
||||
// issue #9910
|
||||
const INF1: f32 = 1.0e+33f32;
|
||||
const INF2: f64 = 1.0e+3300f64;
|
||||
const NEG_INF1: f32 = -1.0e+33f32;
|
||||
const NEG_INF2: f64 = -1.0e+3300f64;
|
||||
const NEG_INF3: f32 = -3.40282357e+38_f32;
|
||||
}
|
||||
|
@ -1,6 +1,12 @@
|
||||
//@run-rustfix
|
||||
#![warn(clippy::excessive_precision)]
|
||||
#![allow(dead_code, unused_variables, clippy::print_literal, clippy::useless_vec)]
|
||||
#![allow(
|
||||
dead_code,
|
||||
overflowing_literals,
|
||||
unused_variables,
|
||||
clippy::print_literal,
|
||||
clippy::useless_vec
|
||||
)]
|
||||
|
||||
fn main() {
|
||||
// Consts
|
||||
@ -66,4 +72,11 @@ fn main() {
|
||||
|
||||
// issue #7745
|
||||
let _ = 1.000_000_000_000_001e-324_f64;
|
||||
|
||||
// issue #9910
|
||||
const INF1: f32 = 1.0e+33f32;
|
||||
const INF2: f64 = 1.0e+3300f64;
|
||||
const NEG_INF1: f32 = -1.0e+33f32;
|
||||
const NEG_INF2: f64 = -1.0e+3300f64;
|
||||
const NEG_INF3: f32 = -3.40282357e+38_f32;
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
error: float has excessive precision
|
||||
--> $DIR/excessive_precision.rs:15:26
|
||||
--> $DIR/excessive_precision.rs:21:26
|
||||
|
|
||||
LL | const BAD32_1: f32 = 0.123_456_789_f32;
|
||||
| ^^^^^^^^^^^^^^^^^ help: consider changing the type or truncating it to: `0.123_456_79_f32`
|
||||
@ -7,85 +7,85 @@ LL | const BAD32_1: f32 = 0.123_456_789_f32;
|
||||
= note: `-D clippy::excessive-precision` implied by `-D warnings`
|
||||
|
||||
error: float has excessive precision
|
||||
--> $DIR/excessive_precision.rs:16:26
|
||||
--> $DIR/excessive_precision.rs:22:26
|
||||
|
|
||||
LL | const BAD32_2: f32 = 0.123_456_789;
|
||||
| ^^^^^^^^^^^^^ help: consider changing the type or truncating it to: `0.123_456_79`
|
||||
|
||||
error: float has excessive precision
|
||||
--> $DIR/excessive_precision.rs:17:26
|
||||
--> $DIR/excessive_precision.rs:23:26
|
||||
|
|
||||
LL | const BAD32_3: f32 = 0.100_000_000_000_1;
|
||||
| ^^^^^^^^^^^^^^^^^^^ help: consider changing the type or truncating it to: `0.1`
|
||||
|
||||
error: float has excessive precision
|
||||
--> $DIR/excessive_precision.rs:18:29
|
||||
--> $DIR/excessive_precision.rs:24:29
|
||||
|
|
||||
LL | const BAD32_EDGE: f32 = 1.000_000_9;
|
||||
| ^^^^^^^^^^^ help: consider changing the type or truncating it to: `1.000_001`
|
||||
|
||||
error: float has excessive precision
|
||||
--> $DIR/excessive_precision.rs:22:26
|
||||
--> $DIR/excessive_precision.rs:28:26
|
||||
|
|
||||
LL | const BAD64_3: f64 = 0.100_000_000_000_000_000_1;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider changing the type or truncating it to: `0.1`
|
||||
|
||||
error: float has excessive precision
|
||||
--> $DIR/excessive_precision.rs:25:22
|
||||
--> $DIR/excessive_precision.rs:31:22
|
||||
|
|
||||
LL | println!("{:?}", 8.888_888_888_888_888_888_888);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider changing the type or truncating it to: `8.888_888_888_888_89`
|
||||
|
||||
error: float has excessive precision
|
||||
--> $DIR/excessive_precision.rs:36:22
|
||||
--> $DIR/excessive_precision.rs:42:22
|
||||
|
|
||||
LL | let bad32: f32 = 1.123_456_789;
|
||||
| ^^^^^^^^^^^^^ help: consider changing the type or truncating it to: `1.123_456_8`
|
||||
|
||||
error: float has excessive precision
|
||||
--> $DIR/excessive_precision.rs:37:26
|
||||
--> $DIR/excessive_precision.rs:43:26
|
||||
|
|
||||
LL | let bad32_suf: f32 = 1.123_456_789_f32;
|
||||
| ^^^^^^^^^^^^^^^^^ help: consider changing the type or truncating it to: `1.123_456_8_f32`
|
||||
|
||||
error: float has excessive precision
|
||||
--> $DIR/excessive_precision.rs:38:21
|
||||
--> $DIR/excessive_precision.rs:44:21
|
||||
|
|
||||
LL | let bad32_inf = 1.123_456_789_f32;
|
||||
| ^^^^^^^^^^^^^^^^^ help: consider changing the type or truncating it to: `1.123_456_8_f32`
|
||||
|
||||
error: float has excessive precision
|
||||
--> $DIR/excessive_precision.rs:48:36
|
||||
--> $DIR/excessive_precision.rs:54:36
|
||||
|
|
||||
LL | let bad_vec32: Vec<f32> = vec![0.123_456_789];
|
||||
| ^^^^^^^^^^^^^ help: consider changing the type or truncating it to: `0.123_456_79`
|
||||
|
||||
error: float has excessive precision
|
||||
--> $DIR/excessive_precision.rs:49:36
|
||||
--> $DIR/excessive_precision.rs:55:36
|
||||
|
|
||||
LL | let bad_vec64: Vec<f64> = vec![0.123_456_789_123_456_789];
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider changing the type or truncating it to: `0.123_456_789_123_456_78`
|
||||
|
||||
error: float has excessive precision
|
||||
--> $DIR/excessive_precision.rs:53:24
|
||||
--> $DIR/excessive_precision.rs:59:24
|
||||
|
|
||||
LL | let bad_e32: f32 = 1.123_456_788_888e-10;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^ help: consider changing the type or truncating it to: `1.123_456_8e-10`
|
||||
|
||||
error: float has excessive precision
|
||||
--> $DIR/excessive_precision.rs:56:27
|
||||
--> $DIR/excessive_precision.rs:62:27
|
||||
|
|
||||
LL | let bad_bige32: f32 = 1.123_456_788_888E-10;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^ help: consider changing the type or truncating it to: `1.123_456_8E-10`
|
||||
|
||||
error: float has excessive precision
|
||||
--> $DIR/excessive_precision.rs:65:13
|
||||
--> $DIR/excessive_precision.rs:71:13
|
||||
|
|
||||
LL | let _ = 2.225_073_858_507_201_1e-308_f64;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider changing the type or truncating it to: `2.225_073_858_507_201e-308_f64`
|
||||
|
||||
error: float has excessive precision
|
||||
--> $DIR/excessive_precision.rs:68:13
|
||||
--> $DIR/excessive_precision.rs:74:13
|
||||
|
|
||||
LL | let _ = 1.000_000_000_000_001e-324_f64;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider changing the type or truncating it to: `0_f64`
|
||||
|
@ -1,5 +1,6 @@
|
||||
//@run-rustfix
|
||||
#![warn(clippy::lossy_float_literal)]
|
||||
#![allow(overflowing_literals, unused)]
|
||||
|
||||
fn main() {
|
||||
// Lossy whole-number float literals
|
||||
@ -32,4 +33,7 @@ fn main() {
|
||||
let _: f64 = 1e99;
|
||||
let _: f64 = 1E99;
|
||||
let _: f32 = 0.1;
|
||||
|
||||
const INF1: f32 = 1000000000000000000000000000000000f32;
|
||||
const NEG_INF1: f32 = -340282357000000000000000000000000000001_f32;
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
//@run-rustfix
|
||||
#![warn(clippy::lossy_float_literal)]
|
||||
#![allow(overflowing_literals, unused)]
|
||||
|
||||
fn main() {
|
||||
// Lossy whole-number float literals
|
||||
@ -32,4 +33,7 @@ fn main() {
|
||||
let _: f64 = 1e99;
|
||||
let _: f64 = 1E99;
|
||||
let _: f32 = 0.1;
|
||||
|
||||
const INF1: f32 = 1000000000000000000000000000000000f32;
|
||||
const NEG_INF1: f32 = -340282357000000000000000000000000000001_f32;
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
error: literal cannot be represented as the underlying type without loss of precision
|
||||
--> $DIR/lossy_float_literal.rs:6:18
|
||||
--> $DIR/lossy_float_literal.rs:7:18
|
||||
|
|
||||
LL | let _: f32 = 16_777_217.0;
|
||||
| ^^^^^^^^^^^^ help: consider changing the type or replacing it with: `16_777_216.0`
|
||||
@ -7,61 +7,61 @@ LL | let _: f32 = 16_777_217.0;
|
||||
= note: `-D clippy::lossy-float-literal` implied by `-D warnings`
|
||||
|
||||
error: literal cannot be represented as the underlying type without loss of precision
|
||||
--> $DIR/lossy_float_literal.rs:7:18
|
||||
--> $DIR/lossy_float_literal.rs:8:18
|
||||
|
|
||||
LL | let _: f32 = 16_777_219.0;
|
||||
| ^^^^^^^^^^^^ help: consider changing the type or replacing it with: `16_777_220.0`
|
||||
|
||||
error: literal cannot be represented as the underlying type without loss of precision
|
||||
--> $DIR/lossy_float_literal.rs:8:18
|
||||
--> $DIR/lossy_float_literal.rs:9:18
|
||||
|
|
||||
LL | let _: f32 = 16_777_219.;
|
||||
| ^^^^^^^^^^^ help: consider changing the type or replacing it with: `16_777_220.0`
|
||||
|
||||
error: literal cannot be represented as the underlying type without loss of precision
|
||||
--> $DIR/lossy_float_literal.rs:9:18
|
||||
--> $DIR/lossy_float_literal.rs:10:18
|
||||
|
|
||||
LL | let _: f32 = 16_777_219.000;
|
||||
| ^^^^^^^^^^^^^^ help: consider changing the type or replacing it with: `16_777_220.0`
|
||||
|
||||
error: literal cannot be represented as the underlying type without loss of precision
|
||||
--> $DIR/lossy_float_literal.rs:10:13
|
||||
--> $DIR/lossy_float_literal.rs:11:13
|
||||
|
|
||||
LL | let _ = 16_777_219f32;
|
||||
| ^^^^^^^^^^^^^ help: consider changing the type or replacing it with: `16_777_220_f32`
|
||||
|
||||
error: literal cannot be represented as the underlying type without loss of precision
|
||||
--> $DIR/lossy_float_literal.rs:11:19
|
||||
--> $DIR/lossy_float_literal.rs:12:19
|
||||
|
|
||||
LL | let _: f32 = -16_777_219.0;
|
||||
| ^^^^^^^^^^^^ help: consider changing the type or replacing it with: `16_777_220.0`
|
||||
|
||||
error: literal cannot be represented as the underlying type without loss of precision
|
||||
--> $DIR/lossy_float_literal.rs:12:18
|
||||
--> $DIR/lossy_float_literal.rs:13:18
|
||||
|
|
||||
LL | let _: f64 = 9_007_199_254_740_993.0;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^ help: consider changing the type or replacing it with: `9_007_199_254_740_992.0`
|
||||
|
||||
error: literal cannot be represented as the underlying type without loss of precision
|
||||
--> $DIR/lossy_float_literal.rs:13:18
|
||||
--> $DIR/lossy_float_literal.rs:14:18
|
||||
|
|
||||
LL | let _: f64 = 9_007_199_254_740_993.;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^ help: consider changing the type or replacing it with: `9_007_199_254_740_992.0`
|
||||
|
||||
error: literal cannot be represented as the underlying type without loss of precision
|
||||
--> $DIR/lossy_float_literal.rs:14:18
|
||||
--> $DIR/lossy_float_literal.rs:15:18
|
||||
|
|
||||
LL | let _: f64 = 9_007_199_254_740_993.00;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^ help: consider changing the type or replacing it with: `9_007_199_254_740_992.0`
|
||||
|
||||
error: literal cannot be represented as the underlying type without loss of precision
|
||||
--> $DIR/lossy_float_literal.rs:15:13
|
||||
--> $DIR/lossy_float_literal.rs:16:13
|
||||
|
|
||||
LL | let _ = 9_007_199_254_740_993f64;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^ help: consider changing the type or replacing it with: `9_007_199_254_740_992_f64`
|
||||
|
||||
error: literal cannot be represented as the underlying type without loss of precision
|
||||
--> $DIR/lossy_float_literal.rs:16:19
|
||||
--> $DIR/lossy_float_literal.rs:17:19
|
||||
|
|
||||
LL | let _: f64 = -9_007_199_254_740_993.0;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^ help: consider changing the type or replacing it with: `9_007_199_254_740_992.0`
|
||||
|
Loading…
Reference in New Issue
Block a user