diff --git a/packages/babel-generator/src/generators/flow.js b/packages/babel-generator/src/generators/flow.js index b599c48eb7db..d69b90131ffd 100644 --- a/packages/babel-generator/src/generators/flow.js +++ b/packages/babel-generator/src/generators/flow.js @@ -165,6 +165,10 @@ function enumBody(context: Object, node: Object) { context.print(member, node); context.newline(); } + if (node.hasUnknownMembers) { + context.token("..."); + context.newline(); + } context.dedent(); context.token("}"); } diff --git a/packages/babel-generator/test/fixtures/flow/enum-declaration/input.js b/packages/babel-generator/test/fixtures/flow/enum-declaration/input.js index f59944f78e18..ca45dfef54b1 100644 --- a/packages/babel-generator/test/fixtures/flow/enum-declaration/input.js +++ b/packages/babel-generator/test/fixtures/flow/enum-declaration/input.js @@ -34,3 +34,9 @@ enum E of symbol { A, B, } + +enum E { + A, + B, + ... +} diff --git a/packages/babel-generator/test/fixtures/flow/enum-declaration/output.js b/packages/babel-generator/test/fixtures/flow/enum-declaration/output.js index f59944f78e18..ca993e1d2944 100644 --- a/packages/babel-generator/test/fixtures/flow/enum-declaration/output.js +++ b/packages/babel-generator/test/fixtures/flow/enum-declaration/output.js @@ -34,3 +34,8 @@ enum E of symbol { A, B, } +enum E { + A, + B, + ... +} diff --git a/packages/babel-parser/src/plugins/flow.js b/packages/babel-parser/src/plugins/flow.js index 26ddfeaae787..6740dd286add 100644 --- a/packages/babel-parser/src/plugins/flow.js +++ b/packages/babel-parser/src/plugins/flow.js @@ -3252,10 +3252,13 @@ export default (superClass: Class): Class => enumName: string, explicitType: EnumExplicitType, }): {| - booleanMembers: Array, - numberMembers: Array, - stringMembers: Array, - defaultedMembers: Array, + members: {| + booleanMembers: Array, + numberMembers: Array, + stringMembers: Array, + defaultedMembers: Array, + |}, + hasUnknownMembers: boolean, |} { const seenNames = new Set(); const members = { @@ -3264,7 +3267,12 @@ export default (superClass: Class): Class => stringMembers: [], defaultedMembers: [], }; + let hasUnknownMembers = false; while (!this.match(tt.braceR)) { + if (this.eat(tt.ellipsis)) { + hasUnknownMembers = true; + break; + } const memberNode = this.startNode(); const { id, init } = this.flowEnumMemberRaw(); const memberName = id.name; @@ -3341,7 +3349,7 @@ export default (superClass: Class): Class => this.expect(tt.comma); } } - return members; + return { members, hasUnknownMembers }; } flowEnumStringMembers( @@ -3408,7 +3416,11 @@ export default (superClass: Class): Class => flowEnumBody(node: N.Node, { enumName, nameLoc }): N.Node { const explicitType = this.flowEnumParseExplicitType({ enumName }); this.expect(tt.braceL); - const members = this.flowEnumMembers({ enumName, explicitType }); + const { members, hasUnknownMembers } = this.flowEnumMembers({ + enumName, + explicitType, + }); + node.hasUnknownMembers = hasUnknownMembers; switch (explicitType) { case "boolean": diff --git a/packages/babel-parser/test/fixtures/flow/enum-declaration/boolean-explicit/output.json b/packages/babel-parser/test/fixtures/flow/enum-declaration/boolean-explicit/output.json index 02b996288588..c34b19b78a3e 100644 --- a/packages/babel-parser/test/fixtures/flow/enum-declaration/boolean-explicit/output.json +++ b/packages/babel-parser/test/fixtures/flow/enum-declaration/boolean-explicit/output.json @@ -48,7 +48,8 @@ "value": false } } - ] + ], + "hasUnknownMembers": false } } ], diff --git a/packages/babel-parser/test/fixtures/flow/enum-declaration/boolean-implicit/output.json b/packages/babel-parser/test/fixtures/flow/enum-declaration/boolean-implicit/output.json index 1cde4241aa48..c17beff73c00 100644 --- a/packages/babel-parser/test/fixtures/flow/enum-declaration/boolean-implicit/output.json +++ b/packages/babel-parser/test/fixtures/flow/enum-declaration/boolean-implicit/output.json @@ -19,6 +19,7 @@ "type": "EnumBooleanBody", "start":7,"end":35,"loc":{"start":{"line":1,"column":7},"end":{"line":4,"column":1}}, "explicitType": false, + "hasUnknownMembers": false, "members": [ { "type": "EnumBooleanMember", diff --git a/packages/babel-parser/test/fixtures/flow/enum-declaration/boolean-member-not-initialized-explicit/output.json b/packages/babel-parser/test/fixtures/flow/enum-declaration/boolean-member-not-initialized-explicit/output.json index 9cd2d5701c55..c8d39bd0832c 100644 --- a/packages/babel-parser/test/fixtures/flow/enum-declaration/boolean-member-not-initialized-explicit/output.json +++ b/packages/babel-parser/test/fixtures/flow/enum-declaration/boolean-member-not-initialized-explicit/output.json @@ -22,7 +22,8 @@ "type": "EnumBooleanBody", "start":7,"end":26,"loc":{"start":{"line":1,"column":7},"end":{"line":3,"column":1}}, "explicitType": true, - "members": [] + "members": [], + "hasUnknownMembers": false } } ], diff --git a/packages/babel-parser/test/fixtures/flow/enum-declaration/boolean-member-not-initialized-implicit/output.json b/packages/babel-parser/test/fixtures/flow/enum-declaration/boolean-member-not-initialized-implicit/output.json index ef24cd6ca0fd..a50af0f91c04 100644 --- a/packages/babel-parser/test/fixtures/flow/enum-declaration/boolean-member-not-initialized-implicit/output.json +++ b/packages/babel-parser/test/fixtures/flow/enum-declaration/boolean-member-not-initialized-implicit/output.json @@ -22,6 +22,7 @@ "type": "EnumBooleanBody", "start":7,"end":27,"loc":{"start":{"line":1,"column":7},"end":{"line":4,"column":1}}, "explicitType": false, + "hasUnknownMembers": false, "members": [ { "type": "EnumBooleanMember", diff --git a/packages/babel-parser/test/fixtures/flow/enum-declaration/duplicate-member-name/output.json b/packages/babel-parser/test/fixtures/flow/enum-declaration/duplicate-member-name/output.json index 5ebbed1e950a..0a31c3040a72 100644 --- a/packages/babel-parser/test/fixtures/flow/enum-declaration/duplicate-member-name/output.json +++ b/packages/babel-parser/test/fixtures/flow/enum-declaration/duplicate-member-name/output.json @@ -41,7 +41,8 @@ "name": "A" } } - ] + ], + "hasUnknownMembers": false } } ], diff --git a/packages/babel-parser/test/fixtures/flow/enum-declaration/empty/output.json b/packages/babel-parser/test/fixtures/flow/enum-declaration/empty/output.json index df6b983d915f..8251d5bbd5f9 100644 --- a/packages/babel-parser/test/fixtures/flow/enum-declaration/empty/output.json +++ b/packages/babel-parser/test/fixtures/flow/enum-declaration/empty/output.json @@ -19,7 +19,8 @@ "type": "EnumStringBody", "start":7,"end":10,"loc":{"start":{"line":1,"column":7},"end":{"line":1,"column":10}}, "explicitType": false, - "members": [] + "members": [], + "hasUnknownMembers": false } } ], diff --git a/packages/babel-parser/test/fixtures/flow/enum-declaration/enum-name/output.json b/packages/babel-parser/test/fixtures/flow/enum-declaration/enum-name/output.json index 758f952645c5..ae5d55919942 100644 --- a/packages/babel-parser/test/fixtures/flow/enum-declaration/enum-name/output.json +++ b/packages/babel-parser/test/fixtures/flow/enum-declaration/enum-name/output.json @@ -19,7 +19,8 @@ "type": "EnumStringBody", "start":10,"end":13,"loc":{"start":{"line":1,"column":10},"end":{"line":2,"column":1}}, "explicitType": false, - "members": [] + "members": [], + "hasUnknownMembers": false } } ], diff --git a/packages/babel-parser/test/fixtures/flow/enum-declaration/export/output.json b/packages/babel-parser/test/fixtures/flow/enum-declaration/export/output.json index f5ddd9661e42..30a5ede01a69 100644 --- a/packages/babel-parser/test/fixtures/flow/enum-declaration/export/output.json +++ b/packages/babel-parser/test/fixtures/flow/enum-declaration/export/output.json @@ -25,7 +25,8 @@ "type": "EnumStringBody", "start":14,"end":16,"loc":{"start":{"line":1,"column":14},"end":{"line":1,"column":16}}, "explicitType": false, - "members": [] + "members": [], + "hasUnknownMembers": false } } }, @@ -44,7 +45,8 @@ "type": "EnumStringBody", "start":40,"end":42,"loc":{"start":{"line":3,"column":22},"end":{"line":3,"column":24}}, "explicitType": false, - "members": [] + "members": [], + "hasUnknownMembers": false } } } diff --git a/packages/babel-parser/test/fixtures/flow/enum-declaration/inconsistent-member-values-majority-defaulted/output.json b/packages/babel-parser/test/fixtures/flow/enum-declaration/inconsistent-member-values-majority-defaulted/output.json index e63c726b3b70..d39e36c96dd2 100644 --- a/packages/babel-parser/test/fixtures/flow/enum-declaration/inconsistent-member-values-majority-defaulted/output.json +++ b/packages/babel-parser/test/fixtures/flow/enum-declaration/inconsistent-member-values-majority-defaulted/output.json @@ -22,7 +22,8 @@ "type": "EnumStringBody", "start":7,"end":29,"loc":{"start":{"line":1,"column":7},"end":{"line":5,"column":1}}, "explicitType": false, - "members": [] + "members": [], + "hasUnknownMembers": false } } ], diff --git a/packages/babel-parser/test/fixtures/flow/enum-declaration/inconsistent-member-values-mixed-initializers/output.json b/packages/babel-parser/test/fixtures/flow/enum-declaration/inconsistent-member-values-mixed-initializers/output.json index 8f536f701906..17e38f263e66 100644 --- a/packages/babel-parser/test/fixtures/flow/enum-declaration/inconsistent-member-values-mixed-initializers/output.json +++ b/packages/babel-parser/test/fixtures/flow/enum-declaration/inconsistent-member-values-mixed-initializers/output.json @@ -22,7 +22,8 @@ "type": "EnumStringBody", "start":7,"end":31,"loc":{"start":{"line":1,"column":7},"end":{"line":4,"column":1}}, "explicitType": false, - "members": [] + "members": [], + "hasUnknownMembers": false } } ], diff --git a/packages/babel-parser/test/fixtures/flow/enum-declaration/invalid-explicit-type-identifier/output.json b/packages/babel-parser/test/fixtures/flow/enum-declaration/invalid-explicit-type-identifier/output.json index bdd2f9ac8fb1..02a9f0f0b04e 100644 --- a/packages/babel-parser/test/fixtures/flow/enum-declaration/invalid-explicit-type-identifier/output.json +++ b/packages/babel-parser/test/fixtures/flow/enum-declaration/invalid-explicit-type-identifier/output.json @@ -22,7 +22,8 @@ "type": "EnumStringBody", "start":7,"end":17,"loc":{"start":{"line":1,"column":7},"end":{"line":2,"column":1}}, "explicitType": false, - "members": [] + "members": [], + "hasUnknownMembers": false } } ], diff --git a/packages/babel-parser/test/fixtures/flow/enum-declaration/invalid-member-initializer-boolean-explicit-string/output.json b/packages/babel-parser/test/fixtures/flow/enum-declaration/invalid-member-initializer-boolean-explicit-string/output.json index 0c9f36244f81..9e16c209ebc8 100644 --- a/packages/babel-parser/test/fixtures/flow/enum-declaration/invalid-member-initializer-boolean-explicit-string/output.json +++ b/packages/babel-parser/test/fixtures/flow/enum-declaration/invalid-member-initializer-boolean-explicit-string/output.json @@ -22,7 +22,8 @@ "type": "EnumStringBody", "start":7,"end":32,"loc":{"start":{"line":1,"column":7},"end":{"line":3,"column":1}}, "explicitType": true, - "members": [] + "members": [], + "hasUnknownMembers": false } } ], diff --git a/packages/babel-parser/test/fixtures/flow/enum-declaration/invalid-member-initializer-literal-explicit-symbol/output.json b/packages/babel-parser/test/fixtures/flow/enum-declaration/invalid-member-initializer-literal-explicit-symbol/output.json index cc53bdf91782..169c12667f22 100644 --- a/packages/babel-parser/test/fixtures/flow/enum-declaration/invalid-member-initializer-literal-explicit-symbol/output.json +++ b/packages/babel-parser/test/fixtures/flow/enum-declaration/invalid-member-initializer-literal-explicit-symbol/output.json @@ -21,7 +21,8 @@ "body": { "type": "EnumSymbolBody", "start":7,"end":29,"loc":{"start":{"line":1,"column":7},"end":{"line":3,"column":1}}, - "members": [] + "members": [], + "hasUnknownMembers": false } } ], diff --git a/packages/babel-parser/test/fixtures/flow/enum-declaration/invalid-member-initializer-number-explicit-boolean/output.json b/packages/babel-parser/test/fixtures/flow/enum-declaration/invalid-member-initializer-number-explicit-boolean/output.json index 2e86e933c0d5..14bbdfbda955 100644 --- a/packages/babel-parser/test/fixtures/flow/enum-declaration/invalid-member-initializer-number-explicit-boolean/output.json +++ b/packages/babel-parser/test/fixtures/flow/enum-declaration/invalid-member-initializer-number-explicit-boolean/output.json @@ -22,7 +22,8 @@ "type": "EnumBooleanBody", "start":7,"end":30,"loc":{"start":{"line":1,"column":7},"end":{"line":3,"column":1}}, "explicitType": true, - "members": [] + "members": [], + "hasUnknownMembers": false } } ], diff --git a/packages/babel-parser/test/fixtures/flow/enum-declaration/invalid-member-initializer-number-explicit-string/output.json b/packages/babel-parser/test/fixtures/flow/enum-declaration/invalid-member-initializer-number-explicit-string/output.json index 2d654faa00d2..c496f854cb46 100644 --- a/packages/babel-parser/test/fixtures/flow/enum-declaration/invalid-member-initializer-number-explicit-string/output.json +++ b/packages/babel-parser/test/fixtures/flow/enum-declaration/invalid-member-initializer-number-explicit-string/output.json @@ -22,7 +22,8 @@ "type": "EnumStringBody", "start":7,"end":29,"loc":{"start":{"line":1,"column":7},"end":{"line":3,"column":1}}, "explicitType": true, - "members": [] + "members": [], + "hasUnknownMembers": false } } ], diff --git a/packages/babel-parser/test/fixtures/flow/enum-declaration/invalid-member-initializer-string-explicit-boolean/output.json b/packages/babel-parser/test/fixtures/flow/enum-declaration/invalid-member-initializer-string-explicit-boolean/output.json index 0d7f98f68eb8..3a7df84a7a47 100644 --- a/packages/babel-parser/test/fixtures/flow/enum-declaration/invalid-member-initializer-string-explicit-boolean/output.json +++ b/packages/babel-parser/test/fixtures/flow/enum-declaration/invalid-member-initializer-string-explicit-boolean/output.json @@ -22,7 +22,8 @@ "type": "EnumBooleanBody", "start":7,"end":33,"loc":{"start":{"line":1,"column":7},"end":{"line":3,"column":1}}, "explicitType": true, - "members": [] + "members": [], + "hasUnknownMembers": false } } ], diff --git a/packages/babel-parser/test/fixtures/flow/enum-declaration/invalid-member-initializer-string-explicit-number/output.json b/packages/babel-parser/test/fixtures/flow/enum-declaration/invalid-member-initializer-string-explicit-number/output.json index b55c6b5b9d41..8a9c7b3bd378 100644 --- a/packages/babel-parser/test/fixtures/flow/enum-declaration/invalid-member-initializer-string-explicit-number/output.json +++ b/packages/babel-parser/test/fixtures/flow/enum-declaration/invalid-member-initializer-string-explicit-number/output.json @@ -22,7 +22,8 @@ "type": "EnumNumberBody", "start":7,"end":32,"loc":{"start":{"line":1,"column":7},"end":{"line":3,"column":1}}, "explicitType": true, - "members": [] + "members": [], + "hasUnknownMembers": false } } ], diff --git a/packages/babel-parser/test/fixtures/flow/enum-declaration/invalid-member-name/output.json b/packages/babel-parser/test/fixtures/flow/enum-declaration/invalid-member-name/output.json index 9fe35c22085d..dc53fd5d5a79 100644 --- a/packages/babel-parser/test/fixtures/flow/enum-declaration/invalid-member-name/output.json +++ b/packages/babel-parser/test/fixtures/flow/enum-declaration/invalid-member-name/output.json @@ -42,7 +42,8 @@ "name": "bar" } } - ] + ], + "hasUnknownMembers": false } } ], diff --git a/packages/babel-parser/test/fixtures/flow/enum-declaration/no-trailing-comma/output.json b/packages/babel-parser/test/fixtures/flow/enum-declaration/no-trailing-comma/output.json index 2d409165d994..5f6412acfdf1 100644 --- a/packages/babel-parser/test/fixtures/flow/enum-declaration/no-trailing-comma/output.json +++ b/packages/babel-parser/test/fixtures/flow/enum-declaration/no-trailing-comma/output.json @@ -29,7 +29,8 @@ "name": "A" } } - ] + ], + "hasUnknownMembers": false } } ], diff --git a/packages/babel-parser/test/fixtures/flow/enum-declaration/number-explicit/output.json b/packages/babel-parser/test/fixtures/flow/enum-declaration/number-explicit/output.json index 7422817d7443..eb54b373d2bf 100644 --- a/packages/babel-parser/test/fixtures/flow/enum-declaration/number-explicit/output.json +++ b/packages/babel-parser/test/fixtures/flow/enum-declaration/number-explicit/output.json @@ -56,7 +56,8 @@ "value": 2 } } - ] + ], + "hasUnknownMembers": false } } ], diff --git a/packages/babel-parser/test/fixtures/flow/enum-declaration/number-implicit/output.json b/packages/babel-parser/test/fixtures/flow/enum-declaration/number-implicit/output.json index 56cc5c9ace8a..bb4166ab487b 100644 --- a/packages/babel-parser/test/fixtures/flow/enum-declaration/number-implicit/output.json +++ b/packages/babel-parser/test/fixtures/flow/enum-declaration/number-implicit/output.json @@ -19,6 +19,7 @@ "type": "EnumNumberBody", "start":7,"end":28,"loc":{"start":{"line":1,"column":7},"end":{"line":4,"column":1}}, "explicitType": false, + "hasUnknownMembers": false, "members": [ { "type": "EnumNumberMember", diff --git a/packages/babel-parser/test/fixtures/flow/enum-declaration/number-member-not-initialized-explicit/output.json b/packages/babel-parser/test/fixtures/flow/enum-declaration/number-member-not-initialized-explicit/output.json index da174b55f384..fb8576d1afaa 100644 --- a/packages/babel-parser/test/fixtures/flow/enum-declaration/number-member-not-initialized-explicit/output.json +++ b/packages/babel-parser/test/fixtures/flow/enum-declaration/number-member-not-initialized-explicit/output.json @@ -22,7 +22,8 @@ "type": "EnumNumberBody", "start":7,"end":25,"loc":{"start":{"line":1,"column":7},"end":{"line":3,"column":1}}, "explicitType": true, - "members": [] + "members": [], + "hasUnknownMembers": false } } ], diff --git a/packages/babel-parser/test/fixtures/flow/enum-declaration/number-member-not-initialized-implicit/output.json b/packages/babel-parser/test/fixtures/flow/enum-declaration/number-member-not-initialized-implicit/output.json index baf3a7cb99ec..61135052b682 100644 --- a/packages/babel-parser/test/fixtures/flow/enum-declaration/number-member-not-initialized-implicit/output.json +++ b/packages/babel-parser/test/fixtures/flow/enum-declaration/number-member-not-initialized-implicit/output.json @@ -22,6 +22,7 @@ "type": "EnumNumberBody", "start":7,"end":24,"loc":{"start":{"line":1,"column":7},"end":{"line":4,"column":1}}, "explicitType": false, + "hasUnknownMembers": false, "members": [ { "type": "EnumNumberMember", diff --git a/packages/babel-parser/test/fixtures/flow/enum-declaration/reserved-word-enum-name/output.json b/packages/babel-parser/test/fixtures/flow/enum-declaration/reserved-word-enum-name/output.json index 2eb913529f69..a48c8cad045b 100644 --- a/packages/babel-parser/test/fixtures/flow/enum-declaration/reserved-word-enum-name/output.json +++ b/packages/babel-parser/test/fixtures/flow/enum-declaration/reserved-word-enum-name/output.json @@ -22,7 +22,8 @@ "type": "EnumStringBody", "start":11,"end":14,"loc":{"start":{"line":1,"column":11},"end":{"line":2,"column":1}}, "explicitType": false, - "members": [] + "members": [], + "hasUnknownMembers": false } } ], diff --git a/packages/babel-parser/test/fixtures/flow/enum-declaration/string-explicit-defaulted/output.json b/packages/babel-parser/test/fixtures/flow/enum-declaration/string-explicit-defaulted/output.json index 00c64b6bad97..9946ca0ad2c7 100644 --- a/packages/babel-parser/test/fixtures/flow/enum-declaration/string-explicit-defaulted/output.json +++ b/packages/babel-parser/test/fixtures/flow/enum-declaration/string-explicit-defaulted/output.json @@ -38,7 +38,8 @@ "name": "B" } } - ] + ], + "hasUnknownMembers": false } } ], diff --git a/packages/babel-parser/test/fixtures/flow/enum-declaration/string-explicit-initialized/output.json b/packages/babel-parser/test/fixtures/flow/enum-declaration/string-explicit-initialized/output.json index b2d881c84b94..e9c04de11f28 100644 --- a/packages/babel-parser/test/fixtures/flow/enum-declaration/string-explicit-initialized/output.json +++ b/packages/babel-parser/test/fixtures/flow/enum-declaration/string-explicit-initialized/output.json @@ -56,7 +56,8 @@ "value": "b" } } - ] + ], + "hasUnknownMembers": false } } ], diff --git a/packages/babel-parser/test/fixtures/flow/enum-declaration/string-implicit-defaulted/output.json b/packages/babel-parser/test/fixtures/flow/enum-declaration/string-implicit-defaulted/output.json index ca27f1e722d6..e3a939805c54 100644 --- a/packages/babel-parser/test/fixtures/flow/enum-declaration/string-implicit-defaulted/output.json +++ b/packages/babel-parser/test/fixtures/flow/enum-declaration/string-implicit-defaulted/output.json @@ -38,7 +38,8 @@ "name": "B" } } - ] + ], + "hasUnknownMembers": false } } ], diff --git a/packages/babel-parser/test/fixtures/flow/enum-declaration/string-implicit-initialized/output.json b/packages/babel-parser/test/fixtures/flow/enum-declaration/string-implicit-initialized/output.json index d6f642c684e7..b7c04a9e0121 100644 --- a/packages/babel-parser/test/fixtures/flow/enum-declaration/string-implicit-initialized/output.json +++ b/packages/babel-parser/test/fixtures/flow/enum-declaration/string-implicit-initialized/output.json @@ -56,7 +56,8 @@ "value": "b" } } - ] + ], + "hasUnknownMembers": false } } ], diff --git a/packages/babel-parser/test/fixtures/flow/enum-declaration/string-member-inconsistently-initialized-majority-defaulted/output.json b/packages/babel-parser/test/fixtures/flow/enum-declaration/string-member-inconsistently-initialized-majority-defaulted/output.json index b2f08dfac888..7f5906cc2ff0 100644 --- a/packages/babel-parser/test/fixtures/flow/enum-declaration/string-member-inconsistently-initialized-majority-defaulted/output.json +++ b/packages/babel-parser/test/fixtures/flow/enum-declaration/string-member-inconsistently-initialized-majority-defaulted/output.json @@ -41,7 +41,8 @@ "name": "C" } } - ] + ], + "hasUnknownMembers": false } } ], diff --git a/packages/babel-parser/test/fixtures/flow/enum-declaration/string-member-inconsistently-initialized-majority-initialized/output.json b/packages/babel-parser/test/fixtures/flow/enum-declaration/string-member-inconsistently-initialized-majority-initialized/output.json index 01371ce1c56f..d57bcebfb9f8 100644 --- a/packages/babel-parser/test/fixtures/flow/enum-declaration/string-member-inconsistently-initialized-majority-initialized/output.json +++ b/packages/babel-parser/test/fixtures/flow/enum-declaration/string-member-inconsistently-initialized-majority-initialized/output.json @@ -59,7 +59,8 @@ "value": "c" } } - ] + ], + "hasUnknownMembers": false } } ], diff --git a/packages/babel-parser/test/fixtures/flow/enum-declaration/symbol/output.json b/packages/babel-parser/test/fixtures/flow/enum-declaration/symbol/output.json index 4497d3a6d362..91a4161a67d4 100644 --- a/packages/babel-parser/test/fixtures/flow/enum-declaration/symbol/output.json +++ b/packages/babel-parser/test/fixtures/flow/enum-declaration/symbol/output.json @@ -37,7 +37,8 @@ "name": "B" } } - ] + ], + "hasUnknownMembers": false } } ], diff --git a/packages/babel-parser/test/fixtures/flow/enum-declaration/unknown-members-invalid/input.js b/packages/babel-parser/test/fixtures/flow/enum-declaration/unknown-members-invalid/input.js new file mode 100644 index 000000000000..7cf551a186bd --- /dev/null +++ b/packages/babel-parser/test/fixtures/flow/enum-declaration/unknown-members-invalid/input.js @@ -0,0 +1,3 @@ +enum E { + ..., +} diff --git a/packages/babel-parser/test/fixtures/flow/enum-declaration/unknown-members-invalid/options.json b/packages/babel-parser/test/fixtures/flow/enum-declaration/unknown-members-invalid/options.json new file mode 100644 index 000000000000..f2b07fdae549 --- /dev/null +++ b/packages/babel-parser/test/fixtures/flow/enum-declaration/unknown-members-invalid/options.json @@ -0,0 +1,11 @@ +{ + "plugins": [ + [ + "flow", + { + "enums": true + } + ] + ], + "throws": "Unexpected token, expected \"}\" (2:5)" +} diff --git a/packages/babel-parser/test/fixtures/flow/enum-declaration/unknown-members/input.js b/packages/babel-parser/test/fixtures/flow/enum-declaration/unknown-members/input.js new file mode 100644 index 000000000000..87a82d84a080 --- /dev/null +++ b/packages/babel-parser/test/fixtures/flow/enum-declaration/unknown-members/input.js @@ -0,0 +1,5 @@ +enum E { + A, + B, + ... +} diff --git a/packages/babel-parser/test/fixtures/flow/enum-declaration/unknown-members/output.json b/packages/babel-parser/test/fixtures/flow/enum-declaration/unknown-members/output.json new file mode 100644 index 000000000000..b681e62d1045 --- /dev/null +++ b/packages/babel-parser/test/fixtures/flow/enum-declaration/unknown-members/output.json @@ -0,0 +1,48 @@ +{ + "type": "File", + "start":0,"end":26,"loc":{"start":{"line":1,"column":0},"end":{"line":5,"column":1}}, + "program": { + "type": "Program", + "start":0,"end":26,"loc":{"start":{"line":1,"column":0},"end":{"line":5,"column":1}}, + "sourceType": "script", + "interpreter": null, + "body": [ + { + "type": "EnumDeclaration", + "start":0,"end":26,"loc":{"start":{"line":1,"column":0},"end":{"line":5,"column":1}}, + "id": { + "type": "Identifier", + "start":5,"end":6,"loc":{"start":{"line":1,"column":5},"end":{"line":1,"column":6},"identifierName":"E"}, + "name": "E" + }, + "body": { + "type": "EnumStringBody", + "start":7,"end":26,"loc":{"start":{"line":1,"column":7},"end":{"line":5,"column":1}}, + "explicitType": false, + "members": [ + { + "type": "EnumDefaultedMember", + "start":11,"end":12,"loc":{"start":{"line":2,"column":2},"end":{"line":2,"column":3}}, + "id": { + "type": "Identifier", + "start":11,"end":12,"loc":{"start":{"line":2,"column":2},"end":{"line":2,"column":3},"identifierName":"A"}, + "name": "A" + } + }, + { + "type": "EnumDefaultedMember", + "start":16,"end":17,"loc":{"start":{"line":3,"column":2},"end":{"line":3,"column":3}}, + "id": { + "type": "Identifier", + "start":16,"end":17,"loc":{"start":{"line":3,"column":2},"end":{"line":3,"column":3},"identifierName":"B"}, + "name": "B" + } + } + ], + "hasUnknownMembers": true + } + } + ], + "directives": [] + } +} \ No newline at end of file diff --git a/packages/babel-types/src/definitions/flow.js b/packages/babel-types/src/definitions/flow.js index 182b6fec6e4e..ea7ab39ccef2 100644 --- a/packages/babel-types/src/definitions/flow.js +++ b/packages/babel-types/src/definitions/flow.js @@ -491,6 +491,7 @@ defineType("EnumBooleanBody", { fields: { explicit: validate(assertValueType("boolean")), members: validateArrayOfType("EnumBooleanMember"), + hasUnknownMembers: validate(assertValueType("boolean")), }, }); @@ -500,6 +501,7 @@ defineType("EnumNumberBody", { fields: { explicit: validate(assertValueType("boolean")), members: validateArrayOfType("EnumNumberMember"), + hasUnknownMembers: validate(assertValueType("boolean")), }, }); @@ -509,6 +511,7 @@ defineType("EnumStringBody", { fields: { explicit: validate(assertValueType("boolean")), members: validateArrayOfType(["EnumStringMember", "EnumDefaultedMember"]), + hasUnknownMembers: validate(assertValueType("boolean")), }, }); @@ -517,6 +520,7 @@ defineType("EnumSymbolBody", { visitor: ["members"], fields: { members: validateArrayOfType("EnumDefaultedMember"), + hasUnknownMembers: validate(assertValueType("boolean")), }, });