@@ -39,6 +39,8 @@ pub struct NodeInfoJSON {
3939 named : bool ,
4040 #[ serde( skip_serializing_if = "std::ops::Not::not" ) ]
4141 root : bool ,
42+ #[ serde( skip_serializing_if = "std::ops::Not::not" ) ]
43+ extra : bool ,
4244 #[ serde( skip_serializing_if = "Option::is_none" ) ]
4345 fields : Option < BTreeMap < String , FieldInfoJSON > > ,
4446 #[ serde( skip_serializing_if = "Option::is_none" ) ]
@@ -517,6 +519,7 @@ pub fn generate_node_types_json(
517519 kind : variable. name . clone ( ) ,
518520 named : true ,
519521 root : false ,
522+ extra : false ,
520523 fields : None ,
521524 children : None ,
522525 subtypes : None ,
@@ -560,6 +563,7 @@ pub fn generate_node_types_json(
560563 kind : kind. clone ( ) ,
561564 named : is_named,
562565 root : i == 0 ,
566+ extra : false ,
563567 fields : Some ( BTreeMap :: new ( ) ) ,
564568 children : None ,
565569 subtypes : None ,
@@ -664,6 +668,29 @@ pub fn generate_node_types_json(
664668 } )
665669 } )
666670 } ) ;
671+ let extra_names = syntax_grammar
672+ . extra_symbols
673+ . iter ( )
674+ . flat_map ( |symbol| {
675+ aliases_by_symbol
676+ . get ( symbol)
677+ . unwrap_or ( & empty)
678+ . iter ( )
679+ . map ( |alias| {
680+ alias. as_ref ( ) . map_or (
681+ match symbol. kind {
682+ SymbolType :: NonTerminal => & syntax_grammar. variables [ symbol. index ] . name ,
683+ SymbolType :: Terminal => & lexical_grammar. variables [ symbol. index ] . name ,
684+ SymbolType :: External => {
685+ & syntax_grammar. external_tokens [ symbol. index ] . name
686+ }
687+ _ => unreachable ! ( ) ,
688+ } ,
689+ |alias| & alias. value ,
690+ )
691+ } )
692+ } )
693+ . collect :: < HashSet < _ > > ( ) ;
667694
668695 for ( name, kind) in regular_tokens. chain ( external_tokens) {
669696 match kind {
@@ -675,6 +702,7 @@ pub fn generate_node_types_json(
675702 kind : name. clone ( ) ,
676703 named : true ,
677704 root : false ,
705+ extra : extra_names. contains ( & name) ,
678706 fields : None ,
679707 children : None ,
680708 subtypes : None ,
@@ -692,6 +720,7 @@ pub fn generate_node_types_json(
692720 kind : name. clone ( ) ,
693721 named : false ,
694722 root : false ,
723+ extra : extra_names. contains ( & name) ,
695724 fields : None ,
696725 children : None ,
697726 subtypes : None ,
@@ -810,6 +839,7 @@ mod tests {
810839 kind: "v1" . to_string( ) ,
811840 named: true ,
812841 root: true ,
842+ extra: false ,
813843 subtypes: None ,
814844 children: None ,
815845 fields: Some (
@@ -848,6 +878,7 @@ mod tests {
848878 kind: ";" . to_string( ) ,
849879 named: false ,
850880 root: false ,
881+ extra: false ,
851882 subtypes: None ,
852883 children: None ,
853884 fields: None
@@ -859,6 +890,7 @@ mod tests {
859890 kind: "v2" . to_string( ) ,
860891 named: true ,
861892 root: false ,
893+ extra: false ,
862894 subtypes: None ,
863895 children: None ,
864896 fields: None
@@ -904,6 +936,7 @@ mod tests {
904936 kind: "v1" . to_string( ) ,
905937 named: true ,
906938 root: true ,
939+ extra: false ,
907940 subtypes: None ,
908941 children: None ,
909942 fields: Some (
@@ -942,6 +975,7 @@ mod tests {
942975 kind: ";" . to_string( ) ,
943976 named: false ,
944977 root: false ,
978+ extra: false ,
945979 subtypes: None ,
946980 children: None ,
947981 fields: None
@@ -953,6 +987,7 @@ mod tests {
953987 kind: "v2" . to_string( ) ,
954988 named: true ,
955989 root: false ,
990+ extra: false ,
956991 subtypes: None ,
957992 children: None ,
958993 fields: None
@@ -964,6 +999,7 @@ mod tests {
964999 kind: "v3" . to_string( ) ,
9651000 named: true ,
9661001 root: false ,
1002+ extra: true ,
9671003 subtypes: None ,
9681004 children: None ,
9691005 fields: None
@@ -1010,6 +1046,7 @@ mod tests {
10101046 kind: "_v2" . to_string( ) ,
10111047 named: true ,
10121048 root: false ,
1049+ extra: false ,
10131050 fields: None ,
10141051 children: None ,
10151052 subtypes: Some ( vec![
@@ -1034,6 +1071,7 @@ mod tests {
10341071 kind: "v1" . to_string( ) ,
10351072 named: true ,
10361073 root: true ,
1074+ extra: false ,
10371075 subtypes: None ,
10381076 children: None ,
10391077 fields: Some (
@@ -1097,6 +1135,7 @@ mod tests {
10971135 kind: "v1" . to_string( ) ,
10981136 named: true ,
10991137 root: true ,
1138+ extra: false ,
11001139 subtypes: None ,
11011140 children: Some ( FieldInfoJSON {
11021141 multiple: true ,
@@ -1135,6 +1174,7 @@ mod tests {
11351174 kind: "v2" . to_string( ) ,
11361175 named: true ,
11371176 root: false ,
1177+ extra: false ,
11381178 subtypes: None ,
11391179 children: Some ( FieldInfoJSON {
11401180 multiple: false ,
@@ -1180,6 +1220,7 @@ mod tests {
11801220 kind: "v1" . to_string( ) ,
11811221 named: true ,
11821222 root: true ,
1223+ extra: false ,
11831224 subtypes: None ,
11841225 children: Some ( FieldInfoJSON {
11851226 multiple: true ,
@@ -1254,6 +1295,7 @@ mod tests {
12541295 kind: "identifier" . to_string( ) ,
12551296 named: true ,
12561297 root: false ,
1298+ extra: false ,
12571299 subtypes: None ,
12581300 children: None ,
12591301 fields: None ,
@@ -1265,6 +1307,7 @@ mod tests {
12651307 kind: "type_identifier" . to_string( ) ,
12661308 named: true ,
12671309 root: false ,
1310+ extra: false ,
12681311 subtypes: None ,
12691312 children: None ,
12701313 fields: None ,
@@ -1307,6 +1350,7 @@ mod tests {
13071350 kind: "a" . to_string( ) ,
13081351 named: true ,
13091352 root: true ,
1353+ extra: false ,
13101354 subtypes: None ,
13111355 children: Some ( FieldInfoJSON {
13121356 multiple: true ,
@@ -1355,6 +1399,7 @@ mod tests {
13551399 kind: "script" . to_string( ) ,
13561400 named: true ,
13571401 root: true ,
1402+ extra: false ,
13581403 fields: Some ( BTreeMap :: new( ) ) ,
13591404 children: None ,
13601405 subtypes: None
@@ -1412,6 +1457,7 @@ mod tests {
14121457 kind: "a" . to_string( ) ,
14131458 named: true ,
14141459 root: false ,
1460+ extra: false ,
14151461 subtypes: None ,
14161462 children: None ,
14171463 fields: Some (
@@ -1468,6 +1514,7 @@ mod tests {
14681514 kind: "script" . to_string( ) ,
14691515 named: true ,
14701516 root: true ,
1517+ extra: false ,
14711518 subtypes: None ,
14721519 // Only one node
14731520 children: Some ( FieldInfoJSON {
@@ -1523,6 +1570,7 @@ mod tests {
15231570 kind: "b" . to_string( ) ,
15241571 named: true ,
15251572 root: false ,
1573+ extra: false ,
15261574 subtypes: None ,
15271575 children: Some ( FieldInfoJSON {
15281576 multiple: true ,
0 commit comments