diff --git a/packages/babel-parser/src/plugins/flow.js b/packages/babel-parser/src/plugins/flow.js index e9b4cc32c37f..54a051b46828 100644 --- a/packages/babel-parser/src/plugins/flow.js +++ b/packages/babel-parser/src/plugins/flow.js @@ -1263,7 +1263,10 @@ export default (superClass: Class): Class => }); case tt.bracketL: - return this.flowParseTupleType(); + this.state.noAnonFunctionType = false; + type = this.flowParseTupleType(); + this.state.noAnonFunctionType = oldNoAnonFunctionType; + return type; case tt.relational: if (this.state.value === "<") { @@ -1352,15 +1355,27 @@ export default (superClass: Class): Class => case tt.plusMin: if (this.state.value === "-") { this.next(); - if (!this.match(tt.num)) { - this.unexpected(null, `Unexpected token, expected "number"`); + if (this.match(tt.num)) { + return this.parseLiteral( + -this.state.value, + "NumberLiteralTypeAnnotation", + node.start, + node.loc.start, + ); + } + + if (this.match(tt.bigint)) { + return this.parseLiteral( + -this.state.value, + "BigIntLiteralTypeAnnotation", + node.start, + node.loc.start, + ); } - return this.parseLiteral( - -this.state.value, - "NumberLiteralTypeAnnotation", - node.start, - node.loc.start, + this.unexpected( + null, + `Unexpected token, expected "number" or "bigint"`, ); } @@ -1371,6 +1386,12 @@ export default (superClass: Class): Class => "NumberLiteralTypeAnnotation", ); + case tt.bigint: + return this.parseLiteral( + this.state.value, + "BigIntLiteralTypeAnnotation", + ); + case tt._void: this.next(); return this.finishNode(node, "VoidTypeAnnotation"); diff --git a/packages/babel-parser/test/fixtures/flow/literal-types/invalid-number-negative/options.json b/packages/babel-parser/test/fixtures/flow/literal-types/invalid-number-negative/options.json index 5667a8ffb0c0..d4fadede72f8 100644 --- a/packages/babel-parser/test/fixtures/flow/literal-types/invalid-number-negative/options.json +++ b/packages/babel-parser/test/fixtures/flow/literal-types/invalid-number-negative/options.json @@ -1,3 +1,3 @@ { - "throws": "Unexpected token, expected \"number\" (1:8)" + "throws": "Unexpected token, expected \"number\" or \"bigint\" (1:8)" } diff --git a/scripts/tests/flow/flow_tests_whitelist.txt b/scripts/tests/flow/flow_tests_whitelist.txt index 81758912b0f4..1c9cc9519f76 100644 --- a/scripts/tests/flow/flow_tests_whitelist.txt +++ b/scripts/tests/flow/flow_tests_whitelist.txt @@ -9,7 +9,6 @@ # Entries should be removed incrementally as the babel parser is improved. JSX_invalid/migrated_0000.js -arrow_function/tuple_return_type.js arrow_function_invalid/migrated_0002.js async_await/migrated_0007.js async_await/migrated_0020.js @@ -27,22 +26,7 @@ private_class_properties/getter_duplicate.js private_class_properties/setter_and_field.js private_class_properties/setter_duplicate.js types/member/reserved_words.js -types/bigint_literal/migrated_0000.js -types/bigint_literal/migrated_0002.js -types/bigint_literal/migrated_0003.js -types/bigint_literal/migrated_0004.js -types/bigint_literal/migrated_0005.js -types/bigint_literal/migrated_0006.js -types/bigint_literal/migrated_0007.js -types/bigint_literal/migrated_0008.js -types/bigint_literal/migrated_0009.js class_method_kinds/polymorphic_getter.js -numbers/underscored_bin.js -numbers/underscored_float.js -numbers/underscored_float_whole.js -numbers/underscored_hex.js -numbers/underscored_number.js -numbers/underscored_oct.js ES6/modules/migrated_0020.js export_import_reserved_words/migrated_0003.js export_statements/export_trailing_comma.js diff --git a/scripts/tests/flow/run_babel_parser_flow_tests.js b/scripts/tests/flow/run_babel_parser_flow_tests.js index ffad821ba1d5..f087fb6614e3 100644 --- a/scripts/tests/flow/run_babel_parser_flow_tests.js +++ b/scripts/tests/flow/run_babel_parser_flow_tests.js @@ -117,6 +117,7 @@ const options = { "classPrivateProperties", "classPrivateMethods", "bigInt", + "numericSeparator", ], sourceType: "module", ranges: true,