Skip to content

Commit

Permalink
Make React.__spread warn
Browse files Browse the repository at this point in the history
  • Loading branch information
zpao committed Apr 8, 2016
1 parent f02d87b commit fc1cfb6
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 13 deletions.
34 changes: 23 additions & 11 deletions scripts/babel/transform-object-assign-require.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,20 @@
module.exports = function autoImporter(babel) {
const t = babel.types;

function getAssignIdent(path, file, state) {
if (!state.id) {
state.id = path.scope.generateUidIdentifier('assign');
path.scope.getProgramParent().push({
id: state.id,
init: t.callExpression(
t.identifier('require'),
[t.stringLiteral('object-assign')]
),
});
}
return state.id;
}

return {
pre: function() {
// map from module to generated identifier
Expand All @@ -22,17 +36,15 @@ module.exports = function autoImporter(babel) {
CallExpression: function(path, file) {
if (path.get('callee').matchesPattern('Object.assign')) {
// generate identifier and require if it hasn't been already
if (!this.id) {
this.id = path.scope.generateUidIdentifier('assign');
path.scope.getProgramParent().push({
id: this.id,
init: t.callExpression(
t.identifier('require'),
[t.stringLiteral('object-assign')]
),
});
}
path.node.callee = this.id;
var id = getAssignIdent(path, file, this);
path.node.callee = id;
}
},

MemberExpression: function(path, file) {
if (path.matchesPattern('Object.assign')) {
var id = getAssignIdent(path, file, this);
path.replaceWith(id);
}
},
},
Expand Down
22 changes: 20 additions & 2 deletions src/isomorphic/React.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ var ReactPropTypes = require('ReactPropTypes');
var ReactVersion = require('ReactVersion');

var onlyChild = require('onlyChild');
var warning = require('warning');

var createElement = ReactElement.createElement;
var createFactory = ReactElement.createFactory;
Expand All @@ -32,6 +33,23 @@ if (__DEV__) {
cloneElement = ReactElementValidator.cloneElement;
}

var __spread = Object.assign;

if (__DEV__) {
var warned = false;
__spread = function() {
warning(
warned,
'React.__spread is deprecated and should not be used. Use ' +
'Object.assign directly or another helper function with similar ' +
'semantics. You may be seeing this warning due to your compiler. ' +
'See https://fb.me/react-spread-deprecation for more details.'
);
warned = true;
return Object.assign.apply(null, arguments);
};
}

var React = {

// Modern
Expand Down Expand Up @@ -66,8 +84,8 @@ var React = {

version: ReactVersion,

// Hook for JSX spread, don't use this for anything else.
__spread: Object.assign,
// Deprecated hook for JSX spread, don't use this for anything.
__spread: __spread,
};

module.exports = React;

0 comments on commit fc1cfb6

Please sign in to comment.