]> git.lizzy.rs Git - rust.git/commitdiff
use proper words in help message for floating point
authoryukang <moorekang@gmail.com>
Tue, 16 Aug 2022 11:12:36 +0000 (19:12 +0800)
committeryukang <moorekang@gmail.com>
Tue, 16 Aug 2022 11:12:36 +0000 (19:12 +0800)
compiler/rustc_typeck/src/check/expr.rs
src/test/ui/attempted-access-non-fatal.stderr
src/test/ui/typeck/suggest-adding-missing-zero-to-floating-point-number.stderr

index 92bf03ea665787b58cade716e517fe723bb0eecd..51182d2a40d2844b5563d4930a5366c5d2e8b639 100644 (file)
@@ -2184,10 +2184,16 @@ fn check_field(
                 let suffix = chars.collect::<String>();
                 suffix.is_empty() || suffix == "f32" || suffix == "f64"
             };
-            let is_likely_suffix = |fist_chars: &[char], field: &str| {
-                field.len() >= 1
-                    && field.to_lowercase().starts_with(fist_chars)
+            let maybe_partial_suffix = |field: &str| -> Option<&str> {
+                let first_chars = ['f', 'l'];
+                if field.len() >= 1
+                    && field.to_lowercase().starts_with(first_chars)
                     && field[1..].chars().all(|c| c.is_ascii_digit())
+                {
+                    if field.to_lowercase().starts_with(['f']) { Some("f32") } else { Some("f64") }
+                } else {
+                    None
+                }
             };
             if let ty::Infer(ty::IntVar(_)) = expr_t.kind()
                 && let ExprKind::Lit(Spanned {
@@ -2196,19 +2202,18 @@ fn check_field(
                 }) = base.kind
                 && !base.span.from_expansion()
             {
-                let msg = "If the number is meant to be a floating point number, consider adding a `0` after the period";
                 if is_valid_suffix(&field_name) {
                     err.span_suggestion_verbose(
                         field.span.shrink_to_lo(),
-                        msg,
+                        "if intended to be a floating point literal, consider adding a `0` after the period",
                         '0',
                         Applicability::MaybeIncorrect,
                     );
-                } else if is_likely_suffix(&['f', 'l'], &field_name) {
+                } else if let Some(correct_suffix) = maybe_partial_suffix(&field_name) {
                     err.span_suggestion_verbose(
                         field.span,
-                        format!("{}, valid float format are `f32` and `f64`", msg),
-                        "0f32",
+                        format!("if intended to be a floating point literal, consider adding a `0` after the period and a `{correct_suffix}` suffix"),
+                        format!("0{correct_suffix}"),
                         Applicability::MaybeIncorrect,
                     );
                 }
index 856dba2b2e4c776c5407759fc6ff19695031ea0b..bff669727a1b8287d1389da5d6f6dc24f65f0206 100644 (file)
@@ -16,7 +16,7 @@ error[E0610]: `{integer}` is a primitive type and therefore doesn't have fields
 LL |     let _ = 0.f;
    |               ^
    |
-help: If the number is meant to be a floating point number, consider adding a `0` after the period, valid float format are `f32` and `f64`
+help: if intended to be a floating point literal, consider adding a `0` after the period and a `f32` suffix
    |
 LL |     let _ = 0.0f32;
    |               ~~~~
@@ -27,9 +27,9 @@ error[E0610]: `{integer}` is a primitive type and therefore doesn't have fields
 LL |     let _ = 2.l;
    |               ^
    |
-help: If the number is meant to be a floating point number, consider adding a `0` after the period, valid float format are `f32` and `f64`
+help: if intended to be a floating point literal, consider adding a `0` after the period and a `f64` suffix
    |
-LL |     let _ = 2.0f32;
+LL |     let _ = 2.0f64;
    |               ~~~~
 
 error[E0610]: `{integer}` is a primitive type and therefore doesn't have fields
@@ -38,7 +38,7 @@ error[E0610]: `{integer}` is a primitive type and therefore doesn't have fields
 LL |     let _ = 12.F;
    |                ^
    |
-help: If the number is meant to be a floating point number, consider adding a `0` after the period, valid float format are `f32` and `f64`
+help: if intended to be a floating point literal, consider adding a `0` after the period and a `f32` suffix
    |
 LL |     let _ = 12.0f32;
    |                ~~~~
@@ -49,9 +49,9 @@ error[E0610]: `{integer}` is a primitive type and therefore doesn't have fields
 LL |     let _ = 34.L;
    |                ^
    |
-help: If the number is meant to be a floating point number, consider adding a `0` after the period, valid float format are `f32` and `f64`
+help: if intended to be a floating point literal, consider adding a `0` after the period and a `f64` suffix
    |
-LL |     let _ = 34.0f32;
+LL |     let _ = 34.0f64;
    |                ~~~~
 
 error: aborting due to 6 previous errors
index e8e069708a864169516559a9ad01d9d0a4fe875f..503015f3bec615cb33cf0ea4c9f7b05eae096668 100644 (file)
@@ -4,7 +4,7 @@ error[E0610]: `{integer}` is a primitive type and therefore doesn't have fields
 LL |     2.e1;
    |       ^^
    |
-help: If the number is meant to be a floating point number, consider adding a `0` after the period
+help: if intended to be a floating point literal, consider adding a `0` after the period
    |
 LL |     2.0e1;
    |       +
@@ -15,7 +15,7 @@ error[E0610]: `{integer}` is a primitive type and therefore doesn't have fields
 LL |     2.E1;
    |       ^^
    |
-help: If the number is meant to be a floating point number, consider adding a `0` after the period
+help: if intended to be a floating point literal, consider adding a `0` after the period
    |
 LL |     2.0E1;
    |       +
@@ -26,7 +26,7 @@ error[E0610]: `{integer}` is a primitive type and therefore doesn't have fields
 LL |     2.f32;
    |       ^^^
    |
-help: If the number is meant to be a floating point number, consider adding a `0` after the period
+help: if intended to be a floating point literal, consider adding a `0` after the period
    |
 LL |     2.0f32;
    |       +
@@ -37,7 +37,7 @@ error[E0610]: `{integer}` is a primitive type and therefore doesn't have fields
 LL |     2.f64;
    |       ^^^
    |
-help: If the number is meant to be a floating point number, consider adding a `0` after the period
+help: if intended to be a floating point literal, consider adding a `0` after the period
    |
 LL |     2.0f64;
    |       +
@@ -48,7 +48,7 @@ error[E0610]: `{integer}` is a primitive type and therefore doesn't have fields
 LL |     2.e+12;
    |       ^
    |
-help: If the number is meant to be a floating point number, consider adding a `0` after the period
+help: if intended to be a floating point literal, consider adding a `0` after the period
    |
 LL |     2.0e+12;
    |       +
@@ -59,7 +59,7 @@ error[E0610]: `{integer}` is a primitive type and therefore doesn't have fields
 LL |     2.e-12;
    |       ^
    |
-help: If the number is meant to be a floating point number, consider adding a `0` after the period
+help: if intended to be a floating point literal, consider adding a `0` after the period
    |
 LL |     2.0e-12;
    |       +
@@ -70,7 +70,7 @@ error[E0610]: `{integer}` is a primitive type and therefore doesn't have fields
 LL |     2.e1f32;
    |       ^^^^^
    |
-help: If the number is meant to be a floating point number, consider adding a `0` after the period
+help: if intended to be a floating point literal, consider adding a `0` after the period
    |
 LL |     2.0e1f32;
    |       +