@@ -114,10 +114,7 @@ pub fn convert_nodes(prefix: &str, nodes: &[NodeInfo]) -> NodeTypeMap {
114
114
115
115
// First, find all the token kinds
116
116
for node in nodes {
117
- if node. subtypes . is_none ( )
118
- && node. fields . as_ref ( ) . map_or ( 0 , |x| x. len ( ) ) == 0
119
- && node. children . is_none ( )
120
- {
117
+ if node. subtypes . is_empty ( ) && node. fields . is_empty ( ) && node. children . is_none ( ) {
121
118
let type_name = TypeName {
122
119
kind : node. kind . clone ( ) ,
123
120
named : node. named ,
@@ -131,7 +128,8 @@ pub fn convert_nodes(prefix: &str, nodes: &[NodeInfo]) -> NodeTypeMap {
131
128
let dbscheme_name = escape_name ( flattened_name) ;
132
129
let ql_class_name = dbscheme_name_to_class_name ( & dbscheme_name) ;
133
130
let dbscheme_name = format ! ( "{}_{}" , prefix, & dbscheme_name) ;
134
- if let Some ( subtypes) = & node. subtypes {
131
+ let subtypes = & node. subtypes ;
132
+ if !subtypes. is_empty ( ) {
135
133
// It's a tree-sitter supertype node, for which we create a union
136
134
// type.
137
135
entries. insert (
@@ -147,7 +145,7 @@ pub fn convert_nodes(prefix: &str, nodes: &[NodeInfo]) -> NodeTypeMap {
147
145
} ,
148
146
} ,
149
147
) ;
150
- } else if node. fields . as_ref ( ) . map_or ( 0 , |x| x . len ( ) ) == 0 && node. children . is_none ( ) {
148
+ } else if node. fields . is_empty ( ) && node. children . is_none ( ) {
151
149
// Token kind, handled above.
152
150
} else {
153
151
// It's a product type, defined by a table.
@@ -162,17 +160,15 @@ pub fn convert_nodes(prefix: &str, nodes: &[NodeInfo]) -> NodeTypeMap {
162
160
163
161
// If the type also has fields or children, then we create either
164
162
// auxiliary tables or columns in the defining table for them.
165
- if let Some ( node_fields) = & node. fields {
166
- for ( field_name, field_info) in node_fields {
167
- add_field (
168
- prefix,
169
- & type_name,
170
- Some ( field_name. to_string ( ) ) ,
171
- field_info,
172
- & mut fields,
173
- & token_kinds,
174
- ) ;
175
- }
163
+ for ( field_name, field_info) in & node. fields {
164
+ add_field (
165
+ prefix,
166
+ & type_name,
167
+ Some ( field_name. to_string ( ) ) ,
168
+ field_info,
169
+ & mut fields,
170
+ & token_kinds,
171
+ ) ;
176
172
}
177
173
if let Some ( children) = & node. children {
178
174
// Treat children as if they were a field called 'child'.
@@ -301,12 +297,12 @@ pub struct NodeInfo {
301
297
#[ serde( rename = "type" ) ]
302
298
pub kind : String ,
303
299
pub named : bool ,
304
- #[ serde( skip_serializing_if = "Option::is_none" ) ]
305
- pub fields : Option < BTreeMap < String , FieldInfo > > ,
300
+ #[ serde( skip_serializing_if = "BTreeMap::is_empty" , default ) ]
301
+ pub fields : BTreeMap < String , FieldInfo > ,
306
302
#[ serde( skip_serializing_if = "Option::is_none" ) ]
307
303
pub children : Option < FieldInfo > ,
308
- #[ serde( skip_serializing_if = "Option::is_none" ) ]
309
- pub subtypes : Option < Vec < NodeType > > ,
304
+ #[ serde( skip_serializing_if = "Vec::is_empty" , default ) ]
305
+ pub subtypes : Vec < NodeType > ,
310
306
}
311
307
312
308
#[ derive( Deserialize ) ]
0 commit comments