@@ -136,17 +136,15 @@ pub fn extract(
136136 let tree = parser. parse ( & source, None ) . expect ( "Failed to parse file" ) ;
137137 trap_writer. comment ( format ! ( "Auto-generated TRAP file for {}" , path_str) ) ;
138138 let file_label = populate_file ( trap_writer, path) ;
139- let mut visitor = Visitor {
139+ let mut visitor = Visitor :: new (
140140 source,
141141 trap_writer,
142142 // TODO: should we handle path strings that are not valid UTF8 better?
143- path : & path_str,
143+ & path_str,
144144 file_label,
145- toplevel_child_counter : 0 ,
146- stack : Vec :: new ( ) ,
147145 language_prefix,
148146 schema,
149- } ;
147+ ) ;
150148 traverse ( & tree, & mut visitor) ;
151149
152150 parser. reset ( ) ;
@@ -210,8 +208,10 @@ struct Visitor<'a> {
210208 trap_writer : & ' a mut trap:: Writer ,
211209 /// A counter for top-level child nodes
212210 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 ,
215215 /// A lookup table from type name to node types
216216 schema : & ' a NodeTypeMap ,
217217 /// A stack for gathering information from child nodes. Whenever a node is
@@ -223,7 +223,28 @@ struct Visitor<'a> {
223223 stack : Vec < ( trap:: Label , usize , Vec < ChildNode > ) > ,
224224}
225225
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+
227248 fn record_parse_error (
228249 & mut self ,
229250 error_message : String ,
@@ -321,7 +342,7 @@ impl Visitor<'_> {
321342 match & table. kind {
322343 EntryKind :: Token { kind_id, .. } => {
323344 self . trap_writer . add_tuple (
324- & format ! ( "{}_ast_node_info" , self . language_prefix ) ,
345+ & self . ast_node_info_table_name ,
325346 vec ! [
326347 trap:: Arg :: Label ( id) ,
327348 trap:: Arg :: Label ( parent_id) ,
@@ -330,12 +351,11 @@ impl Visitor<'_> {
330351 ] ,
331352 ) ;
332353 self . trap_writer . add_tuple (
333- & format ! ( "{}_tokeninfo" , self . language_prefix ) ,
354+ & self . tokeninfo_table_name ,
334355 vec ! [
335356 trap:: Arg :: Label ( id) ,
336357 trap:: Arg :: Int ( * kind_id) ,
337358 sliced_source_arg( self . source, node) ,
338- trap:: Arg :: Label ( loc) ,
339359 ] ,
340360 ) ;
341361 }
@@ -345,7 +365,7 @@ impl Visitor<'_> {
345365 } => {
346366 if let Some ( args) = self . complex_node ( & node, fields, & child_nodes, id) {
347367 self . trap_writer . add_tuple (
348- & format ! ( "{}_ast_node_info" , self . language_prefix ) ,
368+ & self . ast_node_info_table_name ,
349369 vec ! [
350370 trap:: Arg :: Label ( id) ,
351371 trap:: Arg :: Label ( parent_id) ,
0 commit comments