Skip to content

Commit b6c071a

Browse files
committed
Shared: Further consolidate generators
1 parent 5335ec0 commit b6c071a

File tree

3 files changed

+129
-231
lines changed

3 files changed

+129
-231
lines changed

ql/extractor/src/bin/generator.rs

Lines changed: 2 additions & 102 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,6 @@
1-
use std::fs::File;
2-
use std::io::LineWriter;
3-
use std::io::Write;
41
use std::path::PathBuf;
52

6-
use codeql_extractor::generator::{
7-
convert_nodes, create_ast_node_info_table, create_container_union,
8-
create_containerparent_table, create_diagnostics, create_files_table, create_folders_table,
9-
create_location_union, create_locations_default_table, create_source_location_prefix_table,
10-
create_token_case, create_tokeninfo, dbscheme, language::Language, ql, ql_gen,
11-
};
12-
use codeql_extractor::node_types;
3+
use codeql_extractor::generator::{generate, language::Language};
134

145
fn main() -> std::io::Result<()> {
156
tracing_subscriber::fmt()
@@ -56,97 +47,6 @@ fn main() -> std::io::Result<()> {
5647
node_types: tree_sitter_json::NODE_TYPES,
5748
},
5849
];
59-
let mut dbscheme_writer = LineWriter::new(File::create(dbscheme_path)?);
60-
write!(
61-
dbscheme_writer,
62-
"// CodeQL database schema for {}\n\
63-
// Automatically generated from the tree-sitter grammar; do not edit\n\n",
64-
languages[0].name
65-
)?;
66-
let (diagnostics_case, diagnostics_table) = create_diagnostics();
67-
dbscheme::write(
68-
&mut dbscheme_writer,
69-
&[
70-
create_location_union(),
71-
create_locations_default_table(),
72-
create_files_table(),
73-
create_folders_table(),
74-
create_container_union(),
75-
create_containerparent_table(),
76-
create_source_location_prefix_table(),
77-
dbscheme::Entry::Table(diagnostics_table),
78-
dbscheme::Entry::Case(diagnostics_case),
79-
],
80-
)?;
8150

82-
let mut ql_writer = LineWriter::new(File::create(ql_library_path)?);
83-
write!(
84-
ql_writer,
85-
"/**\n\
86-
* CodeQL library for {}
87-
* Automatically generated from the tree-sitter grammar; do not edit\n\
88-
*/\n\n",
89-
languages[0].name
90-
)?;
91-
ql::write(
92-
&mut ql_writer,
93-
&[ql::TopLevel::Import(ql::Import {
94-
module: "codeql.Locations",
95-
alias: Some("L"),
96-
})],
97-
)?;
98-
99-
for language in languages {
100-
let prefix = node_types::to_snake_case(&language.name);
101-
let ast_node_name = format!("{}_ast_node", &prefix);
102-
let node_info_table_name = format!("{}_ast_node_info", &prefix);
103-
let ast_node_parent_name = format!("{}_ast_node_parent", &prefix);
104-
let token_name = format!("{}_token", &prefix);
105-
let tokeninfo_name = format!("{}_tokeninfo", &prefix);
106-
let reserved_word_name = format!("{}_reserved_word", &prefix);
107-
let nodes = node_types::read_node_types_str(&prefix, language.node_types)?;
108-
let (dbscheme_entries, mut ast_node_members, token_kinds) = convert_nodes(&nodes);
109-
ast_node_members.insert(&token_name);
110-
dbscheme::write(&mut dbscheme_writer, &dbscheme_entries)?;
111-
let token_case = create_token_case(&token_name, token_kinds);
112-
dbscheme::write(
113-
&mut dbscheme_writer,
114-
&[
115-
dbscheme::Entry::Table(create_tokeninfo(&tokeninfo_name, &token_name)),
116-
dbscheme::Entry::Case(token_case),
117-
dbscheme::Entry::Union(dbscheme::Union {
118-
name: &ast_node_name,
119-
members: ast_node_members,
120-
}),
121-
dbscheme::Entry::Union(dbscheme::Union {
122-
name: &ast_node_parent_name,
123-
members: [&ast_node_name, "file"].iter().cloned().collect(),
124-
}),
125-
dbscheme::Entry::Table(create_ast_node_info_table(
126-
&node_info_table_name,
127-
&ast_node_parent_name,
128-
&ast_node_name,
129-
)),
130-
],
131-
)?;
132-
133-
let mut body = vec![
134-
ql::TopLevel::Class(ql_gen::create_ast_node_class(
135-
&ast_node_name,
136-
&node_info_table_name,
137-
)),
138-
ql::TopLevel::Class(ql_gen::create_token_class(&token_name, &tokeninfo_name)),
139-
ql::TopLevel::Class(ql_gen::create_reserved_word_class(&reserved_word_name)),
140-
];
141-
body.append(&mut ql_gen::convert_nodes(&nodes));
142-
ql::write(
143-
&mut ql_writer,
144-
&[ql::TopLevel::Module(ql::Module {
145-
qldoc: None,
146-
name: &language.name,
147-
body,
148-
})],
149-
)?;
150-
}
151-
Ok(())
51+
generate(languages, dbscheme_path, ql_library_path)
15252
}

ruby/extractor/src/bin/generator.rs

