Suggests turbofish in patterns
This commit is contained in:
parent
b969b830aa
commit
049c728c60
18 changed files with 101 additions and 50 deletions
|
@ -2731,3 +2731,17 @@ pub(crate) struct WhereClauseBeforeConstBodySugg {
|
|||
#[suggestion_part(code = "")]
|
||||
pub right: Span,
|
||||
}
|
||||
|
||||
#[derive(Diagnostic)]
|
||||
#[diag(parse_generic_args_in_pat_require_turbofish_syntax)]
|
||||
pub(crate) struct GenericArgsInPatRequireTurbofishSyntax {
|
||||
#[primary_span]
|
||||
pub span: Span,
|
||||
#[suggestion(
|
||||
parse_sugg_turbofish_syntax,
|
||||
style = "verbose",
|
||||
code = "::",
|
||||
applicability = "maybe-incorrect"
|
||||
)]
|
||||
pub suggest_turbofish: Span,
|
||||
}
|
||||
|
|
|
@ -805,6 +805,7 @@ impl<'a> Parser<'a> {
|
|||
| token::DotDotDot | token::DotDotEq | token::DotDot // A range pattern.
|
||||
| token::ModSep // A tuple / struct variant pattern.
|
||||
| token::Not)) // A macro expanding to a pattern.
|
||||
&& !(self.look_ahead(1, |t| t.kind == token::Lt) && self.look_ahead(2, |t| t.can_begin_type())) // May suggest the turbofish syntax for generics, only valid for recoveries.
|
||||
}
|
||||
|
||||
/// Parses `ident` or `ident @ pat`.
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
use super::ty::{AllowPlus, RecoverQPath, RecoverReturnSign};
|
||||
use super::{Parser, Restrictions, TokenType};
|
||||
use crate::errors::PathSingleColon;
|
||||
use crate::errors::{GenericArgsInPatRequireTurbofishSyntax, PathSingleColon};
|
||||
use crate::{errors, maybe_whole};
|
||||
use rustc_ast::ptr::P;
|
||||
use rustc_ast::token::{self, Delimiter, Token, TokenKind};
|
||||
|
@ -382,6 +382,14 @@ impl<'a> Parser<'a> {
|
|||
};
|
||||
|
||||
PathSegment { ident, args: Some(args), id: ast::DUMMY_NODE_ID }
|
||||
} else if style == PathStyle::Pat
|
||||
&& self.check_noexpect(&token::Lt)
|
||||
&& self.look_ahead(1, |t| t.can_begin_type())
|
||||
{
|
||||
return Err(self.sess.create_err(GenericArgsInPatRequireTurbofishSyntax {
|
||||
span: self.token.span,
|
||||
suggest_turbofish: self.token.span.shrink_to_lo(),
|
||||
}));
|
||||
} else {
|
||||
// Generic arguments are not found.
|
||||
PathSegment::from_ident(ident)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue