@@ -49,6 +49,7 @@ impl<'a> Parser<'a> {
4949 }
5050
5151 /// Parses the contents of a module (inner attributes followed by module items).
52+ /// We exit once we hit `term`
5253 pub fn parse_mod (
5354 & mut self ,
5455 term : & TokenKind ,
@@ -59,13 +60,13 @@ impl<'a> Parser<'a> {
5960 let post_attr_lo = self . token . span ;
6061 let mut items = ThinVec :: new ( ) ;
6162 while let Some ( item) = self . parse_item ( ForceCollect :: No ) ? {
63+ self . maybe_consume_incorrect_semicolon ( Some ( & item) ) ;
6264 items. push ( item) ;
63- self . maybe_consume_incorrect_semicolon ( & items) ;
6465 }
6566
6667 if !self . eat ( term) {
6768 let token_str = super :: token_descr ( & self . token ) ;
68- if !self . maybe_consume_incorrect_semicolon ( & items) {
69+ if !self . maybe_consume_incorrect_semicolon ( items. last ( ) . map ( |x| & * * x ) ) {
6970 let msg = format ! ( "expected item, found {token_str}" ) ;
7071 let mut err = self . dcx ( ) . struct_span_err ( self . token . span , msg) ;
7172 let span = self . token . span ;
@@ -101,9 +102,9 @@ impl<'a> Parser<'a> {
101102 fn_parse_mode : FnParseMode ,
102103 force_collect : ForceCollect ,
103104 ) -> PResult < ' a , Option < Item > > {
104- self . recover_diff_marker ( ) ;
105+ self . recover_vcs_conflict_marker ( ) ;
105106 let attrs = self . parse_outer_attributes ( ) ?;
106- self . recover_diff_marker ( ) ;
107+ self . recover_vcs_conflict_marker ( ) ;
107108 self . parse_item_common ( attrs, true , false , fn_parse_mode, force_collect)
108109 }
109110
@@ -194,12 +195,12 @@ impl<'a> Parser<'a> {
194195 fn_parse_mode : FnParseMode ,
195196 case : Case ,
196197 ) -> PResult < ' a , Option < ItemInfo > > {
197- let def_final = def == & Defaultness :: Final ;
198+ let check_pub = def == & Defaultness :: Final ;
198199 let mut def_ = || mem:: replace ( def, Defaultness :: Final ) ;
199200
200201 let info = if self . eat_keyword_case ( kw:: Use , case) {
201202 self . parse_use_item ( ) ?
202- } else if self . check_fn_front_matter ( def_final , case) {
203+ } else if self . check_fn_front_matter ( check_pub , case) {
203204 // FUNCTION ITEM
204205 let ( ident, sig, generics, body) =
205206 self . parse_fn ( attrs, fn_parse_mode, lo, vis, case) ?;
@@ -310,7 +311,7 @@ impl<'a> Parser<'a> {
310311 Ok ( Some ( info) )
311312 }
312313
313- fn recover_import_as_use ( & mut self ) -> PResult < ' a , Option < ( Ident , ItemKind ) > > {
314+ fn recover_import_as_use ( & mut self ) -> PResult < ' a , Option < ItemInfo > > {
314315 let span = self . token . span ;
315316 let token_name = super :: token_descr ( & self . token ) ;
316317 let snapshot = self . create_snapshot_for_diagnostic ( ) ;
@@ -328,7 +329,7 @@ impl<'a> Parser<'a> {
328329 }
329330 }
330331
331- fn parse_use_item ( & mut self ) -> PResult < ' a , ( Ident , ItemKind ) > {
332+ fn parse_use_item ( & mut self ) -> PResult < ' a , ItemInfo > {
332333 let tree = self . parse_use_tree ( ) ?;
333334 if let Err ( mut e) = self . expect_semi ( ) {
334335 match tree. kind {
@@ -738,7 +739,7 @@ impl<'a> Parser<'a> {
738739 if self . recover_doc_comment_before_brace ( ) {
739740 continue ;
740741 }
741- self . recover_diff_marker ( ) ;
742+ self . recover_vcs_conflict_marker ( ) ;
742743 match parse_item ( self ) {
743744 Ok ( None ) => {
744745 let mut is_unnecessary_semicolon = !items. is_empty ( )
@@ -1085,7 +1086,7 @@ impl<'a> Parser<'a> {
10851086 /// ```
10861087 fn parse_use_tree_list ( & mut self ) -> PResult < ' a , ThinVec < ( UseTree , ast:: NodeId ) > > {
10871088 self . parse_delim_comma_seq ( Delimiter :: Brace , |p| {
1088- p. recover_diff_marker ( ) ;
1089+ p. recover_vcs_conflict_marker ( ) ;
10891090 Ok ( ( p. parse_use_tree ( ) ?, DUMMY_NODE_ID ) )
10901091 } )
10911092 . map ( |( r, _) | r)
@@ -1512,9 +1513,9 @@ impl<'a> Parser<'a> {
15121513 }
15131514
15141515 fn parse_enum_variant ( & mut self , span : Span ) -> PResult < ' a , Option < Variant > > {
1515- self . recover_diff_marker ( ) ;
1516+ self . recover_vcs_conflict_marker ( ) ;
15161517 let variant_attrs = self . parse_outer_attributes ( ) ?;
1517- self . recover_diff_marker ( ) ;
1518+ self . recover_vcs_conflict_marker ( ) ;
15181519 let help = "enum variants can be `Variant`, `Variant = <integer>`, \
15191520 `Variant(Type, ..., TypeN)` or `Variant { fields: Types }`";
15201521 self . collect_tokens_trailing_token (
@@ -1703,6 +1704,10 @@ impl<'a> Parser<'a> {
17031704 Ok ( ( class_name, ItemKind :: Union ( vdata, generics) ) )
17041705 }
17051706
1707+ /// This function parses the fields of record structs:
1708+ ///
1709+ /// - `struct S { ... }`
1710+ /// - `enum E { Variant { ... } }`
17061711 pub ( crate ) fn parse_record_struct_body (
17071712 & mut self ,
17081713 adt_ty : & str ,
@@ -1729,19 +1734,10 @@ impl<'a> Parser<'a> {
17291734 self . eat ( & token:: CloseDelim ( Delimiter :: Brace ) ) ;
17301735 } else {
17311736 let token_str = super :: token_descr ( & self . token ) ;
1732- let msg = format ! (
1733- "expected {}`{{` after struct name, found {}" ,
1734- if parsed_where { "" } else { "`where`, or " } ,
1735- token_str
1736- ) ;
1737+ let where_str = if parsed_where { "" } else { "`where`, or " } ;
1738+ let msg = format ! ( "expected {where_str}`{{` after struct name, found {token_str}" ) ;
17371739 let mut err = self . dcx ( ) . struct_span_err ( self . token . span , msg) ;
1738- err. span_label (
1739- self . token . span ,
1740- format ! (
1741- "expected {}`{{` after struct name" ,
1742- if parsed_where { "" } else { "`where`, or " }
1743- ) ,
1744- ) ;
1740+ err. span_label ( self . token . span , format ! ( "expected {where_str}`{{` after struct name" , ) ) ;
17451741 return Err ( err) ;
17461742 }
17471743
@@ -1755,7 +1751,7 @@ impl<'a> Parser<'a> {
17551751 let attrs = p. parse_outer_attributes ( ) ?;
17561752 p. collect_tokens_trailing_token ( attrs, ForceCollect :: No , |p, attrs| {
17571753 let mut snapshot = None ;
1758- if p. is_diff_marker ( & TokenKind :: BinOp ( token:: Shl ) , & TokenKind :: Lt ) {
1754+ if p. is_vcs_conflict_marker ( & TokenKind :: BinOp ( token:: Shl ) , & TokenKind :: Lt ) {
17591755 // Account for `<<<<<<<` diff markers. We can't proactively error here because
17601756 // that can be a valid type start, so we snapshot and reparse only we've
17611757 // encountered another parse error.
@@ -1766,7 +1762,7 @@ impl<'a> Parser<'a> {
17661762 Ok ( vis) => vis,
17671763 Err ( err) => {
17681764 if let Some ( ref mut snapshot) = snapshot {
1769- snapshot. recover_diff_marker ( ) ;
1765+ snapshot. recover_vcs_conflict_marker ( ) ;
17701766 }
17711767 return Err ( err) ;
17721768 }
@@ -1775,7 +1771,7 @@ impl<'a> Parser<'a> {
17751771 Ok ( ty) => ty,
17761772 Err ( err) => {
17771773 if let Some ( ref mut snapshot) = snapshot {
1778- snapshot. recover_diff_marker ( ) ;
1774+ snapshot. recover_vcs_conflict_marker ( ) ;
17791775 }
17801776 return Err ( err) ;
17811777 }
@@ -1800,9 +1796,9 @@ impl<'a> Parser<'a> {
18001796
18011797 /// Parses an element of a struct declaration.
18021798 fn parse_field_def ( & mut self , adt_ty : & str ) -> PResult < ' a , FieldDef > {
1803- self . recover_diff_marker ( ) ;
1799+ self . recover_vcs_conflict_marker ( ) ;
18041800 let attrs = self . parse_outer_attributes ( ) ?;
1805- self . recover_diff_marker ( ) ;
1801+ self . recover_vcs_conflict_marker ( ) ;
18061802 self . collect_tokens_trailing_token ( attrs, ForceCollect :: No , |this, attrs| {
18071803 let lo = this. token . span ;
18081804 let vis = this. parse_visibility ( FollowedByType :: No ) ?;
@@ -2662,7 +2658,7 @@ impl<'a> Parser<'a> {
26622658 }
26632659
26642660 let ( mut params, _) = self . parse_paren_comma_seq ( |p| {
2665- p. recover_diff_marker ( ) ;
2661+ p. recover_vcs_conflict_marker ( ) ;
26662662 let snapshot = p. create_snapshot_for_diagnostic ( ) ;
26672663 let param = p. parse_param_general ( req_name, first_param) . or_else ( |e| {
26682664 let guar = e. emit ( ) ;
0 commit comments