@@ -366,8 +366,43 @@ impl ModuleItem for AttributeItem {
366366 let ident = match & * path. tree {
367367 UseTree :: Name ( name) => & name. ident ,
368368 UseTree :: Rename ( rename) => & rename. rename ,
369+ UseTree :: Group ( syn:: UseGroup { items, .. } ) => {
370+ for item in items {
371+ let ident = match item {
372+ UseTree :: Name ( name) => & name. ident ,
373+ UseTree :: Rename ( rename) => & rename. rename ,
374+ other => {
375+ return Err ( self . new_syn_error (
376+ other. span ( ) ,
377+ "can only contains a simple use or a group of simple uses" ,
378+ ) ) ;
379+ }
380+ } ;
381+ let item_meta = SimpleItemMeta :: from_attr ( ident. clone ( ) , & attr) ?;
382+ if item_meta. optional_name ( ) . is_some ( ) {
383+ // this check actually doesn't need to be placed in loop
384+ return Err ( self . new_syn_error (
385+ ident. span ( ) ,
386+ "`name` attribute is not allowed for multiple use items" ,
387+ ) ) ;
388+ }
389+ let py_name = ident. to_string ( ) ;
390+ let tokens = quote ! {
391+ vm. __module_set_attr( & module, #py_name, vm. new_pyobj( #ident) ) . unwrap( ) ;
392+ } ;
393+ args. context . module_extend_items . add_item (
394+ py_name,
395+ cfgs. clone ( ) ,
396+ tokens,
397+ ) ?;
398+ }
399+ return Ok ( ( ) ) ;
400+ }
369401 other => {
370- return Err ( self . new_syn_error ( other. span ( ) , "can only be a simple use" ) ) ;
402+ return Err ( self . new_syn_error (
403+ other. span ( ) ,
404+ "can only contains a simple use or a group of simple uses" ,
405+ ) ) ;
371406 }
372407 } ;
373408
0 commit comments