Skip to content

Commit 8f072ed

Browse files
committed
Fix bugs
1 parent 9584d41 commit 8f072ed

File tree

1 file changed

+25
-7
lines changed

1 file changed

+25
-7
lines changed

codegen-bindings-generator/src/python/generator.rs

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,17 @@ fn get_category(group: &str) -> Vec<syn::Stmt> {
1616
let category = file.#category(db);
1717
}
1818
}
19+
fn filter_symbols(
20+
nodes: &Vec<&codegen_sdk_ast_generator::Symbol>,
21+
group: &str,
22+
) -> Vec<codegen_sdk_ast_generator::Symbol> {
23+
nodes
24+
.iter()
25+
.filter(|node| node.category == pluralize(group, 2, false))
26+
.cloned()
27+
.cloned()
28+
.collect()
29+
}
1930
fn get_symbol_method_name(group: &str) -> syn::Ident {
2031
let symbol_name = codegen_sdk_ast_generator::get_symbol_name(group);
2132
syn::Ident::new(
@@ -112,8 +123,10 @@ fn generate_file_struct(
112123
.flatten();
113124
let mut symbols_methods = Vec::new();
114125
for group in codegen_sdk_ast_generator::GROUPS {
115-
symbols_methods.extend(symbols_method(group));
116-
symbols_methods.extend(get_symbols_method(group));
126+
if filter_symbols(&symbols, group).len() > 0 {
127+
symbols_methods.extend(symbols_method(group));
128+
symbols_methods.extend(get_symbols_method(group));
129+
}
117130
}
118131
output.push(parse_quote! {
119132
#[pymethods]
@@ -233,11 +246,13 @@ fn generate_symbol_enum(
233246
symbols: Vec<&Symbol>,
234247
group: &str,
235248
) -> anyhow::Result<Vec<syn::Stmt>> {
236-
let symbols: Vec<_> = symbols
249+
let symbols: Vec<_> = filter_symbols(&symbols, group)
237250
.iter()
238-
.filter(|symbol| symbol.category == pluralize(group, 2, false))
239251
.map(|symbol| format_ident!("{}", symbol.name))
240252
.collect();
253+
if symbols.len() == 0 {
254+
return Ok(Vec::new());
255+
}
241256
let symbol_name = codegen_sdk_ast_generator::get_symbol_name(group);
242257
let span = Span::call_site();
243258
let mut output = Vec::new();
@@ -282,6 +297,7 @@ fn generate_module(
282297
let register_name = format_ident!("register_{}", language_name);
283298
let struct_name = format_ident!("{}", language.file_struct_name());
284299
let module_name = format!("codegen_sdk_pink.{}", language_name);
300+
285301
output.push(parse_quote! {
286302
pub fn #register_name(py: Python<'_>, parent_module: &Bound<'_, PyModule>) -> PyResult<()> {
287303
let child_module = PyModule::new(parent_module.py(), #language_name)?;
@@ -310,10 +326,12 @@ pub(crate) fn generate_bindings(language: &Language) -> anyhow::Result<Vec<syn::
310326
output.extend(cst);
311327
let mut symbol_idents = Vec::new();
312328
for group in codegen_sdk_ast_generator::GROUPS {
313-
let symbol_enum = generate_symbol_enum(language, symbols.values().collect(), group)?;
314-
output.extend(symbol_enum);
329+
if filter_symbols(&symbols.values().collect(), group).len() > 0 {
330+
let symbol_enum = generate_symbol_enum(language, symbols.values().collect(), group)?;
331+
output.extend(symbol_enum);
332+
symbol_idents.push(codegen_sdk_ast_generator::get_symbol_name(group));
333+
}
315334
}
316-
317335
for (_, symbol) in symbols {
318336
let symbol_struct = generate_symbol_struct(language, &symbol)?;
319337
output.extend(symbol_struct);

0 commit comments

Comments
 (0)