parent
ae9173d7dd
commit
d8d27ca822
3 changed files with 58 additions and 7 deletions
|
@ -2960,14 +2960,31 @@ impl<'a> Parser<'a> {
|
||||||
let parser_snapshot_before_ty = this.create_snapshot_for_diagnostic();
|
let parser_snapshot_before_ty = this.create_snapshot_for_diagnostic();
|
||||||
this.eat_incorrect_doc_comment_for_param_type();
|
this.eat_incorrect_doc_comment_for_param_type();
|
||||||
let mut ty = this.parse_ty_for_param();
|
let mut ty = this.parse_ty_for_param();
|
||||||
if ty.is_ok()
|
|
||||||
&& this.token != token::Comma
|
if let Ok(t) = &ty {
|
||||||
|
// Check for trailing angle brackets
|
||||||
|
if let TyKind::Path(_, Path { segments, .. }) = &t.kind {
|
||||||
|
if let Some(segment) = segments.last() {
|
||||||
|
if let Some(guar) =
|
||||||
|
this.check_trailing_angle_brackets(segment, &[exp!(CloseParen)])
|
||||||
|
{
|
||||||
|
return Ok((
|
||||||
|
dummy_arg(segment.ident, guar),
|
||||||
|
Trailing::No,
|
||||||
|
UsePreAttrPos::No,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if this.token != token::Comma
|
||||||
&& this.token != token::CloseDelim(Delimiter::Parenthesis)
|
&& this.token != token::CloseDelim(Delimiter::Parenthesis)
|
||||||
{
|
{
|
||||||
// This wasn't actually a type, but a pattern looking like a type,
|
// This wasn't actually a type, but a pattern looking like a type,
|
||||||
// so we are going to rollback and re-parse for recovery.
|
// so we are going to rollback and re-parse for recovery.
|
||||||
ty = this.unexpected_any();
|
ty = this.unexpected_any();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
match ty {
|
match ty {
|
||||||
Ok(ty) => {
|
Ok(ty) => {
|
||||||
let ident = Ident::new(kw::Empty, this.prev_token.span);
|
let ident = Ident::new(kw::Empty, this.prev_token.span);
|
||||||
|
@ -2977,6 +2994,7 @@ impl<'a> Parser<'a> {
|
||||||
}
|
}
|
||||||
// If this is a C-variadic argument and we hit an error, return the error.
|
// If this is a C-variadic argument and we hit an error, return the error.
|
||||||
Err(err) if this.token == token::DotDotDot => return Err(err),
|
Err(err) if this.token == token::DotDotDot => return Err(err),
|
||||||
|
Err(err) if this.unmatched_angle_bracket_count > 0 => return Err(err),
|
||||||
// Recover from attempting to parse the argument as a type without pattern.
|
// Recover from attempting to parse the argument as a type without pattern.
|
||||||
Err(err) => {
|
Err(err) => {
|
||||||
err.cancel();
|
err.cancel();
|
||||||
|
|
8
tests/ui/fn/bad-turbofish-hints-issue-121901.rs
Normal file
8
tests/ui/fn/bad-turbofish-hints-issue-121901.rs
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
// Regression test for the parser wrongfully suggesting turbofish syntax in below syntax errors
|
||||||
|
|
||||||
|
type One = for<'a> fn(Box<dyn Send + 'a);
|
||||||
|
//~^ ERROR: expected one of `+`, `,`, or `>`, found `)`
|
||||||
|
type Two = for<'a> fn(Box<dyn Send + 'a>>);
|
||||||
|
//~^ ERROR: unmatched angle bracket
|
||||||
|
|
||||||
|
fn main() {}
|
25
tests/ui/fn/bad-turbofish-hints-issue-121901.stderr
Normal file
25
tests/ui/fn/bad-turbofish-hints-issue-121901.stderr
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
error: expected one of `+`, `,`, or `>`, found `)`
|
||||||
|
--> $DIR/bad-turbofish-hints-issue-121901.rs:3:40
|
||||||
|
|
|
||||||
|
LL | type One = for<'a> fn(Box<dyn Send + 'a);
|
||||||
|
| ^ expected one of `+`, `,`, or `>`
|
||||||
|
|
|
||||||
|
help: you might have meant to end the type parameters here
|
||||||
|
|
|
||||||
|
LL | type One = for<'a> fn(Box<dyn Send + 'a>);
|
||||||
|
| +
|
||||||
|
|
||||||
|
error: unmatched angle bracket
|
||||||
|
--> $DIR/bad-turbofish-hints-issue-121901.rs:5:41
|
||||||
|
|
|
||||||
|
LL | type Two = for<'a> fn(Box<dyn Send + 'a>>);
|
||||||
|
| ^
|
||||||
|
|
|
||||||
|
help: remove extra angle bracket
|
||||||
|
|
|
||||||
|
LL - type Two = for<'a> fn(Box<dyn Send + 'a>>);
|
||||||
|
LL + type Two = for<'a> fn(Box<dyn Send + 'a>);
|
||||||
|
|
|
||||||
|
|
||||||
|
error: aborting due to 2 previous errors
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue