@@ -1781,7 +1781,7 @@ impl<'a> Parser<'a> {
1781
1781
let mut recovered = Recovered :: No ;
1782
1782
if self . eat ( exp ! ( OpenBrace ) ) {
1783
1783
while self . token != token:: CloseBrace {
1784
- match self . parse_field_def ( adt_ty) {
1784
+ match self . parse_field_def ( adt_ty, ident_span ) {
1785
1785
Ok ( field) => {
1786
1786
fields. push ( field) ;
1787
1787
}
@@ -1894,15 +1894,15 @@ impl<'a> Parser<'a> {
1894
1894
}
1895
1895
1896
1896
/// Parses an element of a struct declaration.
1897
- fn parse_field_def ( & mut self , adt_ty : & str ) -> PResult < ' a , FieldDef > {
1897
+ fn parse_field_def ( & mut self , adt_ty : & str , ident_span : Span ) -> PResult < ' a , FieldDef > {
1898
1898
self . recover_vcs_conflict_marker ( ) ;
1899
1899
let attrs = self . parse_outer_attributes ( ) ?;
1900
1900
self . recover_vcs_conflict_marker ( ) ;
1901
1901
self . collect_tokens ( None , attrs, ForceCollect :: No , |this, attrs| {
1902
1902
let lo = this. token . span ;
1903
1903
let vis = this. parse_visibility ( FollowedByType :: No ) ?;
1904
1904
let safety = this. parse_unsafe_field ( ) ;
1905
- this. parse_single_struct_field ( adt_ty, lo, vis, safety, attrs)
1905
+ this. parse_single_struct_field ( adt_ty, lo, vis, safety, attrs, ident_span )
1906
1906
. map ( |field| ( field, Trailing :: No , UsePreAttrPos :: No ) )
1907
1907
} )
1908
1908
}
@@ -1915,24 +1915,27 @@ impl<'a> Parser<'a> {
1915
1915
vis : Visibility ,
1916
1916
safety : Safety ,
1917
1917
attrs : AttrVec ,
1918
+ ident_span : Span ,
1918
1919
) -> PResult < ' a , FieldDef > {
1919
1920
let a_var = self . parse_name_and_ty ( adt_ty, lo, vis, safety, attrs) ?;
1920
- if self . eat ( exp ! ( Semi ) ) {
1921
- let sp = self . prev_token . span ;
1922
- let mut err =
1923
- self . dcx ( ) . struct_span_err ( sp, format ! ( "{adt_ty} fields are separated by `,`" ) ) ;
1924
- err. span_suggestion_short (
1925
- sp,
1926
- "replace `;` with `,`" ,
1927
- "," ,
1928
- Applicability :: MachineApplicable ,
1929
- ) ;
1930
- return Err ( err) ;
1931
- }
1932
1921
match self . token . kind {
1933
1922
token:: Comma => {
1934
1923
self . bump ( ) ;
1935
1924
}
1925
+ token:: Semi => {
1926
+ self . bump ( ) ;
1927
+ let sp = self . prev_token . span ;
1928
+ let mut err =
1929
+ self . dcx ( ) . struct_span_err ( sp, format ! ( "{adt_ty} fields are separated by `,`" ) ) ;
1930
+ err. span_suggestion_short (
1931
+ sp,
1932
+ "replace `;` with `,`" ,
1933
+ "," ,
1934
+ Applicability :: MachineApplicable ,
1935
+ ) ;
1936
+ err. span_label ( ident_span, format ! ( "while parsing this {adt_ty}" ) ) ;
1937
+ err. emit ( ) ;
1938
+ }
1936
1939
token:: CloseBrace => { }
1937
1940
token:: DocComment ( ..) => {
1938
1941
let previous_span = self . prev_token . span ;
0 commit comments