@@ -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+ }
1930fn 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