@@ -52,8 +52,10 @@ impl ParserDefinitionNodeExtensions for ParserDefinitionNode {
5252 let parser = if name. is_empty ( ) {
5353 parser
5454 } else {
55+ let name = format_ident ! ( "{}" , name. to_pascal_case( ) ) ;
56+
5557 quote ! {
56- #parser. with_name( #name)
58+ #parser. with_name( FieldName :: #name)
5759 }
5860 } ;
5961
@@ -68,8 +70,10 @@ impl ParserDefinitionNodeExtensions for ParserDefinitionNode {
6870 let parser = if name. is_empty ( ) {
6971 parser
7072 } else {
73+ let name = format_ident ! ( "{}" , name. to_pascal_case( ) ) ;
74+
7175 quote ! {
72- #parser. with_name( #name)
76+ #parser. with_name( FieldName :: #name)
7377 }
7478 } ;
7579
@@ -85,8 +89,10 @@ impl ParserDefinitionNodeExtensions for ParserDefinitionNode {
8589 if name. is_empty ( ) {
8690 parser
8791 } else {
92+ let name = format_ident ! ( "{}" , name. to_pascal_case( ) ) ;
93+
8894 quote ! {
89- #parser. with_name( #name)
95+ #parser. with_name( FieldName :: #name)
9096 }
9197 }
9298 }
@@ -110,8 +116,10 @@ impl ParserDefinitionNodeExtensions for ParserDefinitionNode {
110116 if name. is_empty ( ) {
111117 parser
112118 } else {
119+ let name = format_ident ! ( "{}" , name. to_pascal_case( ) ) ;
120+
113121 quote ! {
114- #parser. with_name( #name)
122+ #parser. with_name( FieldName :: #name)
115123 }
116124 }
117125 }
@@ -168,8 +176,8 @@ impl ParserDefinitionNodeExtensions for ParserDefinitionNode {
168176 }
169177
170178 Self :: DelimitedBy ( open, body, close) => {
171- let open_field_name = & open. name ;
172- let close_field_name = & close. name ;
179+ let open_field_name = format_ident ! ( "{}" , open. name. to_pascal_case ( ) ) ;
180+ let close_field_name = format_ident ! ( "{}" , close. name. to_pascal_case ( ) ) ;
173181 let [ open_delim, close_delim] = match ( open. as_ref ( ) , close. as_ref ( ) ) {
174182 (
175183 ParserDefinitionNode :: ScannerDefinition ( open, ..) ,
@@ -197,38 +205,44 @@ impl ParserDefinitionNodeExtensions for ParserDefinitionNode {
197205 let mut delim_guard = input. open_delim( TokenKind :: #close_delim) ;
198206 let input = delim_guard. ctx( ) ;
199207
200- seq. elem_named( #open_field_name, self . parse_token_with_trivia:: <#lex_ctx>( input, TokenKind :: #open_delim) ) ?;
208+ seq. elem_named(
209+ FieldName :: #open_field_name,
210+ self . parse_token_with_trivia:: <#lex_ctx>( input, TokenKind :: #open_delim)
211+ ) ?;
201212 #body_parser
202- seq. elem_named( #close_field_name, self . parse_token_with_trivia:: <#lex_ctx>( input, TokenKind :: #close_delim) ) ?;
213+ seq. elem_named(
214+ FieldName :: #close_field_name,
215+ self . parse_token_with_trivia:: <#lex_ctx>( input, TokenKind :: #close_delim)
216+ ) ?;
203217 seq. finish( )
204218 } )
205219 }
206220 }
207221
208222 Self :: SeparatedBy ( body, separator) => {
209- let separator_field_name = & separator. name ;
223+ let separator_field_name = format_ident ! ( "{}" , separator. name. to_pascal_case ( ) ) ;
210224 let separator = match separator. as_ref ( ) {
211225 ParserDefinitionNode :: ScannerDefinition ( scanner, ..) => {
212226 format_ident ! ( "{name}" , name = scanner. name( ) )
213227 }
214228 _ => unreachable ! ( "Only tokens are permitted as separators" ) ,
215229 } ;
216230
217- let body_field_name = & body. name ;
231+ let body_field_name = format_ident ! ( "{}" , body. name. to_pascal_case ( ) ) ;
218232 let parser = body. to_parser_code ( context_name, is_trivia) ;
219233
220234 quote ! {
221235 SeparatedHelper :: run:: <_, #lex_ctx>(
222236 input,
223237 self ,
224- |input| #parser. with_name( #body_field_name) ,
238+ |input| #parser. with_name( FieldName :: #body_field_name) ,
225239 TokenKind :: #separator,
226- #separator_field_name,
240+ FieldName :: #separator_field_name,
227241 )
228242 }
229243 }
230244 Self :: TerminatedBy ( body, terminator) => {
231- let terminator_field_name = & terminator. name ;
245+ let terminator_field_name = format_ident ! ( "{}" , terminator. name. to_pascal_case ( ) ) ;
232246
233247 let terminator = match terminator. as_ref ( ) {
234248 ParserDefinitionNode :: ScannerDefinition ( scanner, ..) => {
@@ -256,7 +270,7 @@ impl ParserDefinitionNodeExtensions for ParserDefinitionNode {
256270 SequenceHelper :: run( |mut seq| {
257271 #body_parser
258272 seq. elem_named(
259- #terminator_field_name,
273+ FieldName :: #terminator_field_name,
260274 self . parse_token_with_trivia:: <#lex_ctx>( input, TokenKind :: #terminator)
261275 ) ?;
262276 seq. finish( )
@@ -326,7 +340,9 @@ pub fn make_sequence_versioned(
326340 let code = if name. is_empty ( ) {
327341 quote ! { seq. elem( #parser) ?; }
328342 } else {
329- quote ! { seq. elem_named( #name, #parser) ?; }
343+ let field_name = format_ident ! ( "{}" , name. to_pascal_case( ) ) ;
344+
345+ quote ! { seq. elem_named( FieldName :: #field_name, #parser) ?; }
330346 } ;
331347
332348 versions. wrap_code ( code, None )
0 commit comments