diff options
| author | Esteban Küber <esteban@kuber.com.ar> | 2020-07-09 09:09:25 -0700 |
|---|---|---|
| committer | Esteban Küber <esteban@kuber.com.ar> | 2020-07-09 09:09:25 -0700 |
| commit | e771a4f989644fd6397c391af1db94d459980b2e (patch) | |
| tree | 73d08e694ecca789b2cbfb7712d472febf3b0faf /src/librustc_parse/parser | |
| parent | fc6ee8f38b42830378c770e3b786138be0f35ccd (diff) | |
| download | rust-e771a4f989644fd6397c391af1db94d459980b2e.tar.gz rust-e771a4f989644fd6397c391af1db94d459980b2e.zip | |
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.
Diffstat (limited to 'src/librustc_parse/parser')
| -rw-r--r-- | src/librustc_parse/parser/diagnostics.rs | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/src/librustc_parse/parser/diagnostics.rs b/src/librustc_parse/parser/diagnostics.rs index fc9ffc30924..df601bce589 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: `<expr>: <type>`", - ); - err.note( - "see issue #23416 <https://github.com/rust-lang/rust/issues/23416> \ - for more information", + "`#![feature(type_ascription)]` lets you annotate an expression with a type: \ + `<expr>: <type>`", ); + if !likely_path { + // Avoid giving too much info when it was likely an unrelated typo. + err.note( + "see issue #23416 <https://github.com/rust-lang/rust/issues/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<baz` - self.look_ahead(2, |t| t.is_ident()) + || self.look_ahead(1, |t| t == &token::OpenDelim(token::Brace)) // `foo:bar {` + || self.look_ahead(1, |t| t == &token::Colon) && // `foo:bar::<baz` + self.look_ahead(2, |t| t == &token::Lt) && + self.look_ahead(3, |t| t.is_ident()) || self.look_ahead(1, |t| t == &token::Colon) && // `foo:bar:baz` self.look_ahead(2, |t| t.is_ident()) || self.look_ahead(1, |t| t == &token::ModSep) |
