Skip to content

Commit c7062e9

Browse files
gkzfacebook-github-bot
authored andcommitted
[enums] Parse exporting enums
Summary: Adds support for: ``` export enum A {} ``` and ``` export default enum A {} ``` Reviewed By: gabelevi Differential Revision: D17105742 fbshipit-source-id: a1a7140fb9be6d896de8c0dea2c3abd93904cf30
1 parent a1cb0d2 commit c7062e9

File tree

5 files changed

+75
-1
lines changed

5 files changed

+75
-1
lines changed

packages/flow-parser/test/custom_ast_types.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ def("ExportDefaultDeclaration")
9696
def("FunctionDeclaration"), // TODO: should be NullableFunctionDeclaration
9797
def("VariableDeclaration"),
9898
def("InterfaceDeclaration"),
99+
def("EnumDeclaration"),
99100
def("TypeAlias"),
100101
def("OpaqueType"),
101102
def("Expression")))

src/parser/statement_parser.ml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -987,6 +987,9 @@ module Statement
987987
(* export default class foo { ... } *)
988988
let _class = Object.class_declaration env decorators in
989989
Declaration _class
990+
else if Peek.token env = T_ENUM then
991+
(* export default enum foo { ... } *)
992+
Declaration (Declaration.enum_declaration env)
990993
else
991994
(* export default [assignment expression]; *)
992995
let expr = Parse.assignment env in
@@ -1068,7 +1071,8 @@ module Statement
10681071
(* not using Peek.is_function here because it would guard all of the
10691072
* cases *)
10701073
| T_ASYNC
1071-
| T_FUNCTION ->
1074+
| T_FUNCTION
1075+
| T_ENUM ->
10721076
let open Statement.ExportNamedDeclaration in
10731077
let stmt = Parse.statement_list_item env ~decorators:decorators in
10741078
let names = Statement.(
@@ -1080,6 +1084,7 @@ module Statement
10801084
) [] declarations
10811085
| (loc, ClassDeclaration { Class.id = Some id; _; })
10821086
| (loc, FunctionDeclaration { Function.id = Some id; _; })
1087+
| (loc, EnumDeclaration {EnumDeclaration.id; _})
10831088
-> [Flow_ast_utils.ident_of_source (loc, extract_ident_name id)]
10841089
| (loc, ClassDeclaration { Class.id = None; _; }) ->
10851090
error_at env (loc, Parse_error.ExportNamelessClass);
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export enum A {}
2+
3+
export default enum B {}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"enums": true
3+
}
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
{
2+
"type":"Program",
3+
"loc":{"source":null,"start":{"line":1,"column":0},"end":{"line":3,"column":24}},
4+
"range":[0,42],
5+
"body":[
6+
{
7+
"type":"ExportNamedDeclaration",
8+
"loc":{"source":null,"start":{"line":1,"column":0},"end":{"line":1,"column":16}},
9+
"range":[0,16],
10+
"declaration":{
11+
"type":"EnumDeclaration",
12+
"loc":{"source":null,"start":{"line":1,"column":7},"end":{"line":1,"column":16}},
13+
"range":[7,16],
14+
"id":{
15+
"type":"Identifier",
16+
"loc":{"source":null,"start":{"line":1,"column":12},"end":{"line":1,"column":13}},
17+
"range":[12,13],
18+
"name":"A",
19+
"typeAnnotation":null,
20+
"optional":false
21+
},
22+
"body":{
23+
"type":"EnumStringBody",
24+
"loc":{"source":null,"start":{"line":1,"column":7},"end":{"line":1,"column":16}},
25+
"range":[7,16],
26+
"members":[],
27+
"explicitType":false
28+
}
29+
},
30+
"specifiers":[],
31+
"source":null,
32+
"exportKind":"value"
33+
},
34+
{
35+
"type":"ExportDefaultDeclaration",
36+
"loc":{"source":null,"start":{"line":3,"column":0},"end":{"line":3,"column":24}},
37+
"range":[18,42],
38+
"declaration":{
39+
"type":"EnumDeclaration",
40+
"loc":{"source":null,"start":{"line":3,"column":15},"end":{"line":3,"column":24}},
41+
"range":[33,42],
42+
"id":{
43+
"type":"Identifier",
44+
"loc":{"source":null,"start":{"line":3,"column":20},"end":{"line":3,"column":21}},
45+
"range":[38,39],
46+
"name":"B",
47+
"typeAnnotation":null,
48+
"optional":false
49+
},
50+
"body":{
51+
"type":"EnumStringBody",
52+
"loc":{"source":null,"start":{"line":3,"column":15},"end":{"line":3,"column":24}},
53+
"range":[33,42],
54+
"members":[],
55+
"explicitType":false
56+
}
57+
},
58+
"exportKind":"value"
59+
}
60+
],
61+
"comments":[]
62+
}

0 commit comments

Comments
 (0)