Rollup merge of #119231 - aDotInTheVoid:PatKind-struct-bool-docs, r=compiler-errors
Clairify `ast::PatKind::Struct` presese of `..` by using an enum instead of a bool
The bool is mainly used for when a `..` is present, but it is also set on recovery to avoid errors. The doc comment not describes both of these cases.
See cee794ee98/compiler/rustc_parse/src/parser/pat.rs (L890-L897)
for the only place this is constructed.
r? ``@compiler-errors``
This commit is contained in:
commit
bdc4480914
7 changed files with 30 additions and 15 deletions
|
@ -15,7 +15,7 @@ use rustc_ast::ptr::P;
|
|||
use rustc_ast::token::{self, Delimiter};
|
||||
use rustc_ast::{
|
||||
self as ast, AttrVec, BindingAnnotation, ByRef, Expr, ExprKind, MacCall, Mutability, Pat,
|
||||
PatField, PatKind, Path, QSelf, RangeEnd, RangeSyntax,
|
||||
PatField, PatFieldsRest, PatKind, Path, QSelf, RangeEnd, RangeSyntax,
|
||||
};
|
||||
use rustc_ast_pretty::pprust;
|
||||
use rustc_errors::{Applicability, DiagnosticBuilder, PResult};
|
||||
|
@ -891,7 +891,8 @@ impl<'a> Parser<'a> {
|
|||
e.span_label(path.span, "while parsing the fields for this pattern");
|
||||
e.emit();
|
||||
self.recover_stmt();
|
||||
(ThinVec::new(), true)
|
||||
// When recovering, pretend we had `Foo { .. }`, to avoid cascading errors.
|
||||
(ThinVec::new(), PatFieldsRest::Rest)
|
||||
});
|
||||
self.bump();
|
||||
Ok(PatKind::Struct(qself, path, fields, etc))
|
||||
|
@ -965,9 +966,9 @@ impl<'a> Parser<'a> {
|
|||
}
|
||||
|
||||
/// Parses the fields of a struct-like pattern.
|
||||
fn parse_pat_fields(&mut self) -> PResult<'a, (ThinVec<PatField>, bool)> {
|
||||
fn parse_pat_fields(&mut self) -> PResult<'a, (ThinVec<PatField>, PatFieldsRest)> {
|
||||
let mut fields = ThinVec::new();
|
||||
let mut etc = false;
|
||||
let mut etc = PatFieldsRest::None;
|
||||
let mut ate_comma = true;
|
||||
let mut delayed_err: Option<DiagnosticBuilder<'a>> = None;
|
||||
let mut first_etc_and_maybe_comma_span = None;
|
||||
|
@ -1001,7 +1002,7 @@ impl<'a> Parser<'a> {
|
|||
|| self.check_noexpect(&token::DotDotDot)
|
||||
|| self.check_keyword(kw::Underscore)
|
||||
{
|
||||
etc = true;
|
||||
etc = PatFieldsRest::Rest;
|
||||
let mut etc_sp = self.token.span;
|
||||
if first_etc_and_maybe_comma_span.is_none() {
|
||||
if let Some(comma_tok) = self
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue