diff --git a/packages/babel-plugin-transform-async-to-generator/test/fixtures/regression/7178/output.js b/packages/babel-plugin-transform-async-to-generator/test/fixtures/regression/7178/output.js index 509f1f64c9..834e46ca35 100644 --- a/packages/babel-plugin-transform-async-to-generator/test/fixtures/regression/7178/output.js +++ b/packages/babel-plugin-transform-async-to-generator/test/fixtures/regression/7178/output.js @@ -4,7 +4,9 @@ function action() { return _action.apply(this, arguments); } -var _ref = React.createElement(Contact, { +var _ref = +/*#__PURE__*/ +React.createElement(Contact, { title: title }); diff --git a/packages/babel-plugin-transform-react-constant-elements/package.json b/packages/babel-plugin-transform-react-constant-elements/package.json index 929895ac23..94f0fc95b6 100644 --- a/packages/babel-plugin-transform-react-constant-elements/package.json +++ b/packages/babel-plugin-transform-react-constant-elements/package.json @@ -8,6 +8,9 @@ "keywords": [ "babel-plugin" ], + "dependencies": { + "@babel/helper-annotate-as-pure": "7.0.0-beta.40" + }, "peerDependencies": { "@babel/core": "7.0.0-beta.40" }, diff --git a/packages/babel-plugin-transform-react-constant-elements/src/index.js b/packages/babel-plugin-transform-react-constant-elements/src/index.js index 29c8f7be94..9745ceeda6 100644 --- a/packages/babel-plugin-transform-react-constant-elements/src/index.js +++ b/packages/babel-plugin-transform-react-constant-elements/src/index.js @@ -1,4 +1,5 @@ import { types as t } from "@babel/core"; +import annotateAsPure from "@babel/helper-annotate-as-pure"; export default function transformReactConstantElement(api, options) { const { allowMutablePropsOnTags } = options; @@ -101,7 +102,11 @@ export default function transformReactConstantElement(api, options) { path.traverse(immutabilityVisitor, state); if (state.isImmutable) { - path.hoist(); + const hoisted = path.hoist(); + + if (hoisted) { + annotateAsPure(hoisted); + } } }, }, diff --git a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/append-to-end-when-declared-in-scope-2/output.js b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/append-to-end-when-declared-in-scope-2/output.js index 5f4d4762cf..e44a4b518d 100644 --- a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/append-to-end-when-declared-in-scope-2/output.js +++ b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/append-to-end-when-declared-in-scope-2/output.js @@ -1,10 +1,14 @@ -var _ref =
child
; +var _ref = +/*#__PURE__*/ +
child
; const AppItem = () => { return _ref; }; -var _ref2 =
+var _ref2 = +/*#__PURE__*/ +

Parent

; diff --git a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/append-to-end-when-declared-in-scope-3/output.js b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/append-to-end-when-declared-in-scope-3/output.js index 5b5fdfbf77..602d3eb3b1 100644 --- a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/append-to-end-when-declared-in-scope-3/output.js +++ b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/append-to-end-when-declared-in-scope-3/output.js @@ -1,6 +1,10 @@ -var _ref2 =
child
; +var _ref2 = +/*#__PURE__*/ +
child
; -var _ref3 =

Parent

; +var _ref3 = +/*#__PURE__*/ +

Parent

; (function () { class App extends React.Component { @@ -13,7 +17,9 @@ var _ref3 =

Parent

; const AppItem = () => { return _ref2; }, - _ref =
+ _ref = + /*#__PURE__*/ +
{_ref3}
; diff --git a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/append-to-end-when-declared-in-scope-4/output.js b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/append-to-end-when-declared-in-scope-4/output.js index 7088d18dca..21fa63efbd 100644 --- a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/append-to-end-when-declared-in-scope-4/output.js +++ b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/append-to-end-when-declared-in-scope-4/output.js @@ -1,13 +1,19 @@ -var _ref =
child
; +var _ref = +/*#__PURE__*/ +
child
; -var _ref3 =

Parent

; +var _ref3 = +/*#__PURE__*/ +

Parent

; (function () { const AppItem = () => { return _ref; }; - var _ref2 =
+ var _ref2 = + /*#__PURE__*/ +
{_ref3}
; diff --git a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/append-to-end-when-declared-in-scope/output.js b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/append-to-end-when-declared-in-scope/output.js index e7f8ea322a..730a99a08c 100644 --- a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/append-to-end-when-declared-in-scope/output.js +++ b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/append-to-end-when-declared-in-scope/output.js @@ -5,12 +5,16 @@ export default class App extends React.Component { } -var _ref2 =
child
; +var _ref2 = +/*#__PURE__*/ +
child
; const AppItem = () => { return _ref2; }, - _ref =
+ _ref = +/*#__PURE__*/ +

Parent

; diff --git a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/children/output.js b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/children/output.js index 9f725b28e8..b341d7309f 100644 --- a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/children/output.js +++ b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/children/output.js @@ -1,4 +1,6 @@ -var _ref = ; +var _ref = +/*#__PURE__*/ +; var Foo = React.createClass({ render: function () { diff --git a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/class-assign-unreferenced-param-deopt/output.js b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/class-assign-unreferenced-param-deopt/output.js index 9eaf6f3992..12cdcd2c31 100644 --- a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/class-assign-unreferenced-param-deopt/output.js +++ b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/class-assign-unreferenced-param-deopt/output.js @@ -1,6 +1,8 @@ import React from 'react'; // Regression test for https://github.com/babel/babel/issues/5552 -var _ref =
; +var _ref = +/*#__PURE__*/ +
; class BugReport extends React.Component { constructor(...args) { diff --git a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/compound-assignment/output.js b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/compound-assignment/output.js index ed30e48545..3f305943f7 100644 --- a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/compound-assignment/output.js +++ b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/compound-assignment/output.js @@ -1,9 +1,13 @@ import React from 'react'; import Loader from 'loader'; -var _ref = ; +var _ref = +/*#__PURE__*/ +; -var _ref2 = ; +var _ref2 = +/*#__PURE__*/ +; const errorComesHere = () => _ref, thisWorksFine = () => _ref2; diff --git a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/constructor/output.js b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/constructor/output.js index e3e86ae68d..ff7176d24f 100644 --- a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/constructor/output.js +++ b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/constructor/output.js @@ -1,6 +1,8 @@ var Foo = require("Foo"); -var _ref = ; +var _ref = +/*#__PURE__*/ +; function render() { return _ref; diff --git a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/deep-constant-violation/output.js b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/deep-constant-violation/output.js index 325f0daf7c..482d9ccbc4 100644 --- a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/deep-constant-violation/output.js +++ b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/deep-constant-violation/output.js @@ -1,6 +1,10 @@ -var _ref = ; +var _ref = +/*#__PURE__*/ +; -var _ref2 = ; +var _ref2 = +/*#__PURE__*/ +; function render() { var children = _ref; diff --git a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/dont-hoist-before-class/output.js b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/dont-hoist-before-class/output.js index 060811816d..3cab082e24 100644 --- a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/dont-hoist-before-class/output.js +++ b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/dont-hoist-before-class/output.js @@ -4,11 +4,15 @@ const Parent = ({}) => _ref; export default Parent; -var _ref2 =
+var _ref2 = +/*#__PURE__*/ +
ChildTextContent
; let Child = () => _ref2, - _ref =
+ _ref = +/*#__PURE__*/ +
; diff --git a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/dont-hoist-before-declaration/output.js b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/dont-hoist-before-declaration/output.js index 878e19404b..a8a3c7e285 100644 --- a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/dont-hoist-before-declaration/output.js +++ b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/dont-hoist-before-declaration/output.js @@ -1,6 +1,8 @@ function render() { const bar = "bar", - _ref = , + _ref = + /*#__PURE__*/ + , renderFoo = () => _ref; return renderFoo(); @@ -10,7 +12,9 @@ function render() { const bar = "bar", renderFoo = () => _ref2, baz = "baz", - _ref2 = ; + _ref2 = + /*#__PURE__*/ + ; return renderFoo(); } diff --git a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/dont-hoist-before-default-params-2/output.js b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/dont-hoist-before-default-params-2/output.js index 86a47eb10a..fccc84ff7b 100644 --- a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/dont-hoist-before-default-params-2/output.js +++ b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/dont-hoist-before-default-params-2/output.js @@ -1,7 +1,9 @@ function render() { var title = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; - var _ref = ; + var _ref = + /*#__PURE__*/ + ; return () => _ref; } diff --git a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/dont-hoist-before-default-params/output.js b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/dont-hoist-before-default-params/output.js index 6780bc3d89..93a36e512c 100644 --- a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/dont-hoist-before-default-params/output.js +++ b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/dont-hoist-before-default-params/output.js @@ -1,6 +1,8 @@ function render(Component) { var text = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '', - _ref = ; + _ref = + /*#__PURE__*/ + ; return function () { return _ref; diff --git a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/dont-hoist-before-hoc/output.js b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/dont-hoist-before-hoc/output.js index d1521a3baf..105e9ef2a5 100644 --- a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/dont-hoist-before-hoc/output.js +++ b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/dont-hoist-before-hoc/output.js @@ -6,7 +6,9 @@ const Parent = ({}) => _ref; export default Parent; -var _ref2 =
+var _ref2 = +/*#__PURE__*/ +
ChildTextContent
; @@ -14,6 +16,8 @@ let Child = () => _ref2; Child = HOC(Child); -var _ref =
+var _ref = +/*#__PURE__*/ +
; diff --git a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/function-parameter/output.js b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/function-parameter/output.js index 0e737624da..9aa0a32a48 100644 --- a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/function-parameter/output.js +++ b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/function-parameter/output.js @@ -1,5 +1,7 @@ function render(text) { - var _ref = {text}; + var _ref = + /*#__PURE__*/ + {text}; return function () { return _ref; @@ -9,7 +11,9 @@ function render(text) { var Foo2 = require("Foo"); function createComponent(text) { - var _ref2 = {text}; + var _ref2 = + /*#__PURE__*/ + {text}; return function render() { return _ref2; diff --git a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/global-reference/output.js b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/global-reference/output.js index 2bfa9cf8e6..0e89a63b8f 100644 --- a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/global-reference/output.js +++ b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/global-reference/output.js @@ -1,4 +1,6 @@ -var _ref =
; +var _ref = +/*#__PURE__*/ +
; var Foo = React.createClass({ render: function render() { diff --git a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/html-element/output.js b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/html-element/output.js index 7ec3220a51..68181887a4 100644 --- a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/html-element/output.js +++ b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/html-element/output.js @@ -1,10 +1,14 @@ -var _ref = ; +var _ref = +/*#__PURE__*/ +; function render() { return _ref; } -var _ref2 =
; +var _ref2 = +/*#__PURE__*/ +
; function render() { return _ref2; diff --git a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/inline-elements/output.js b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/inline-elements/output.js index 7ad3af57ed..3ae20e546c 100644 --- a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/inline-elements/output.js +++ b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/inline-elements/output.js @@ -2,7 +2,9 @@ var REACT_ELEMENT_TYPE; function _jsx(type, props, key, children) { if (!REACT_ELEMENT_TYPE) { REACT_ELEMENT_TYPE = typeof Symbol === "function" && Symbol.for && Symbol.for("react.element") || 0xeac7; } var defaultProps = type && type.defaultProps; var childrenLength = arguments.length - 3; if (!props && childrenLength !== 0) { props = { children: void 0 }; } if (props && defaultProps) { for (var propName in defaultProps) { if (props[propName] === void 0) { props[propName] = defaultProps[propName]; } } } else if (!props) { props = defaultProps || {}; } if (childrenLength === 1) { props.children = children; } else if (childrenLength > 1) { var childArray = new Array(childrenLength); for (var i = 0; i < childrenLength; i++) { childArray[i] = arguments[i + 3]; } props.children = childArray; } return { $$typeof: REACT_ELEMENT_TYPE, type: type, key: key === undefined ? null : '' + key, ref: null, props: props, _owner: null }; } -var _ref = _jsx("foo", {}); +var _ref = +/*#__PURE__*/ +_jsx("foo", {}); function render() { return _ref; @@ -11,7 +13,9 @@ function render() { function render() { var text = getText(); - var _ref2 = _jsx("foo", {}, void 0, text); + var _ref2 = + /*#__PURE__*/ + _jsx("foo", {}, void 0, text); return function () { return _ref2; diff --git a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/inner-declaration/output.js b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/inner-declaration/output.js index b0e2cde1ad..0175f703f8 100644 --- a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/inner-declaration/output.js +++ b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/inner-declaration/output.js @@ -1,7 +1,9 @@ function render() { var text = getText(); - var _ref = {text}; + var _ref = + /*#__PURE__*/ + {text}; return function () { return _ref; diff --git a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/member-expression-constant/output.js b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/member-expression-constant/output.js index aa7a9994ba..ff03fb77d1 100644 --- a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/member-expression-constant/output.js +++ b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/member-expression-constant/output.js @@ -1,7 +1,9 @@ function render() { this.component = "div"; - var _ref = ; + var _ref = + /*#__PURE__*/ + ; return () => _ref; } diff --git a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/member-expression-this/output.js b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/member-expression-this/output.js index 9ce3a08e74..a22f490042 100644 --- a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/member-expression-this/output.js +++ b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/member-expression-this/output.js @@ -1,10 +1,14 @@ -var _ref = Sub Component; +var _ref = +/*#__PURE__*/ +Sub Component; class Component extends React.Component { constructor(...args) { var _temp; - var _ref2 = ; + var _ref2 = + /*#__PURE__*/ + ; return _temp = super(...args), this.subComponent = () => _ref, this.render = () => _ref2, _temp; } diff --git a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/member-expression/output.js b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/member-expression/output.js index fe12eb988d..1abfd5c341 100644 --- a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/member-expression/output.js +++ b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/member-expression/output.js @@ -1,10 +1,14 @@ -var _ref = Sub Component; +var _ref = +/*#__PURE__*/ +Sub Component; const els = { subComponent: () => _ref }; -var _ref2 = ; +var _ref2 = +/*#__PURE__*/ +; class Component extends React.Component { constructor(...args) { diff --git a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/param-and-var/output.js b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/param-and-var/output.js index 599a2b9297..0060b31496 100644 --- a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/param-and-var/output.js +++ b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/param-and-var/output.js @@ -1,6 +1,8 @@ function fn(Component, obj) { var data = obj.data, - _ref = ; + _ref = + /*#__PURE__*/ + ; return () => _ref; } diff --git a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/parameter-destructure-multi/output.js b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/parameter-destructure-multi/output.js index c039c14143..8b89a78b03 100644 --- a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/parameter-destructure-multi/output.js +++ b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/parameter-destructure-multi/output.js @@ -3,7 +3,9 @@ function render(_ref) { className = _ref.className, id = _ref.id; - var _ref2 = ; + var _ref2 = + /*#__PURE__*/ + ; return () => _ref2; } diff --git a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/parameter-destructure-rest/output.js b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/parameter-destructure-rest/output.js index a00f73f6f4..c457d24158 100644 --- a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/parameter-destructure-rest/output.js +++ b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/parameter-destructure-rest/output.js @@ -4,7 +4,9 @@ function render(_ref) { id = _ref.id, props = babelHelpers.objectWithoutProperties(_ref, ["text", "className", "id"]); - var _ref2 = ; + var _ref2 = + /*#__PURE__*/ + ; // intentionally ignoring props return () => _ref2; diff --git a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/parameter-destructure/output.js b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/parameter-destructure/output.js index 272a607c98..f890296a95 100644 --- a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/parameter-destructure/output.js +++ b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/parameter-destructure/output.js @@ -1,7 +1,9 @@ function render(_ref) { let text = _ref.text; - var _ref2 = ; + var _ref2 = + /*#__PURE__*/ + ; return () => _ref2; } diff --git a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/parameter-reference/output.js b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/parameter-reference/output.js index bec3e34993..00492afc72 100644 --- a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/parameter-reference/output.js +++ b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/parameter-reference/output.js @@ -1,5 +1,7 @@ function render(text) { - var _ref =
{text}
; + var _ref = + /*#__PURE__*/ +
{text}
; return function () { return _ref; diff --git a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/pure-expression-2/output.js b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/pure-expression-2/output.js index 71dfc286ce..0e6144849e 100644 --- a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/pure-expression-2/output.js +++ b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/pure-expression-2/output.js @@ -1,5 +1,7 @@ function render(offset) { - var _ref =
; + var _ref = + /*#__PURE__*/ +
; return function () { return _ref; diff --git a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/pure-expression-3/output.js b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/pure-expression-3/output.js index 79c8b1db99..41fa9cc9d3 100644 --- a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/pure-expression-3/output.js +++ b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/pure-expression-3/output.js @@ -1,6 +1,8 @@ const OFFSET = 3; -var _ref =
; +var _ref = +/*#__PURE__*/ +
; var Foo = React.createClass({ render: function () { diff --git a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/pure-expression-whitelist-member/output.js b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/pure-expression-whitelist-member/output.js index 1452baefa3..255829f6ab 100644 --- a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/pure-expression-whitelist-member/output.js +++ b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/pure-expression-whitelist-member/output.js @@ -1,6 +1,8 @@ import Intl from 'react-intl'; -var _ref = ; diff --git a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/pure-expression-whitelist/output.js b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/pure-expression-whitelist/output.js index 9df27d0157..49e73a5663 100644 --- a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/pure-expression-whitelist/output.js +++ b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/pure-expression-whitelist/output.js @@ -1,4 +1,6 @@ -var _ref = ; diff --git a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/pure-expression/output.js b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/pure-expression/output.js index 957dc4a8a2..81c65bf5ed 100644 --- a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/pure-expression/output.js +++ b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/pure-expression/output.js @@ -1,4 +1,6 @@ -var _ref =
; +var _ref = +/*#__PURE__*/ +
; var Foo = React.createClass({ render: function () { diff --git a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/reassignment/output.js b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/reassignment/output.js index 9eb9d792f1..48b45690df 100644 --- a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/reassignment/output.js +++ b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/reassignment/output.js @@ -1,7 +1,9 @@ function render(text) { text += "yes"; - var _ref =
{text}
; + var _ref = + /*#__PURE__*/ +
{text}
; return function () { return _ref; diff --git a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/regression-node-type-export-default/output.js b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/regression-node-type-export-default/output.js index 0424a4d937..285010c075 100644 --- a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/regression-node-type-export-default/output.js +++ b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/regression-node-type-export-default/output.js @@ -7,4 +7,6 @@ class A { export default class B {} -var _ref = React.createElement(B, null); +var _ref = +/*#__PURE__*/ +React.createElement(B, null); diff --git a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/regression-node-type-export/output.js b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/regression-node-type-export/output.js index b42d9d9366..1192322d7b 100644 --- a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/regression-node-type-export/output.js +++ b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/regression-node-type-export/output.js @@ -7,4 +7,6 @@ class A { export class B {} -var _ref = React.createElement(B, null); +var _ref = +/*#__PURE__*/ +React.createElement(B, null); diff --git a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/text-children/output.js b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/text-children/output.js index 43898f7413..dc358b421f 100644 --- a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/text-children/output.js +++ b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/text-children/output.js @@ -1,4 +1,6 @@ -var _ref =
+var _ref = +/*#__PURE__*/ +
Text
; diff --git a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/var/output.js b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/var/output.js index a0bf6d783b..0c7bcb7eb2 100644 --- a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/var/output.js +++ b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/var/output.js @@ -1,6 +1,8 @@ function fn(Component) { var data = "prop", - _ref = ; + _ref = + /*#__PURE__*/ + ; return () => _ref; } diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/react/optimisation.react.constant-elements/output.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/react/optimisation.react.constant-elements/output.js index dc5c056f68..55beb4d7e3 100644 --- a/packages/babel-plugin-transform-react-jsx/test/fixtures/react/optimisation.react.constant-elements/output.js +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/react/optimisation.react.constant-elements/output.js @@ -1,4 +1,6 @@ -var _ref =
+var _ref = +/*#__PURE__*/ +
diff --git a/packages/babel-traverse/src/path/lib/hoister.js b/packages/babel-traverse/src/path/lib/hoister.js index 0f6fa03959..edd2738510 100644 --- a/packages/babel-traverse/src/path/lib/hoister.js +++ b/packages/babel-traverse/src/path/lib/hoister.js @@ -206,10 +206,11 @@ export default class PathHoister { // generate declaration and insert it to our point let uid = attachTo.scope.generateUidIdentifier("ref"); + const declarator = t.variableDeclarator(uid, this.path.node); const insertFn = this.attachAfter ? "insertAfter" : "insertBefore"; - attachTo[insertFn]([ + const [attached] = attachTo[insertFn]([ attachTo.isVariableDeclarator() ? declarator : t.variableDeclaration("var", [declarator]), @@ -223,5 +224,9 @@ export default class PathHoister { } this.path.replaceWith(t.cloneNode(uid)); + + return attachTo.isVariableDeclarator() + ? attached.get("init") + : attached.get("declarations.0.init"); } }