From 9d0aa1ec9d1a7c0fdbe993d9646a599942eef47f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Ribaudo?= Date: Tue, 10 Aug 2021 19:09:23 +0200 Subject: [PATCH] Disallow `(a => b)` when parsing Flow (#13645) --- packages/babel-parser/src/plugins/flow/index.js | 12 ++++++------ .../type-generics/wrong-arrow-parens-no-jsx/input.js | 1 + .../wrong-arrow-parens-no-jsx/options.json | 5 +++++ .../flow/type-generics/wrong-arrow-parens/input.js | 1 + .../type-generics/wrong-arrow-parens/options.json | 3 +++ 5 files changed, 16 insertions(+), 6 deletions(-) create mode 100644 packages/babel-parser/test/fixtures/flow/type-generics/wrong-arrow-parens-no-jsx/input.js create mode 100644 packages/babel-parser/test/fixtures/flow/type-generics/wrong-arrow-parens-no-jsx/options.json create mode 100644 packages/babel-parser/test/fixtures/flow/type-generics/wrong-arrow-parens/input.js create mode 100644 packages/babel-parser/test/fixtures/flow/type-generics/wrong-arrow-parens/options.json diff --git a/packages/babel-parser/src/plugins/flow/index.js b/packages/babel-parser/src/plugins/flow/index.js index a57a75acaee2..8774da67da5e 100644 --- a/packages/babel-parser/src/plugins/flow/index.js +++ b/packages/babel-parser/src/plugins/flow/index.js @@ -2842,17 +2842,17 @@ export default (superClass: Class): Class => }, ); + // (() => {}); // (() => {}: any); - if ( - arrowExpression.type !== "ArrowFunctionExpression" && - arrowExpression.extra?.parenthesized - ) { - abort(); - } + if (arrowExpression.extra?.parenthesized) abort(); // The above can return a TypeCastExpression when the arrow // expression is not wrapped in parens. See also `this.parseParenItem`. + // (() => {}: any); const expr = this.maybeUnwrapTypeCastExpression(arrowExpression); + + if (expr.type !== "ArrowFunctionExpression") abort(); + expr.typeParameters = typeParameters; this.resetStartLocationFromNode(expr, typeParameters); diff --git a/packages/babel-parser/test/fixtures/flow/type-generics/wrong-arrow-parens-no-jsx/input.js b/packages/babel-parser/test/fixtures/flow/type-generics/wrong-arrow-parens-no-jsx/input.js new file mode 100644 index 000000000000..11885587667e --- /dev/null +++ b/packages/babel-parser/test/fixtures/flow/type-generics/wrong-arrow-parens-no-jsx/input.js @@ -0,0 +1 @@ +(a => b); diff --git a/packages/babel-parser/test/fixtures/flow/type-generics/wrong-arrow-parens-no-jsx/options.json b/packages/babel-parser/test/fixtures/flow/type-generics/wrong-arrow-parens-no-jsx/options.json new file mode 100644 index 000000000000..c85b34519fb2 --- /dev/null +++ b/packages/babel-parser/test/fixtures/flow/type-generics/wrong-arrow-parens-no-jsx/options.json @@ -0,0 +1,5 @@ +{ + "sourceType": "module", + "plugins": ["flow"], + "throws": "Expected an arrow function after this type parameter declaration. (1:0)" +} diff --git a/packages/babel-parser/test/fixtures/flow/type-generics/wrong-arrow-parens/input.js b/packages/babel-parser/test/fixtures/flow/type-generics/wrong-arrow-parens/input.js new file mode 100644 index 000000000000..11885587667e --- /dev/null +++ b/packages/babel-parser/test/fixtures/flow/type-generics/wrong-arrow-parens/input.js @@ -0,0 +1 @@ +(a => b); diff --git a/packages/babel-parser/test/fixtures/flow/type-generics/wrong-arrow-parens/options.json b/packages/babel-parser/test/fixtures/flow/type-generics/wrong-arrow-parens/options.json new file mode 100644 index 000000000000..560947fe5a7f --- /dev/null +++ b/packages/babel-parser/test/fixtures/flow/type-generics/wrong-arrow-parens/options.json @@ -0,0 +1,3 @@ +{ + "throws": "Unterminated JSX contents. (1:3)" +}