Rollup merge of #135882 - hkBst:master, r=estebank
simplify `similar_tokens` from `Option<Vec<_>>` to `&[_]` All uses immediately invoke contains, so maybe a further simplification is possible.
This commit is contained in:
commit
78ded09912
4 changed files with 18 additions and 22 deletions
|
@ -527,13 +527,13 @@ impl TokenKind {
|
|||
|
||||
/// Returns tokens that are likely to be typed accidentally instead of the current token.
|
||||
/// Enables better error recovery when the wrong token is found.
|
||||
pub fn similar_tokens(&self) -> Option<Vec<TokenKind>> {
|
||||
match *self {
|
||||
Comma => Some(vec![Dot, Lt, Semi]),
|
||||
Semi => Some(vec![Colon, Comma]),
|
||||
Colon => Some(vec![Semi]),
|
||||
FatArrow => Some(vec![Eq, RArrow, Ge, Gt]),
|
||||
_ => None,
|
||||
pub fn similar_tokens(&self) -> &[TokenKind] {
|
||||
match self {
|
||||
Comma => &[Dot, Lt, Semi],
|
||||
Semi => &[Colon, Comma],
|
||||
Colon => &[Semi],
|
||||
FatArrow => &[Eq, RArrow, Ge, Gt],
|
||||
_ => &[],
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -101,15 +101,14 @@ fn parse_args<'a>(ecx: &ExtCtxt<'a>, sp: Span, tts: TokenStream) -> PResult<'a,
|
|||
|
||||
match p.expect(exp!(Comma)) {
|
||||
Err(err) => {
|
||||
match token::TokenKind::Comma.similar_tokens() {
|
||||
Some(tks) if tks.contains(&p.token.kind) => {
|
||||
// If a similar token is found, then it may be a typo. We
|
||||
// consider it as a comma, and continue parsing.
|
||||
err.emit();
|
||||
p.bump();
|
||||
}
|
||||
if token::TokenKind::Comma.similar_tokens().contains(&p.token.kind) {
|
||||
// If a similar token is found, then it may be a typo. We
|
||||
// consider it as a comma, and continue parsing.
|
||||
err.emit();
|
||||
p.bump();
|
||||
} else {
|
||||
// Otherwise stop the parsing and return the error.
|
||||
_ => return Err(err),
|
||||
return Err(err);
|
||||
}
|
||||
}
|
||||
Ok(Recovered::Yes(_)) => (),
|
||||
|
|
|
@ -3114,9 +3114,8 @@ impl<'a> Parser<'a> {
|
|||
let span_before_body = this.prev_token.span;
|
||||
let arm_body;
|
||||
let is_fat_arrow = this.check(exp!(FatArrow));
|
||||
let is_almost_fat_arrow = TokenKind::FatArrow
|
||||
.similar_tokens()
|
||||
.is_some_and(|similar_tokens| similar_tokens.contains(&this.token.kind));
|
||||
let is_almost_fat_arrow =
|
||||
TokenKind::FatArrow.similar_tokens().contains(&this.token.kind);
|
||||
|
||||
// this avoids the compiler saying that a `,` or `}` was expected even though
|
||||
// the pattern isn't a never pattern (and thus an arm body is required)
|
||||
|
|
|
@ -924,10 +924,8 @@ impl<'a> Parser<'a> {
|
|||
|
||||
_ => {
|
||||
// Attempt to keep parsing if it was a similar separator.
|
||||
if let Some(tokens) = exp.tok.similar_tokens() {
|
||||
if tokens.contains(&self.token.kind) {
|
||||
self.bump();
|
||||
}
|
||||
if exp.tok.similar_tokens().contains(&self.token.kind) {
|
||||
self.bump();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue