@@ -32,7 +32,6 @@ fn class_name(type_name: &str) -> String {
32
32
}
33
33
34
34
fn property_name ( type_name : & str , field_name : & str ) -> String {
35
- // N.B.: type names here are before any manipulation done by class_name
36
35
let name = match ( type_name, field_name) {
37
36
( "CallExpr" , "expr" ) => "function" ,
38
37
( "LetExpr" , "expr" ) => "scrutinee" ,
@@ -42,9 +41,9 @@ fn property_name(type_name: &str, field_name: &str) -> String {
42
41
( _, "name_ref" ) => "identifier" ,
43
42
( _, "then_branch" ) => "then" ,
44
43
( _, "else_branch" ) => "else_" ,
45
- ( "ArrayType " , "ty" ) => "element_type_repr" ,
44
+ ( "ArrayTypeRepr " , "ty" ) => "element_type_repr" ,
46
45
( "SelfParam" , "is_amp" ) => "is_ref" ,
47
- ( "RecordField " , "expr" ) => "default" ,
46
+ ( "StructField " , "expr" ) => "default" ,
48
47
( "UseTree" , "is_star" ) => "is_glob" ,
49
48
( _, "ty" ) => "type_repr" ,
50
49
_ if field_name. contains ( "record" ) => & field_name. replacen ( "record" , "struct" , 1 ) ,
@@ -108,25 +107,27 @@ fn node_src_to_schema_class(
108
107
node : & AstNodeSrc ,
109
108
super_types : & BTreeMap < String , BTreeSet < String > > ,
110
109
) -> 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 ( ) ;
111
127
SchemaClass {
112
- name : class_name ( & node. name ) ,
128
+ name,
129
+ fields,
113
130
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 ( ) ,
130
131
}
131
132
}
132
133
@@ -489,8 +490,8 @@ fn enum_to_extractor_info(node: &AstEnumSrc) -> Option<ExtractorEnumInfo> {
489
490
} )
490
491
}
491
492
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 ) ;
494
495
match & field. ty {
495
496
FieldType :: String => ExtractorNodeFieldInfo {
496
497
name,
@@ -522,14 +523,16 @@ fn field_info_to_extractor_info(node: &AstNodeSrc, field: &FieldInfo) -> Extract
522
523
fn node_to_extractor_info ( node : & AstNodeSrc ) -> ExtractorNodeInfo {
523
524
let fields = get_fields ( node) ;
524
525
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 ( ) ;
525
531
ExtractorNodeInfo {
526
- name : class_name ( & node . name ) ,
532
+ name,
527
533
snake_case_name : to_lower_snake_case ( & node. name ) ,
528
534
ast_name : node. name . clone ( ) ,
529
- fields : fields
530
- . iter ( )
531
- . map ( |f| field_info_to_extractor_info ( node, f) )
532
- . collect ( ) ,
535
+ fields,
533
536
has_attrs,
534
537
}
535
538
}
0 commit comments