From f91cfa68b93fb761c38e83ea8e335f401aec096c Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Thu, 12 Nov 2015 01:59:07 -0800 Subject: [PATCH] ignore callee supers when doing spread compilation - fixes #2775 --- .../test/fixtures/regression/2775-1/actual.js | 28 +++++++++++ .../fixtures/regression/2775-1/expected.js | 46 +++++++++++++++++++ .../test/fixtures/regression/2775/actual.js | 15 ++++++ .../test/fixtures/regression/2775/expected.js | 36 +++++++++++++++ .../test/fixtures/regression/options.json | 2 +- .../src/index.js | 5 +- 6 files changed, 130 insertions(+), 2 deletions(-) create mode 100644 packages/babel-plugin-transform-es2015-classes/test/fixtures/regression/2775-1/actual.js create mode 100644 packages/babel-plugin-transform-es2015-classes/test/fixtures/regression/2775-1/expected.js create mode 100644 packages/babel-plugin-transform-es2015-classes/test/fixtures/regression/2775/actual.js create mode 100644 packages/babel-plugin-transform-es2015-classes/test/fixtures/regression/2775/expected.js diff --git a/packages/babel-plugin-transform-es2015-classes/test/fixtures/regression/2775-1/actual.js b/packages/babel-plugin-transform-es2015-classes/test/fixtures/regression/2775-1/actual.js new file mode 100644 index 0000000000..5236cd8118 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-classes/test/fixtures/regression/2775-1/actual.js @@ -0,0 +1,28 @@ +var _ = require('underscore'), + React = require('react'); + +class Hello extends React.Component +{ + state = { + hello: 1 + }; + +/* + constructor() { + super(); + } +*/ + + render() { + var props = _.omit(this.props, 'children'); + return ( +

Hello

+ ); + } + + foo(param = 1) { + this.param = param; + } +} + +module.exports = Hello; diff --git a/packages/babel-plugin-transform-es2015-classes/test/fixtures/regression/2775-1/expected.js b/packages/babel-plugin-transform-es2015-classes/test/fixtures/regression/2775-1/expected.js new file mode 100644 index 0000000000..584e76fcf5 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-classes/test/fixtures/regression/2775-1/expected.js @@ -0,0 +1,46 @@ +'use strict'; + +var _ = require('underscore'), + React = require('react'); + +var Hello = (function (_React$Component) { + babelHelpers.inherits(Hello, _React$Component); + + function Hello() { + var _temp, _this; + + babelHelpers.classCallCheck(this, Hello); + return babelHelpers.possibleConstructorReturn(_this, (_temp = (_this = babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(Hello).apply(this, arguments)), _this), _this.state = { + hello: 1 + }, _temp)); + } + + babelHelpers.createClass(Hello, [{ + key: 'render', + + /* + constructor() { + super(); + } + */ + + value: function render() { + var props = _.omit(this.props, 'children'); + return React.createElement( + 'p', + babelHelpers.extends({ className: '1' }, props), + 'Hello' + ); + } + }, { + key: 'foo', + value: function foo() { + var param = arguments.length <= 0 || arguments[0] === undefined ? 1 : arguments[0]; + + this.param = param; + } + }]); + return Hello; +})(React.Component); + +module.exports = Hello; diff --git a/packages/babel-plugin-transform-es2015-classes/test/fixtures/regression/2775/actual.js b/packages/babel-plugin-transform-es2015-classes/test/fixtures/regression/2775/actual.js new file mode 100644 index 0000000000..d09ce3e2c5 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-classes/test/fixtures/regression/2775/actual.js @@ -0,0 +1,15 @@ +import React, {Component} from 'react'; + +export default class RandomComponent extends Component { + constructor(){ + super(); + } + + render() { + return ( +
+

Hi there!

+
+ ); + } +} diff --git a/packages/babel-plugin-transform-es2015-classes/test/fixtures/regression/2775/expected.js b/packages/babel-plugin-transform-es2015-classes/test/fixtures/regression/2775/expected.js new file mode 100644 index 0000000000..117ad3f785 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-classes/test/fixtures/regression/2775/expected.js @@ -0,0 +1,36 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = require('react'); + +var _react2 = babelHelpers.interopRequireDefault(_react); + +var RandomComponent = (function (_Component) { + babelHelpers.inherits(RandomComponent, _Component); + + function RandomComponent() { + babelHelpers.classCallCheck(this, RandomComponent); + return babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(RandomComponent).call(this)); + } + + babelHelpers.createClass(RandomComponent, [{ + key: 'render', + value: function render() { + return _react2.default.createElement( + 'div', + { className: 'sui-RandomComponent' }, + _react2.default.createElement( + 'h2', + null, + 'Hi there!' + ) + ); + } + }]); + return RandomComponent; +})(_react.Component); + +exports.default = RandomComponent; diff --git a/packages/babel-plugin-transform-es2015-classes/test/fixtures/regression/options.json b/packages/babel-plugin-transform-es2015-classes/test/fixtures/regression/options.json index d3de7c728c..8338a70998 100644 --- a/packages/babel-plugin-transform-es2015-classes/test/fixtures/regression/options.json +++ b/packages/babel-plugin-transform-es2015-classes/test/fixtures/regression/options.json @@ -1,4 +1,4 @@ { - "plugins": ["external-helpers-2"], + "plugins": ["external-helpers-2", "transform-class-properties"], "presets": ["es2015", "react"] } diff --git a/packages/babel-plugin-transform-es2015-spread/src/index.js b/packages/babel-plugin-transform-es2015-spread/src/index.js index 54dce19086..21f5f9c62f 100644 --- a/packages/babel-plugin-transform-es2015-spread/src/index.js +++ b/packages/babel-plugin-transform-es2015-spread/src/index.js @@ -65,6 +65,9 @@ export default function ({ types: t }) { let args = node.arguments; if (!hasSpread(args)) return; + let calleePath = path.get("callee"); + if (calleePath.isSuper()) return; + let contextLiteral = t.identifier("undefined"); node.arguments = []; @@ -85,7 +88,7 @@ export default function ({ types: t }) { let callee = node.callee; - if (path.get("callee").isMemberExpression()) { + if (calleePath.isMemberExpression()) { let temp = scope.maybeGenerateMemoised(callee.object); if (temp) { callee.object = t.assignmentExpression("=", temp, callee.object);