Introduce can_begin_string_literal
.
We currently use `can_begin_literal_maybe_minus` in a couple of places where only string literals are allowed. This commit introduces a more specific function, which makes things clearer. It doesn't change behaviour because the two functions affected (`is_unsafe_foreign_mod` and `check_keyword_case`) are always followed by a call to `parse_abi`, which checks again for a string literal.
This commit is contained in:
parent
7d9a92ba31
commit
c6f78270b6
@ -621,6 +621,21 @@ pub fn can_begin_literal_maybe_minus(&self) -> bool {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn can_begin_string_literal(&self) -> bool {
|
||||||
|
match self.uninterpolate().kind {
|
||||||
|
Literal(..) => true,
|
||||||
|
Interpolated(ref nt) => match &**nt {
|
||||||
|
NtLiteral(_) => true,
|
||||||
|
NtExpr(e) => match &e.kind {
|
||||||
|
ast::ExprKind::Lit(_) => true,
|
||||||
|
_ => false,
|
||||||
|
},
|
||||||
|
_ => false,
|
||||||
|
},
|
||||||
|
_ => false,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// A convenience function for matching on identifiers during parsing.
|
/// A convenience function for matching on identifiers during parsing.
|
||||||
/// Turns interpolated identifier (`$i: ident`) or lifetime (`$l: lifetime`) token
|
/// Turns interpolated identifier (`$i: ident`) or lifetime (`$l: lifetime`) token
|
||||||
/// into the regular identifier or lifetime token it refers to,
|
/// into the regular identifier or lifetime token it refers to,
|
||||||
|
@ -1259,7 +1259,7 @@ fn is_unsafe_foreign_mod(&self) -> bool {
|
|||||||
self.token.is_keyword(kw::Unsafe)
|
self.token.is_keyword(kw::Unsafe)
|
||||||
&& self.is_keyword_ahead(1, &[kw::Extern])
|
&& self.is_keyword_ahead(1, &[kw::Extern])
|
||||||
&& self.look_ahead(
|
&& self.look_ahead(
|
||||||
2 + self.look_ahead(2, |t| t.can_begin_literal_maybe_minus() as usize),
|
2 + self.look_ahead(2, |t| t.can_begin_string_literal() as usize),
|
||||||
|t| t.kind == token::OpenDelim(Delimiter::Brace),
|
|t| t.kind == token::OpenDelim(Delimiter::Brace),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -2448,7 +2448,7 @@ pub(super) fn check_fn_front_matter(&mut self, check_pub: bool, case: Case) -> b
|
|||||||
})
|
})
|
||||||
// `extern ABI fn`
|
// `extern ABI fn`
|
||||||
|| self.check_keyword_case(kw::Extern, case)
|
|| self.check_keyword_case(kw::Extern, case)
|
||||||
&& self.look_ahead(1, |t| t.can_begin_literal_maybe_minus())
|
&& self.look_ahead(1, |t| t.can_begin_string_literal())
|
||||||
&& (self.look_ahead(2, |t| t.is_keyword_case(kw::Fn, case)) ||
|
&& (self.look_ahead(2, |t| t.is_keyword_case(kw::Fn, case)) ||
|
||||||
// this branch is only for better diagnostic in later, `pub` is not allowed here
|
// this branch is only for better diagnostic in later, `pub` is not allowed here
|
||||||
(self.may_recover()
|
(self.may_recover()
|
||||||
|
Loading…
Reference in New Issue
Block a user