From 87b27810461d0c475731d8121d887b23ec36c6b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Ribaudo?= Date: Fri, 20 Mar 2020 22:29:50 +0100 Subject: [PATCH] Consider jsxFrag as set when it's set to the default value (#11295) * Consider jsxFrag as set when it's set to the default value * Test #11294 --- .../src/transform-classic.js | 8 ++++++-- .../fixtures/regression/pragma-frag-set-default/input.js | 3 +++ .../regression/pragma-frag-set-default/options.json | 5 +++++ .../fixtures/regression/pragma-frag-set-default/output.js | 4 ++++ .../test/fixtures/regression/11294/input.mjs | 2 ++ .../test/fixtures/regression/11294/options.json | 4 ++++ .../test/fixtures/regression/11294/output.mjs | 3 +++ 7 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/regression/pragma-frag-set-default/input.js create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/regression/pragma-frag-set-default/options.json create mode 100644 packages/babel-plugin-transform-react-jsx/test/fixtures/regression/pragma-frag-set-default/output.js create mode 100644 packages/babel-preset-react/test/fixtures/regression/11294/input.mjs create mode 100644 packages/babel-preset-react/test/fixtures/regression/11294/options.json create mode 100644 packages/babel-preset-react/test/fixtures/regression/11294/output.mjs diff --git a/packages/babel-plugin-transform-react-jsx/src/transform-classic.js b/packages/babel-plugin-transform-react-jsx/src/transform-classic.js index eee2ab2533..5ae9411a2c 100644 --- a/packages/babel-plugin-transform-react-jsx/src/transform-classic.js +++ b/packages/babel-plugin-transform-react-jsx/src/transform-classic.js @@ -53,16 +53,20 @@ export default declare((api, options) => { let pragma = PRAGMA_DEFAULT; let pragmaFrag = PRAGMA_FRAG_DEFAULT; + let pragmaSet = !!options.pragma; + let pragmaFragSet = !!options.pragma; if (file.ast.comments) { for (const comment of (file.ast.comments: Array)) { const jsxMatches = JSX_ANNOTATION_REGEX.exec(comment.value); if (jsxMatches) { pragma = jsxMatches[1]; + pragmaSet = true; } const jsxFragMatches = JSX_FRAG_ANNOTATION_REGEX.exec(comment.value); if (jsxFragMatches) { pragmaFrag = jsxFragMatches[1]; + pragmaFragSet = true; } } } @@ -70,8 +74,8 @@ export default declare((api, options) => { state.set("jsxIdentifier", createIdentifierParser(pragma)); state.set("jsxFragIdentifier", createIdentifierParser(pragmaFrag)); state.set("usedFragment", false); - state.set("pragmaSet", pragma !== DEFAULT.pragma); - state.set("pragmaFragSet", pragmaFrag !== DEFAULT.pragmaFrag); + state.set("pragmaSet", pragmaSet); + state.set("pragmaFragSet", pragmaFragSet); }, exit(path, state) { if ( diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/regression/pragma-frag-set-default/input.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/regression/pragma-frag-set-default/input.js new file mode 100644 index 0000000000..b0dacd1181 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/regression/pragma-frag-set-default/input.js @@ -0,0 +1,3 @@ +/* @jsxFrag React.Fragment */ +/* @jsx h */ +<>Test; diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/regression/pragma-frag-set-default/options.json b/packages/babel-plugin-transform-react-jsx/test/fixtures/regression/pragma-frag-set-default/options.json new file mode 100644 index 0000000000..5e1d82404d --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/regression/pragma-frag-set-default/options.json @@ -0,0 +1,5 @@ +{ + "plugins": [ + "transform-react-jsx" + ] +} diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/regression/pragma-frag-set-default/output.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/regression/pragma-frag-set-default/output.js new file mode 100644 index 0000000000..8a621e8a45 --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/regression/pragma-frag-set-default/output.js @@ -0,0 +1,4 @@ +/* @jsxFrag React.Fragment */ + +/* @jsx h */ +h(React.Fragment, null, "Test"); diff --git a/packages/babel-preset-react/test/fixtures/regression/11294/input.mjs b/packages/babel-preset-react/test/fixtures/regression/11294/input.mjs new file mode 100644 index 0000000000..ce3a2d3fff --- /dev/null +++ b/packages/babel-preset-react/test/fixtures/regression/11294/input.mjs @@ -0,0 +1,2 @@ +import React from 'react'; +const D = <>; diff --git a/packages/babel-preset-react/test/fixtures/regression/11294/options.json b/packages/babel-preset-react/test/fixtures/regression/11294/options.json new file mode 100644 index 0000000000..238981a96b --- /dev/null +++ b/packages/babel-preset-react/test/fixtures/regression/11294/options.json @@ -0,0 +1,4 @@ +{ + "presets": [ + ["react", { "pragma": "__jsx" }]] +} diff --git a/packages/babel-preset-react/test/fixtures/regression/11294/output.mjs b/packages/babel-preset-react/test/fixtures/regression/11294/output.mjs new file mode 100644 index 0000000000..91e0be8760 --- /dev/null +++ b/packages/babel-preset-react/test/fixtures/regression/11294/output.mjs @@ -0,0 +1,3 @@ +import React from 'react'; + +const D = __jsx(React.Fragment, null);