From c12c4a5c39f3ce59cfcc54a2140eea8f2efd1936 Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Wed, 8 Apr 2015 08:52:53 -0700 Subject: [PATCH] don't touch function name containers when remapping modules - fixes #1160 --- .../transformation/helpers/name-method.js | 1 + src/babel/transformation/modules/_default.js | 4 ++ .../spec.function-name/modules-2/actual.js | 8 ++++ .../spec.function-name/modules-2/expected.js | 37 ++++++++++++++++++ .../spec.function-name/modules-3/actual.js | 7 ++++ .../spec.function-name/modules-3/expected.js | 39 +++++++++++++++++++ .../spec.function-name/modules/actual.js | 9 +++++ .../spec.function-name/modules/expected.js | 31 +++++++++++++++ .../spec.function-name/options.json | 3 ++ 9 files changed, 139 insertions(+) create mode 100644 test/core/fixtures/transformation/spec.function-name/modules-2/actual.js create mode 100644 test/core/fixtures/transformation/spec.function-name/modules-2/expected.js create mode 100644 test/core/fixtures/transformation/spec.function-name/modules-3/actual.js create mode 100644 test/core/fixtures/transformation/spec.function-name/modules-3/expected.js create mode 100644 test/core/fixtures/transformation/spec.function-name/modules/actual.js create mode 100644 test/core/fixtures/transformation/spec.function-name/modules/expected.js create mode 100644 test/core/fixtures/transformation/spec.function-name/options.json diff --git a/src/babel/transformation/helpers/name-method.js b/src/babel/transformation/helpers/name-method.js index 5839b0df1b..6c0b78dca7 100644 --- a/src/babel/transformation/helpers/name-method.js +++ b/src/babel/transformation/helpers/name-method.js @@ -27,6 +27,7 @@ var wrap = function (state, method, id, scope) { FUNCTION_ID: id, FUNCTION_KEY: scope.generateUidIdentifier(id.name) }); + template.callee._skipModulesRemap = true; // shim in dummy params to retain function arity, if you try to read the // source then you'll get the original since it's proxied so it's all good diff --git a/src/babel/transformation/modules/_default.js b/src/babel/transformation/modules/_default.js index 3a295d3e07..41157dc192 100644 --- a/src/babel/transformation/modules/_default.js +++ b/src/babel/transformation/modules/_default.js @@ -46,6 +46,10 @@ var remapVisitor = { } } + if (node._skipModulesRemap) { + return this.skip(); + } + if (t.isAssignmentExpression(node) && !node._ignoreModulesRemap) { var exported = formatter.getExport(node.left, scope); if (exported) { diff --git a/test/core/fixtures/transformation/spec.function-name/modules-2/actual.js b/test/core/fixtures/transformation/spec.function-name/modules-2/actual.js new file mode 100644 index 0000000000..9bbb69597e --- /dev/null +++ b/test/core/fixtures/transformation/spec.function-name/modules-2/actual.js @@ -0,0 +1,8 @@ +import last from "lodash/array/last" + +export default class Container { + last(key) { + if (!this.has(key)) return + return last(this.tokens.get(key)) + } +} diff --git a/test/core/fixtures/transformation/spec.function-name/modules-2/expected.js b/test/core/fixtures/transformation/spec.function-name/modules-2/expected.js new file mode 100644 index 0000000000..a30628860c --- /dev/null +++ b/test/core/fixtures/transformation/spec.function-name/modules-2/expected.js @@ -0,0 +1,37 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _last2 = require("lodash/array/last"); + +var _last3 = babelHelpers.interopRequireWildcard(_last2); + +var Container = (function () { + function Container() { + babelHelpers.classCallCheck(this, Container); + } + + babelHelpers.createClass(Container, [{ + key: "last", + value: (function (_last) { + function last(_x) { + return _last.apply(this, arguments); + } + + last.toString = function () { + return _last.toString(); + }; + + return last; + })(function (key) { + if (!this.has(key)) return; + return _last3["default"](this.tokens.get(key)); + }) + }]); + return Container; +})(); + +exports["default"] = Container; +module.exports = exports["default"]; diff --git a/test/core/fixtures/transformation/spec.function-name/modules-3/actual.js b/test/core/fixtures/transformation/spec.function-name/modules-3/actual.js new file mode 100644 index 0000000000..c3fd70926c --- /dev/null +++ b/test/core/fixtures/transformation/spec.function-name/modules-3/actual.js @@ -0,0 +1,7 @@ +import {getForm} from "./store" + +export default class Login extends React.Component { + getForm() { + return getForm().toJS() + } +} diff --git a/test/core/fixtures/transformation/spec.function-name/modules-3/expected.js b/test/core/fixtures/transformation/spec.function-name/modules-3/expected.js new file mode 100644 index 0000000000..aa4c1f6821 --- /dev/null +++ b/test/core/fixtures/transformation/spec.function-name/modules-3/expected.js @@ -0,0 +1,39 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _getForm2 = require("./store"); + +var Login = (function (_React$Component) { + function Login() { + babelHelpers.classCallCheck(this, Login); + + if (_React$Component != null) { + _React$Component.apply(this, arguments); + } + } + + babelHelpers.inherits(Login, _React$Component); + babelHelpers.createClass(Login, [{ + key: "getForm", + value: (function (_getForm) { + function getForm() { + return _getForm.apply(this, arguments); + } + + getForm.toString = function () { + return _getForm.toString(); + }; + + return getForm; + })(function () { + return _getForm2.getForm().toJS(); + }) + }]); + return Login; +})(React.Component); + +exports["default"] = Login; +module.exports = exports["default"]; diff --git a/test/core/fixtures/transformation/spec.function-name/modules/actual.js b/test/core/fixtures/transformation/spec.function-name/modules/actual.js new file mode 100644 index 0000000000..ee350f6e25 --- /dev/null +++ b/test/core/fixtures/transformation/spec.function-name/modules/actual.js @@ -0,0 +1,9 @@ +import events from "events"; + +class Template { + events() { + return events; + } +} + +console.log(new Template().events()); diff --git a/test/core/fixtures/transformation/spec.function-name/modules/expected.js b/test/core/fixtures/transformation/spec.function-name/modules/expected.js new file mode 100644 index 0000000000..e300cd5a3f --- /dev/null +++ b/test/core/fixtures/transformation/spec.function-name/modules/expected.js @@ -0,0 +1,31 @@ +"use strict"; + +var _events2 = require("events"); + +var _events3 = babelHelpers.interopRequireWildcard(_events2); + +var Template = (function () { + function Template() { + babelHelpers.classCallCheck(this, Template); + } + + babelHelpers.createClass(Template, [{ + key: "events", + value: (function (_events) { + function events() { + return _events.apply(this, arguments); + } + + events.toString = function () { + return _events.toString(); + }; + + return events; + })(function () { + return _events3["default"]; + }) + }]); + return Template; +})(); + +console.log(new Template().events()); diff --git a/test/core/fixtures/transformation/spec.function-name/options.json b/test/core/fixtures/transformation/spec.function-name/options.json new file mode 100644 index 0000000000..7d6e6cda1c --- /dev/null +++ b/test/core/fixtures/transformation/spec.function-name/options.json @@ -0,0 +1,3 @@ +{ + "externalHelpers": true +}