@@ -32,7 +32,6 @@ fn class_name(type_name: &str) -> String {
3232}
3333
3434fn property_name ( type_name : & str , field_name : & str ) -> String {
35- // N.B.: type names here are before any manipulation done by class_name
3635 let name = match ( type_name, field_name) {
3736 ( "CallExpr" , "expr" ) => "function" ,
3837 ( "LetExpr" , "expr" ) => "scrutinee" ,
@@ -42,9 +41,9 @@ fn property_name(type_name: &str, field_name: &str) -> String {
4241 ( _, "name_ref" ) => "identifier" ,
4342 ( _, "then_branch" ) => "then" ,
4443 ( _, "else_branch" ) => "else_" ,
45- ( "ArrayType " , "ty" ) => "element_type_repr" ,
44+ ( "ArrayTypeRepr " , "ty" ) => "element_type_repr" ,
4645 ( "SelfParam" , "is_amp" ) => "is_ref" ,
47- ( "RecordField " , "expr" ) => "default" ,
46+ ( "StructField " , "expr" ) => "default" ,
4847 ( "UseTree" , "is_star" ) => "is_glob" ,
4948 ( _, "ty" ) => "type_repr" ,
5049 _ if field_name. contains ( "record" ) => & field_name. replacen ( "record" , "struct" , 1 ) ,
@@ -108,25 +107,27 @@ fn node_src_to_schema_class(
108107 node : & AstNodeSrc ,
109108 super_types : & BTreeMap < String , BTreeSet < String > > ,
110109) -> SchemaClass {
110+ let name = class_name ( & node. name ) ;
111+ let fields = get_fields ( node)
112+ . iter ( )
113+ . map ( |f| {
114+ let ( ty, child) = match & f. ty {
115+ FieldType :: String => ( "optional[string]" . to_string ( ) , false ) ,
116+ FieldType :: Predicate => ( "predicate" . to_string ( ) , false ) ,
117+ FieldType :: Optional ( ty) => ( format ! ( "optional[\" {}\" ]" , class_name( ty) ) , true ) ,
118+ FieldType :: List ( ty) => ( format ! ( "list[\" {}\" ]" , class_name( ty) ) , true ) ,
119+ } ;
120+ SchemaField {
121+ name : property_name ( & name, & f. name ) ,
122+ ty,
123+ child,
124+ }
125+ } )
126+ . collect ( ) ;
111127 SchemaClass {
112- name : class_name ( & node. name ) ,
128+ name,
129+ fields,
113130 bases : get_bases ( & node. name , super_types) ,
114- fields : get_fields ( node)
115- . iter ( )
116- . map ( |f| {
117- let ( ty, child) = match & f. ty {
118- FieldType :: String => ( "optional[string]" . to_string ( ) , false ) ,
119- FieldType :: Predicate => ( "predicate" . to_string ( ) , false ) ,
120- FieldType :: Optional ( ty) => ( format ! ( "optional[\" {}\" ]" , class_name( ty) ) , true ) ,
121- FieldType :: List ( ty) => ( format ! ( "list[\" {}\" ]" , class_name( ty) ) , true ) ,
122- } ;
123- SchemaField {
124- name : property_name ( & node. name , & f. name ) ,
125- ty,
126- child,
127- }
128- } )
129- . collect ( ) ,
130131 }
131132}
132133
@@ -489,8 +490,8 @@ fn enum_to_extractor_info(node: &AstEnumSrc) -> Option<ExtractorEnumInfo> {
489490 } )
490491}
491492
492- fn field_info_to_extractor_info ( node : & AstNodeSrc , field : & FieldInfo ) -> ExtractorNodeFieldInfo {
493- let name = property_name ( & node . name , & field. name ) ;
493+ fn field_info_to_extractor_info ( name : & str , field : & FieldInfo ) -> ExtractorNodeFieldInfo {
494+ let name = property_name ( name, & field. name ) ;
494495 match & field. ty {
495496 FieldType :: String => ExtractorNodeFieldInfo {
496497 name,
@@ -522,14 +523,16 @@ fn field_info_to_extractor_info(node: &AstNodeSrc, field: &FieldInfo) -> Extract
522523fn node_to_extractor_info ( node : & AstNodeSrc ) -> ExtractorNodeInfo {
523524 let fields = get_fields ( node) ;
524525 let has_attrs = fields. iter ( ) . any ( |f| f. name == "attrs" ) ;
526+ let name = class_name ( & node. name ) ;
527+ let fields = fields
528+ . iter ( )
529+ . map ( |f| field_info_to_extractor_info ( & name, f) )
530+ . collect ( ) ;
525531 ExtractorNodeInfo {
526- name : class_name ( & node . name ) ,
532+ name,
527533 snake_case_name : to_lower_snake_case ( & node. name ) ,
528534 ast_name : node. name . clone ( ) ,
529- fields : fields
530- . iter ( )
531- . map ( |f| field_info_to_extractor_info ( node, f) )
532- . collect ( ) ,
535+ fields,
533536 has_attrs,
534537 }
535538}
0 commit comments