about summary refs log tree commit diff
diff options
context:
space:
mode:
authorManish Goregaokar <manishsmail@gmail.com>2021-10-01 17:27:47 -0700
committerManish Goregaokar <manishsmail@gmail.com>2021-10-01 17:27:47 -0700
commit6bf5c0b185e37f64661e16938e18d68abd2accc4 (patch)
tree15a95932a4521cb4d4f2b76ad5cbc3e6331392e5
parent51160808b8d9821079896baed1023be446555cc4 (diff)
downloadrust-6bf5c0b185e37f64661e16938e18d68abd2accc4.tar.gz
rust-6bf5c0b185e37f64661e16938e18d68abd2accc4.zip
Correctly handle signs in exponents in numeric_literal::format()
-rw-r--r--clippy_utils/src/numeric_literal.rs7
-rw-r--r--tests/ui/excessive_precision.fixed2
-rw-r--r--tests/ui/excessive_precision.stderr2
3 files changed, 9 insertions, 2 deletions
diff --git a/clippy_utils/src/numeric_literal.rs b/clippy_utils/src/numeric_literal.rs
index 4a28c7dd9a0..98f65039b7d 100644
--- a/clippy_utils/src/numeric_literal.rs
+++ b/clippy_utils/src/numeric_literal.rs
@@ -177,6 +177,13 @@ impl<'a> NumericLiteral<'a> {
 
         let mut digits = input.chars().filter(|&c| c != '_');
 
+        // The exponent may have a sign, output it early, otherwise it will be
+        // treated as a digit
+        if let Some('-') = digits.clone().next() {
+            let _ = digits.next();
+            output.push('-');
+        }
+
         let first_group_size;
 
         if partial_group_first {
diff --git a/tests/ui/excessive_precision.fixed b/tests/ui/excessive_precision.fixed
index f57191d2ae5..65096d6b219 100644
--- a/tests/ui/excessive_precision.fixed
+++ b/tests/ui/excessive_precision.fixed
@@ -62,5 +62,5 @@ fn main() {
     let num = 0.000_000_000_01e-10f64;
 
     // issue #7744
-    let _ = 2.225_073_858_507_201e-_308_f64;
+    let _ = 2.225_073_858_507_201e-308_f64;
 }
diff --git a/tests/ui/excessive_precision.stderr b/tests/ui/excessive_precision.stderr
index 4c8194b1d86..c9418f73d98 100644
--- a/tests/ui/excessive_precision.stderr
+++ b/tests/ui/excessive_precision.stderr
@@ -82,7 +82,7 @@ error: float has excessive precision
   --> $DIR/excessive_precision.rs:65: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`
+   |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider changing the type or truncating it to: `2.225_073_858_507_201e-308_f64`
 
 error: aborting due to 14 previous errors