From 6a728a05a8435b87b91306ce0264365677d30771 Mon Sep 17 00:00:00 2001 From: Brian Ng Date: Mon, 23 Mar 2020 18:06:44 -0500 Subject: [PATCH] Restore default pragmas in preset-react for classic runtime (#11324) --- .../src/transform-classic.js | 3 ++- packages/babel-preset-react/src/index.js | 10 ++++++++-- .../runtime-classic-pragma-no-frag/input.js | 3 +++ .../runtime-classic-pragma-no-frag/options.json | 3 +++ .../runtime-classic-pragma-no-frag/output.js | 2 ++ 5 files changed, 18 insertions(+), 3 deletions(-) create mode 100644 packages/babel-preset-react/test/fixtures/preset-options/runtime-classic-pragma-no-frag/input.js create mode 100644 packages/babel-preset-react/test/fixtures/preset-options/runtime-classic-pragma-no-frag/options.json create mode 100644 packages/babel-preset-react/test/fixtures/preset-options/runtime-classic-pragma-no-frag/output.js 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 5ae9411a2c..6fd8e9d80a 100644 --- a/packages/babel-plugin-transform-react-jsx/src/transform-classic.js +++ b/packages/babel-plugin-transform-react-jsx/src/transform-classic.js @@ -41,7 +41,7 @@ export default declare((api, options) => { post(state, pass) { state.callee = pass.get("jsxIdentifier")(); - state.pure = PURE_ANNOTATION ?? !pass.get("pragmaSet"); + state.pure = PURE_ANNOTATION ?? pass.get("pragma") === DEFAULT.pragma; }, throwIfNamespace: THROW_IF_NAMESPACE, @@ -74,6 +74,7 @@ export default declare((api, options) => { state.set("jsxIdentifier", createIdentifierParser(pragma)); state.set("jsxFragIdentifier", createIdentifierParser(pragmaFrag)); state.set("usedFragment", false); + state.set("pragma", pragma); state.set("pragmaSet", pragmaSet); state.set("pragmaFragSet", pragmaFragSet); }, diff --git a/packages/babel-preset-react/src/index.js b/packages/babel-preset-react/src/index.js index 7d933c0351..40f3e0e635 100644 --- a/packages/babel-preset-react/src/index.js +++ b/packages/babel-preset-react/src/index.js @@ -8,9 +8,9 @@ import transformReactJSXSelf from "@babel/plugin-transform-react-jsx-self"; export default declare((api, opts) => { api.assertVersion(7); + let { pragma, pragmaFrag } = opts; + const { - pragma, - pragmaFrag, pure, throwIfNamespace = true, useSpread, @@ -18,6 +18,12 @@ export default declare((api, opts) => { importSource, } = opts; + // TODO: (Babel 8) Remove setting these defaults + if (runtime === "classic") { + pragma = pragma || "React.createElement"; + pragmaFrag = pragmaFrag || "React.Fragment"; + } + // TODO: (Babel 8) Don't cast these options but validate it const development = !!opts.development; const useBuiltIns = !!opts.useBuiltIns; diff --git a/packages/babel-preset-react/test/fixtures/preset-options/runtime-classic-pragma-no-frag/input.js b/packages/babel-preset-react/test/fixtures/preset-options/runtime-classic-pragma-no-frag/input.js new file mode 100644 index 0000000000..a8deab21bf --- /dev/null +++ b/packages/babel-preset-react/test/fixtures/preset-options/runtime-classic-pragma-no-frag/input.js @@ -0,0 +1,3 @@ +/** @jsx jsx */ + +const Foo = <>; diff --git a/packages/babel-preset-react/test/fixtures/preset-options/runtime-classic-pragma-no-frag/options.json b/packages/babel-preset-react/test/fixtures/preset-options/runtime-classic-pragma-no-frag/options.json new file mode 100644 index 0000000000..12d195e58b --- /dev/null +++ b/packages/babel-preset-react/test/fixtures/preset-options/runtime-classic-pragma-no-frag/options.json @@ -0,0 +1,3 @@ +{ + "presets": ["react"] +} diff --git a/packages/babel-preset-react/test/fixtures/preset-options/runtime-classic-pragma-no-frag/output.js b/packages/babel-preset-react/test/fixtures/preset-options/runtime-classic-pragma-no-frag/output.js new file mode 100644 index 0000000000..bc6f729c49 --- /dev/null +++ b/packages/babel-preset-react/test/fixtures/preset-options/runtime-classic-pragma-no-frag/output.js @@ -0,0 +1,2 @@ +/** @jsx jsx */ +const Foo = jsx(React.Fragment, null);