diff options
| author | Michael Howell <michael@notriddle.com> | 2022-03-11 15:26:19 -0700 |
|---|---|---|
| committer | Michael Howell <michael@notriddle.com> | 2022-03-11 15:35:18 -0700 |
| commit | 7e323370b351ab138caa90cddb0e9811a4e8439d (patch) | |
| tree | b0fe363d415fb18615837d169a7048b4f5b6af64 | |
| parent | c9b45e601065c3fb71a4f67481e912391d075621 (diff) | |
| download | rust-7e323370b351ab138caa90cddb0e9811a4e8439d.tar.gz rust-7e323370b351ab138caa90cddb0e9811a4e8439d.zip | |
diagnostics: single colon within `<>` probably, not type ascription
Fixes #94812
3 files changed, 37 insertions, 0 deletions
diff --git a/compiler/rustc_parse/src/parser/diagnostics.rs b/compiler/rustc_parse/src/parser/diagnostics.rs index 40daf4eb28f..5b398a51318 100644 --- a/compiler/rustc_parse/src/parser/diagnostics.rs +++ b/compiler/rustc_parse/src/parser/diagnostics.rs @@ -2073,6 +2073,19 @@ impl<'a> Parser<'a> { let value = self.mk_expr_err(start.to(expr.span)); err.emit(); return Ok(GenericArg::Const(AnonConst { id: ast::DUMMY_NODE_ID, value })); + } else if token::Colon == snapshot.token.kind + && expr.span.lo() == snapshot.token.span.hi() + && matches!(expr.kind, ExprKind::Path(..)) + { + // Find a mistake like "foo::var:A". + err.span_suggestion( + snapshot.token.span, + "you might have meant to write a path", + "::".to_string(), + Applicability::MaybeIncorrect, + ); + err.emit(); + return Ok(GenericArg::Type(self.mk_ty(start.to(expr.span), TyKind::Err))); } else if token::Comma == self.token.kind || self.token.kind.should_end_const_arg() { // Avoid the following output by checking that we consumed a full const arg: diff --git a/src/test/ui/generics/single-colon-path-not-const-generics.rs b/src/test/ui/generics/single-colon-path-not-const-generics.rs new file mode 100644 index 00000000000..d8ed8fbfe72 --- /dev/null +++ b/src/test/ui/generics/single-colon-path-not-const-generics.rs @@ -0,0 +1,13 @@ +pub mod foo { + pub mod bar { + pub struct A; + } +} + +pub struct Foo { + a: Vec<foo::bar:A>, + //~^ ERROR expected + //~| HELP you might have meant to write a path +} + +fn main() {} diff --git a/src/test/ui/generics/single-colon-path-not-const-generics.stderr b/src/test/ui/generics/single-colon-path-not-const-generics.stderr new file mode 100644 index 00000000000..d509fb7aeaa --- /dev/null +++ b/src/test/ui/generics/single-colon-path-not-const-generics.stderr @@ -0,0 +1,11 @@ +error: expected one of `,` or `>`, found `:` + --> $DIR/single-colon-path-not-const-generics.rs:8:18 + | +LL | a: Vec<foo::bar:A>, + | ^ + | | + | expected one of `,` or `>` + | help: you might have meant to write a path: `::` + +error: aborting due to previous error + |
