From e771a4f989644fd6397c391af1db94d459980b2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Esteban=20K=C3=BCber?= Date: Thu, 9 Jul 2020 09:09:25 -0700 Subject: [PATCH] Tweak `::` -> `:` typo heuristic and reduce verbosity Do not trigger on correct type ascription expressions with trailing operators and _do_ trigger on likely path typos where a turbofish is used. On likely path typos, remove note explaining type ascription. --- src/librustc_parse/parser/diagnostics.rs | 21 ++++++++++++------- .../ui/lifetime_starts_expressions.stderr | 3 +-- .../issue-35813-postfix-after-cast.stderr | 20 +++++++++--------- .../type-ascription-instead-of-method.stderr | 1 - .../type-ascription-instead-of-path-2.stderr | 1 - .../type-ascription-instead-of-variant.stderr | 1 - .../ui/type/ascription/issue-47666.stderr | 1 - .../ui/type/ascription/issue-54516.stderr | 1 - .../ui/type/ascription/issue-60933.stderr | 1 - 9 files changed, 24 insertions(+), 26 deletions(-) diff --git a/src/librustc_parse/parser/diagnostics.rs b/src/librustc_parse/parser/diagnostics.rs index fc9ffc3092447..df601bce58973 100644 --- a/src/librustc_parse/parser/diagnostics.rs +++ b/src/librustc_parse/parser/diagnostics.rs @@ -346,13 +346,16 @@ impl<'a> Parser<'a> { if allow_unstable { // Give extra information about type ascription only if it's a nightly compiler. err.note( - "`#![feature(type_ascription)]` lets you annotate an expression with a \ - type: `: `", - ); - err.note( - "see issue #23416 \ - for more information", + "`#![feature(type_ascription)]` lets you annotate an expression with a type: \ + `: `", ); + if !likely_path { + // Avoid giving too much info when it was likely an unrelated typo. + err.note( + "see issue #23416 \ + for more information", + ); + } } } } @@ -1152,8 +1155,10 @@ impl<'a> Parser<'a> { } && !self.token.is_reserved_ident() && // v `foo:bar(baz)` self.look_ahead(1, |t| t == &token::OpenDelim(token::Paren)) - || self.look_ahead(1, |t| t == &token::Lt) && // `foo:bar: ` - = note: see issue #23416 for more information error: aborting due to 2 previous errors diff --git a/src/test/ui/parser/issue-35813-postfix-after-cast.stderr b/src/test/ui/parser/issue-35813-postfix-after-cast.stderr index 255e9f409218b..9ccf17a6cb10e 100644 --- a/src/test/ui/parser/issue-35813-postfix-after-cast.stderr +++ b/src/test/ui/parser/issue-35813-postfix-after-cast.stderr @@ -280,12 +280,12 @@ error: casts cannot be followed by ? --> $DIR/issue-35813-postfix-after-cast.rs:121:5 | LL | Err(0u64): Result?; - | ^^^^^^^^^-^^^^^^^^^^^^^^^^ - | | - | help: maybe write a path separator here: `::` + | ^^^^^^^^^^^^^^^^^^^^^^^^^^ | - = note: `#![feature(type_ascription)]` lets you annotate an expression with a type: `: ` - = note: see issue #23416 for more information +help: try surrounding the expression in parentheses + | +LL | (Err(0u64): Result)?; + | ^ ^ error: casts cannot be followed by a function call --> $DIR/issue-35813-postfix-after-cast.rs:145:5 @@ -324,12 +324,12 @@ error: casts cannot be followed by `.await` --> $DIR/issue-35813-postfix-after-cast.rs:155:5 | LL | Box::pin(noop()): Pin>.await; - | ^^^^^^^^^^^^^^^^-^^^^^^^^^^^^ - | | - | help: maybe write a path separator here: `::` + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + | +help: try surrounding the expression in parentheses | - = note: `#![feature(type_ascription)]` lets you annotate an expression with a type: `: ` - = note: see issue #23416 for more information +LL | (Box::pin(noop()): Pin>).await; + | ^ ^ error: casts cannot be followed by a field access --> $DIR/issue-35813-postfix-after-cast.rs:167:5 diff --git a/src/test/ui/suggestions/type-ascription-instead-of-method.stderr b/src/test/ui/suggestions/type-ascription-instead-of-method.stderr index 998129ebd1d40..c111b4a9bc706 100644 --- a/src/test/ui/suggestions/type-ascription-instead-of-method.stderr +++ b/src/test/ui/suggestions/type-ascription-instead-of-method.stderr @@ -7,7 +7,6 @@ LL | Box:new("foo".to_string()) | help: maybe write a path separator here: `::` | = note: `#![feature(type_ascription)]` lets you annotate an expression with a type: `: ` - = note: see issue #23416 for more information error: aborting due to previous error diff --git a/src/test/ui/suggestions/type-ascription-instead-of-path-2.stderr b/src/test/ui/suggestions/type-ascription-instead-of-path-2.stderr index 0dd1494414fee..1d1999d350fe4 100644 --- a/src/test/ui/suggestions/type-ascription-instead-of-path-2.stderr +++ b/src/test/ui/suggestions/type-ascription-instead-of-path-2.stderr @@ -7,7 +7,6 @@ LL | vec![Ok(2)].into_iter().collect:,_>>()?; | help: maybe write a path separator here: `::` | = note: `#![feature(type_ascription)]` lets you annotate an expression with a type: `: ` - = note: see issue #23416 for more information error: aborting due to previous error diff --git a/src/test/ui/suggestions/type-ascription-instead-of-variant.stderr b/src/test/ui/suggestions/type-ascription-instead-of-variant.stderr index 5b40e16a51436..f38020dcc3820 100644 --- a/src/test/ui/suggestions/type-ascription-instead-of-variant.stderr +++ b/src/test/ui/suggestions/type-ascription-instead-of-variant.stderr @@ -7,7 +7,6 @@ LL | let _ = Option:Some(""); | help: maybe write a path separator here: `::` | = note: `#![feature(type_ascription)]` lets you annotate an expression with a type: `: ` - = note: see issue #23416 for more information error: aborting due to previous error diff --git a/src/test/ui/type/ascription/issue-47666.stderr b/src/test/ui/type/ascription/issue-47666.stderr index 3cd3be70aa75b..72c7c144b537d 100644 --- a/src/test/ui/type/ascription/issue-47666.stderr +++ b/src/test/ui/type/ascription/issue-47666.stderr @@ -10,7 +10,6 @@ LL | let _ = Option:Some(vec![0, 1]); | help: maybe write a path separator here: `::` | = note: `#![feature(type_ascription)]` lets you annotate an expression with a type: `: ` - = note: see issue #23416 for more information = note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info) error[E0423]: expected value, found enum `Option` diff --git a/src/test/ui/type/ascription/issue-54516.stderr b/src/test/ui/type/ascription/issue-54516.stderr index fdf35700ef94c..ec08cf209c21a 100644 --- a/src/test/ui/type/ascription/issue-54516.stderr +++ b/src/test/ui/type/ascription/issue-54516.stderr @@ -7,7 +7,6 @@ LL | println!("{}", std::mem:size_of::>()); | help: maybe write a path separator here: `::` | = note: `#![feature(type_ascription)]` lets you annotate an expression with a type: `: ` - = note: see issue #23416 for more information error[E0423]: expected value, found module `std::mem` --> $DIR/issue-54516.rs:4:20 diff --git a/src/test/ui/type/ascription/issue-60933.stderr b/src/test/ui/type/ascription/issue-60933.stderr index cd9ae8f49f4f1..2006362e1bb7e 100644 --- a/src/test/ui/type/ascription/issue-60933.stderr +++ b/src/test/ui/type/ascription/issue-60933.stderr @@ -7,7 +7,6 @@ LL | let u: usize = std::mem:size_of::(); | help: maybe write a path separator here: `::` | = note: `#![feature(type_ascription)]` lets you annotate an expression with a type: `: ` - = note: see issue #23416 for more information error[E0423]: expected value, found module `std::mem` --> $DIR/issue-60933.rs:2:20