Lines changed: 2 additions & 111 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,7 @@
11
use clap::arg;
2-
use std::fs::File;
3-
use std::io::LineWriter;
4-
use std::io::Write;
52
use std::path::PathBuf;
63

7-
use codeql_extractor::generator::{
8-
convert_nodes, create_ast_node_info_table, create_container_union,
9-
create_containerparent_table, create_diagnostics, create_files_table, create_folders_table,
10-
create_location_union, create_locations_default_table, create_source_location_prefix_table,
11-
create_token_case, create_tokeninfo, dbscheme, language::Language, ql, ql_gen,
12-
};
13-
use codeql_extractor::node_types;
4+
use codeql_extractor::generator::{generate, language::Language};
145

156
fn main() -> std::io::Result<()> {
167
tracing_subscriber::fmt()
@@ -44,105 +35,5 @@ fn main() -> std::io::Result<()> {
4435
},
4536
];
4637

47-
let dbscheme_file = File::create(dbscheme_path).map_err(|e| {
48-
tracing::error!("Failed to create dbscheme file: {}", e);
49-
e
50-
})?;
51-
let mut dbscheme_writer = LineWriter::new(dbscheme_file);
52-
write!(
53-
dbscheme_writer,
54-
"// CodeQL database schema for {}\n\
55-
// Automatically generated from the tree-sitter grammar; do not edit\n\n",
56-
languages[0].name
57-
)?;
58-
let (diagnostics_case, diagnostics_table) = create_diagnostics();
59-
dbscheme::write(
60-
&mut dbscheme_writer,
61-
&[
62-
create_location_union(),
63-
create_locations_default_table(),
64-
create_files_table(),
65-
create_folders_table(),
66-
create_container_union(),
67-
create_containerparent_table(),
68-
create_source_location_prefix_table(),
69-
dbscheme::Entry::Table(diagnostics_table),
70-
dbscheme::Entry::Case(diagnostics_case),
71-
],
72-
)?;
73-
74-
let ql_library_file = File::create(ql_library_path).map_err(|e| {
75-
tracing::error!("Failed to create ql library file: {}", e);
76-
e
77-
})?;
78-
let mut ql_writer = LineWriter::new(ql_library_file);
79-
write!(
80-
ql_writer,
81-
"/**\n\
82-
* CodeQL library for {}
83-
* Automatically generated from the tree-sitter grammar; do not edit\n\
84-
*/\n\n",
85-
languages[0].name
86-
)?;
87-
ql::write(
88-
&mut ql_writer,
89-
&[ql::TopLevel::Import(ql::Import {
90-
module: "codeql.Locations",
91-
alias: Some("L"),
92-
})],
93-
)?;
94-
95-
for language in languages {
96-
let prefix = node_types::to_snake_case(&language.name);
97-
let ast_node_name = format!("{}_ast_node", &prefix);
98-
let node_info_table_name = format!("{}_ast_node_info", &prefix);
99-
let ast_node_parent_name = format!("{}_ast_node_parent", &prefix);
100-
let token_name = format!("{}_token", &prefix);
101-
let tokeninfo_name = format!("{}_tokeninfo", &prefix);
102-
let reserved_word_name = format!("{}_reserved_word", &prefix);
103-
let nodes = node_types::read_node_types_str(&prefix, language.node_types)?;
104-
let (dbscheme_entries, mut ast_node_members, token_kinds) = convert_nodes(&nodes);
105-
ast_node_members.insert(&token_name);
106-
dbscheme::write(&mut dbscheme_writer, &dbscheme_entries)?;
107-
let token_case = create_token_case(&token_name, token_kinds);
108-
dbscheme::write(
109-
&mut dbscheme_writer,
110-
&[
111-
dbscheme::Entry::Table(create_tokeninfo(&tokeninfo_name, &token_name)),
112-
dbscheme::Entry::Case(token_case),
113-
dbscheme::Entry::Union(dbscheme::Union {
114-
name: &ast_node_name,
115-
members: ast_node_members,
116-
}),
117-
dbscheme::Entry::Union(dbscheme::Union {
118-
name: &ast_node_parent_name,
119-
members: [&ast_node_name, "file"].iter().cloned().collect(),
120-
}),
121-
dbscheme::Entry::Table(create_ast_node_info_table(
122-
&node_info_table_name,
123-
&ast_node_parent_name,
124-
&ast_node_name,
125-
)),
126-
],
127-
)?;
128-
129-
let mut body = vec![
130-
ql::TopLevel::Class(ql_gen::create_ast_node_class(
131-
&ast_node_name,
132-
&node_info_table_name,
133-
)),
134-
ql::TopLevel::Class(ql_gen::create_token_class(&token_name, &tokeninfo_name)),
135-
ql::TopLevel::Class(ql_gen::create_reserved_word_class(&reserved_word_name)),
136-
];
137-
body.append(&mut ql_gen::convert_nodes(&nodes));
138-
ql::write(
139-
&mut ql_writer,
140-
&[ql::TopLevel::Module(ql::Module {
141-
qldoc: None,
142-
name: &language.name,
143-
body,
144-
})],
145-
)?;
146-
}
147-
Ok(())
38+
generate(languages, dbscheme_path, ql_library_path)
14839
}

0 commit comments

Comments
 (0)