From 2e6cdfb6ccb15cc5c0e3e3aeff9187076916e3e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Ribaudo?= Date: Mon, 11 Oct 2021 22:47:57 +0200 Subject: [PATCH] Add `disallowJSXAmbiguity` option to the TS syntax plugin --- packages/babel-plugin-syntax-typescript/package.json | 3 ++- packages/babel-plugin-syntax-typescript/src/index.js | 7 +++++-- .../test/fixtures/disallow-jsx-ambiguity/options.json | 3 +++ .../disallow-jsx-ambiguity/type-assertion/input.ts | 1 + .../disallow-jsx-ambiguity/type-assertion/options.json | 3 +++ .../type-parameter-unambiguous/input.ts | 2 ++ .../type-parameter-unambiguous/output.js | 3 +++ .../disallow-jsx-ambiguity/type-parameter/input.ts | 2 ++ .../disallow-jsx-ambiguity/type-parameter/options.json | 3 +++ packages/babel-plugin-syntax-typescript/test/index.js | 3 +++ yarn.lock | 1 + 11 files changed, 28 insertions(+), 3 deletions(-) create mode 100644 packages/babel-plugin-syntax-typescript/test/fixtures/disallow-jsx-ambiguity/options.json create mode 100644 packages/babel-plugin-syntax-typescript/test/fixtures/disallow-jsx-ambiguity/type-assertion/input.ts create mode 100644 packages/babel-plugin-syntax-typescript/test/fixtures/disallow-jsx-ambiguity/type-assertion/options.json create mode 100644 packages/babel-plugin-syntax-typescript/test/fixtures/disallow-jsx-ambiguity/type-parameter-unambiguous/input.ts create mode 100644 packages/babel-plugin-syntax-typescript/test/fixtures/disallow-jsx-ambiguity/type-parameter-unambiguous/output.js create mode 100644 packages/babel-plugin-syntax-typescript/test/fixtures/disallow-jsx-ambiguity/type-parameter/input.ts create mode 100644 packages/babel-plugin-syntax-typescript/test/fixtures/disallow-jsx-ambiguity/type-parameter/options.json create mode 100644 packages/babel-plugin-syntax-typescript/test/index.js diff --git a/packages/babel-plugin-syntax-typescript/package.json b/packages/babel-plugin-syntax-typescript/package.json index 27d73768547a..2168cf7b3160 100644 --- a/packages/babel-plugin-syntax-typescript/package.json +++ b/packages/babel-plugin-syntax-typescript/package.json @@ -24,7 +24,8 @@ "@babel/core": "^7.0.0-0" }, "devDependencies": { - "@babel/core": "workspace:*" + "@babel/core": "workspace:*", + "@babel/helper-plugin-test-runner": "workspace:*" }, "engines": { "node": ">=6.9.0" diff --git a/packages/babel-plugin-syntax-typescript/src/index.js b/packages/babel-plugin-syntax-typescript/src/index.js index bc396d99bcae..88655fd2eb41 100644 --- a/packages/babel-plugin-syntax-typescript/src/index.js +++ b/packages/babel-plugin-syntax-typescript/src/index.js @@ -15,7 +15,7 @@ function removePlugin(plugins, name) { } } -export default declare((api, { isTSX }) => { +export default declare((api, { isTSX, disallowJSXAmbiguity }) => { api.assertVersion(7); return { @@ -31,7 +31,10 @@ export default declare((api, { isTSX }) => { // in TS depends on the extensions, and is purely dependent on 'isTSX'. removePlugin(plugins, "jsx"); - parserOpts.plugins.push("typescript", "classProperties"); + parserOpts.plugins.push( + ["typescript", { disallowJSXAmbiguity }], + "classProperties", + ); if (!process.env.BABEL_8_BREAKING) { // This is enabled by default since @babel/parser 7.1.5 diff --git a/packages/babel-plugin-syntax-typescript/test/fixtures/disallow-jsx-ambiguity/options.json b/packages/babel-plugin-syntax-typescript/test/fixtures/disallow-jsx-ambiguity/options.json new file mode 100644 index 000000000000..c75ecf5b3df6 --- /dev/null +++ b/packages/babel-plugin-syntax-typescript/test/fixtures/disallow-jsx-ambiguity/options.json @@ -0,0 +1,3 @@ +{ + "plugins": [["syntax-typescript", { "disallowJSXAmbiguity": true }]] +} diff --git a/packages/babel-plugin-syntax-typescript/test/fixtures/disallow-jsx-ambiguity/type-assertion/input.ts b/packages/babel-plugin-syntax-typescript/test/fixtures/disallow-jsx-ambiguity/type-assertion/input.ts new file mode 100644 index 000000000000..68e889307fc1 --- /dev/null +++ b/packages/babel-plugin-syntax-typescript/test/fixtures/disallow-jsx-ambiguity/type-assertion/input.ts @@ -0,0 +1 @@ +x; diff --git a/packages/babel-plugin-syntax-typescript/test/fixtures/disallow-jsx-ambiguity/type-assertion/options.json b/packages/babel-plugin-syntax-typescript/test/fixtures/disallow-jsx-ambiguity/type-assertion/options.json new file mode 100644 index 000000000000..d59f14ff0b1b --- /dev/null +++ b/packages/babel-plugin-syntax-typescript/test/fixtures/disallow-jsx-ambiguity/type-assertion/options.json @@ -0,0 +1,3 @@ +{ + "throws": "This syntax is reserved in files with the .mts or .cts extension. Use an `as` expression instead. (1:0)" +} diff --git a/packages/babel-plugin-syntax-typescript/test/fixtures/disallow-jsx-ambiguity/type-parameter-unambiguous/input.ts b/packages/babel-plugin-syntax-typescript/test/fixtures/disallow-jsx-ambiguity/type-parameter-unambiguous/input.ts new file mode 100644 index 000000000000..d9deae0f0996 --- /dev/null +++ b/packages/babel-plugin-syntax-typescript/test/fixtures/disallow-jsx-ambiguity/type-parameter-unambiguous/input.ts @@ -0,0 +1,2 @@ +() => 1; +(x) => 1; diff --git a/packages/babel-plugin-syntax-typescript/test/fixtures/disallow-jsx-ambiguity/type-parameter-unambiguous/output.js b/packages/babel-plugin-syntax-typescript/test/fixtures/disallow-jsx-ambiguity/type-parameter-unambiguous/output.js new file mode 100644 index 000000000000..26d3834d427d --- /dev/null +++ b/packages/babel-plugin-syntax-typescript/test/fixtures/disallow-jsx-ambiguity/type-parameter-unambiguous/output.js @@ -0,0 +1,3 @@ +() => 1; + +(x) => 1; diff --git a/packages/babel-plugin-syntax-typescript/test/fixtures/disallow-jsx-ambiguity/type-parameter/input.ts b/packages/babel-plugin-syntax-typescript/test/fixtures/disallow-jsx-ambiguity/type-parameter/input.ts new file mode 100644 index 000000000000..4b2a849ad10e --- /dev/null +++ b/packages/babel-plugin-syntax-typescript/test/fixtures/disallow-jsx-ambiguity/type-parameter/input.ts @@ -0,0 +1,2 @@ +() => 1; +(x) => 1; diff --git a/packages/babel-plugin-syntax-typescript/test/fixtures/disallow-jsx-ambiguity/type-parameter/options.json b/packages/babel-plugin-syntax-typescript/test/fixtures/disallow-jsx-ambiguity/type-parameter/options.json new file mode 100644 index 000000000000..656905ed2daf --- /dev/null +++ b/packages/babel-plugin-syntax-typescript/test/fixtures/disallow-jsx-ambiguity/type-parameter/options.json @@ -0,0 +1,3 @@ +{ + "throws": "This syntax is reserved in files with the .mts or .cts extension. Add a trailing comma, as in `() => ...`. (1:0)" +} diff --git a/packages/babel-plugin-syntax-typescript/test/index.js b/packages/babel-plugin-syntax-typescript/test/index.js new file mode 100644 index 000000000000..21a55ce6b5e7 --- /dev/null +++ b/packages/babel-plugin-syntax-typescript/test/index.js @@ -0,0 +1,3 @@ +import runner from "@babel/helper-plugin-test-runner"; + +runner(import.meta.url); diff --git a/yarn.lock b/yarn.lock index b451821ea3e2..38693675dbb5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1995,6 +1995,7 @@ __metadata: resolution: "@babel/plugin-syntax-typescript@workspace:packages/babel-plugin-syntax-typescript" dependencies: "@babel/core": "workspace:*" + "@babel/helper-plugin-test-runner": "workspace:*" "@babel/helper-plugin-utils": "workspace:^7.14.5" peerDependencies: "@babel/core": ^7.0.0-0