@@ -136,17 +136,15 @@ pub fn extract(
136
136
let tree = parser. parse ( & source, None ) . expect ( "Failed to parse file" ) ;
137
137
trap_writer. comment ( format ! ( "Auto-generated TRAP file for {}" , path_str) ) ;
138
138
let file_label = populate_file ( trap_writer, path) ;
139
- let mut visitor = Visitor {
139
+ let mut visitor = Visitor :: new (
140
140
source,
141
141
trap_writer,
142
142
// TODO: should we handle path strings that are not valid UTF8 better?
143
- path : & path_str,
143
+ & path_str,
144
144
file_label,
145
- toplevel_child_counter : 0 ,
146
- stack : Vec :: new ( ) ,
147
145
language_prefix,
148
146
schema,
149
- } ;
147
+ ) ;
150
148
traverse ( & tree, & mut visitor) ;
151
149
152
150
parser. reset ( ) ;
@@ -210,8 +208,10 @@ struct Visitor<'a> {
210
208
trap_writer : & ' a mut trap:: Writer ,
211
209
/// A counter for top-level child nodes
212
210
toplevel_child_counter : usize ,
213
- /// Language prefix
214
- language_prefix : & ' a str ,
211
+ /// Language-specific name of the AST info table
212
+ ast_node_info_table_name : String ,
213
+ /// Language-specific name of the tokeninfo table
214
+ tokeninfo_table_name : String ,
215
215
/// A lookup table from type name to node types
216
216
schema : & ' a NodeTypeMap ,
217
217
/// A stack for gathering information from child nodes. Whenever a node is
@@ -223,7 +223,28 @@ struct Visitor<'a> {
223
223
stack : Vec < ( trap:: Label , usize , Vec < ChildNode > ) > ,
224
224
}
225
225
226
- impl Visitor < ' _ > {
226
+ impl < ' a > Visitor < ' a > {
227
+ fn new (
228
+ source : & ' a [ u8 ] ,
229
+ trap_writer : & ' a mut trap:: Writer ,
230
+ path : & ' a str ,
231
+ file_label : trap:: Label ,
232
+ language_prefix : & str ,
233
+ schema : & ' a NodeTypeMap ,
234
+ ) -> Visitor < ' a > {
235
+ Visitor {
236
+ path,
237
+ file_label,
238
+ source,
239
+ trap_writer,
240
+ toplevel_child_counter : 0 ,
241
+ ast_node_info_table_name : format ! ( "{}_ast_node_info" , language_prefix) ,
242
+ tokeninfo_table_name : format ! ( "{}_tokeninfo" , language_prefix) ,
243
+ schema,
244
+ stack : Vec :: new ( ) ,
245
+ }
246
+ }
247
+
227
248
fn record_parse_error (
228
249
& mut self ,
229
250
error_message : String ,
@@ -321,7 +342,7 @@ impl Visitor<'_> {
321
342
match & table. kind {
322
343
EntryKind :: Token { kind_id, .. } => {
323
344
self . trap_writer . add_tuple (
324
- & format ! ( "{}_ast_node_info" , self . language_prefix ) ,
345
+ & self . ast_node_info_table_name ,
325
346
vec ! [
326
347
trap:: Arg :: Label ( id) ,
327
348
trap:: Arg :: Label ( parent_id) ,
@@ -330,12 +351,11 @@ impl Visitor<'_> {
330
351
] ,
331
352
) ;
332
353
self . trap_writer . add_tuple (
333
- & format ! ( "{}_tokeninfo" , self . language_prefix ) ,
354
+ & self . tokeninfo_table_name ,
334
355
vec ! [
335
356
trap:: Arg :: Label ( id) ,
336
357
trap:: Arg :: Int ( * kind_id) ,
337
358
sliced_source_arg( self . source, node) ,
338
- trap:: Arg :: Label ( loc) ,
339
359
] ,
340
360
) ;
341
361
}
@@ -345,7 +365,7 @@ impl Visitor<'_> {
345
365
} => {
346
366
if let Some ( args) = self . complex_node ( & node, fields, & child_nodes, id) {
347
367
self . trap_writer . add_tuple (
348
- & format ! ( "{}_ast_node_info" , self . language_prefix ) ,
368
+ & self . ast_node_info_table_name ,
349
369
vec ! [
350
370
trap:: Arg :: Label ( id) ,
351
371
trap:: Arg :: Label ( parent_id) ,
0 commit comments