@@ -233,15 +233,6 @@ fn convert_nodes(
233
233
} ) ;
234
234
}
235
235
236
- // Finally, the type's defining table also includes the location.
237
- main_table. columns . push ( dbscheme:: Column {
238
- unique : false ,
239
- db_type : dbscheme:: DbColumnType :: Int ,
240
- name : "loc" ,
241
- ql_type : ql:: Type :: At ( "location" ) ,
242
- ql_type_is_ref : true ,
243
- } ) ;
244
-
245
236
entries. push ( dbscheme:: Entry :: Table ( main_table) ) ;
246
237
}
247
238
node_types:: EntryKind :: Token { .. } => { }
@@ -251,18 +242,24 @@ fn convert_nodes(
251
242
( entries, ast_node_members, token_kinds)
252
243
}
253
244
254
- /// Creates a dbscheme table entry representing the parent relation for AST nodes.
245
+ /// Creates a dbscheme table specifying the parent node and location for each
246
+ /// AST node.
255
247
///
256
248
/// # Arguments
257
- /// - `name` - the name of both the table to create and the node parent type.
249
+ /// - `name` - the name of the table to create.
250
+ /// - `parent_name` - the name of the parent type.
258
251
/// - `ast_node_name` - the name of the node child type.
259
- fn create_ast_node_parent_table < ' a > ( name : & ' a str , ast_node_name : & ' a str ) -> dbscheme:: Table < ' a > {
252
+ fn create_ast_node_info_table < ' a > (
253
+ name : & ' a str ,
254
+ parent_name : & ' a str ,
255
+ ast_node_name : & ' a str ,
256
+ ) -> dbscheme:: Table < ' a > {
260
257
dbscheme:: Table {
261
258
name,
262
259
columns : vec ! [
263
260
dbscheme:: Column {
264
261
db_type: dbscheme:: DbColumnType :: Int ,
265
- name: "child " ,
262
+ name: "node " ,
266
263
unique: false ,
267
264
ql_type: ql:: Type :: At ( ast_node_name) ,
268
265
ql_type_is_ref: true ,
@@ -271,7 +268,7 @@ fn create_ast_node_parent_table<'a>(name: &'a str, ast_node_name: &'a str) -> db
271
268
db_type: dbscheme:: DbColumnType :: Int ,
272
269
name: "parent" ,
273
270
unique: false ,
274
- ql_type: ql:: Type :: At ( name ) ,
271
+ ql_type: ql:: Type :: At ( parent_name ) ,
275
272
ql_type_is_ref: true ,
276
273
} ,
277
274
dbscheme:: Column {
@@ -281,6 +278,13 @@ fn create_ast_node_parent_table<'a>(name: &'a str, ast_node_name: &'a str) -> db
281
278
ql_type: ql:: Type :: Int ,
282
279
ql_type_is_ref: true ,
283
280
} ,
281
+ dbscheme:: Column {
282
+ unique: false ,
283
+ db_type: dbscheme:: DbColumnType :: Int ,
284
+ name: "loc" ,
285
+ ql_type: ql:: Type :: At ( "location" ) ,
286
+ ql_type_is_ref: true ,
287
+ } ,
284
288
] ,
285
289
keysets : Some ( vec ! [ "parent" , "parent_index" ] ) ,
286
290
}
@@ -312,13 +316,6 @@ fn create_tokeninfo<'a>(name: &'a str, type_name: &'a str) -> dbscheme::Table<'a
312
316
ql_type: ql:: Type :: String ,
313
317
ql_type_is_ref: true ,
314
318
} ,
315
- dbscheme:: Column {
316
- unique: false ,
317
- db_type: dbscheme:: DbColumnType :: Int ,
318
- name: "loc" ,
319
- ql_type: ql:: Type :: At ( "location" ) ,
320
- ql_type_is_ref: true ,
321
- } ,
322
319
] ,
323
320
}
324
321
}
@@ -619,6 +616,7 @@ fn main() -> std::io::Result<()> {
619
616
for language in languages {
620
617
let prefix = node_types:: to_snake_case ( & language. name ) ;
621
618
let ast_node_name = format ! ( "{}_ast_node" , & prefix) ;
619
+ let node_info_table_name = format ! ( "{}_ast_node_info" , & prefix) ;
622
620
let ast_node_parent_name = format ! ( "{}_ast_node_parent" , & prefix) ;
623
621
let token_name = format ! ( "{}_token" , & prefix) ;
624
622
let tokeninfo_name = format ! ( "{}_tokeninfo" , & prefix) ;
@@ -641,7 +639,8 @@ fn main() -> std::io::Result<()> {
641
639
name : & ast_node_parent_name,
642
640
members : [ & ast_node_name, "file" ] . iter ( ) . cloned ( ) . collect ( ) ,
643
641
} ) ,
644
- dbscheme:: Entry :: Table ( create_ast_node_parent_table (
642
+ dbscheme:: Entry :: Table ( create_ast_node_info_table (
643
+ & node_info_table_name,
645
644
& ast_node_parent_name,
646
645
& ast_node_name,
647
646
) ) ,
@@ -651,7 +650,7 @@ fn main() -> std::io::Result<()> {
651
650
let mut body = vec ! [
652
651
ql:: TopLevel :: Class ( ql_gen:: create_ast_node_class(
653
652
& ast_node_name,
654
- & ast_node_parent_name ,
653
+ & node_info_table_name ,
655
654
) ) ,
656
655
ql:: TopLevel :: Class ( ql_gen:: create_token_class( & token_name, & tokeninfo_name) ) ,
657
656
ql:: TopLevel :: Class ( ql_gen:: create_reserved_word_class( & reserved_word_name) ) ,
0 commit comments