From f859830e54aa2dd0ce787aca5665d69cc91856a5 Mon Sep 17 00:00:00 2001 From: Dan Harper Date: Tue, 20 Sep 2016 02:58:37 +0100 Subject: [PATCH] Fix: export default arrows with function naming (#4524) --- .../export-default-arrow-renaming-2/actual.js | 3 +++ .../export-default-arrow-renaming-2/expected.js | 13 +++++++++++++ .../export-default-arrow-renaming-2/options.json | 3 +++ .../export-default-arrow-renaming-3/actual.js | 4 ++++ .../export-default-arrow-renaming-3/expected.js | 12 ++++++++++++ .../export-default-arrow-renaming-3/options.json | 3 +++ .../export-default-arrow-renaming-es3/actual.js | 3 +++ .../expected.js | 13 +++++++++++++ .../options.json | 7 +++++++ .../export-default-arrow-renaming/actual.js | 3 +++ .../export-default-arrow-renaming/expected.js | 13 +++++++++++++ .../export-default-arrow-renaming/options.json | 3 +++ packages/babel-traverse/src/scope/lib/renamer.js | 16 +++++++++------- 13 files changed, 89 insertions(+), 7 deletions(-) create mode 100644 packages/babel-plugin-transform-es2015-function-name/test/fixtures/function-name/export-default-arrow-renaming-2/actual.js create mode 100644 packages/babel-plugin-transform-es2015-function-name/test/fixtures/function-name/export-default-arrow-renaming-2/expected.js create mode 100644 packages/babel-plugin-transform-es2015-function-name/test/fixtures/function-name/export-default-arrow-renaming-2/options.json create mode 100644 packages/babel-plugin-transform-es2015-function-name/test/fixtures/function-name/export-default-arrow-renaming-3/actual.js create mode 100644 packages/babel-plugin-transform-es2015-function-name/test/fixtures/function-name/export-default-arrow-renaming-3/expected.js create mode 100644 packages/babel-plugin-transform-es2015-function-name/test/fixtures/function-name/export-default-arrow-renaming-3/options.json create mode 100644 packages/babel-plugin-transform-es2015-function-name/test/fixtures/function-name/export-default-arrow-renaming-es3/actual.js create mode 100644 packages/babel-plugin-transform-es2015-function-name/test/fixtures/function-name/export-default-arrow-renaming-es3/expected.js create mode 100644 packages/babel-plugin-transform-es2015-function-name/test/fixtures/function-name/export-default-arrow-renaming-es3/options.json create mode 100644 packages/babel-plugin-transform-es2015-function-name/test/fixtures/function-name/export-default-arrow-renaming/actual.js create mode 100644 packages/babel-plugin-transform-es2015-function-name/test/fixtures/function-name/export-default-arrow-renaming/expected.js create mode 100644 packages/babel-plugin-transform-es2015-function-name/test/fixtures/function-name/export-default-arrow-renaming/options.json diff --git a/packages/babel-plugin-transform-es2015-function-name/test/fixtures/function-name/export-default-arrow-renaming-2/actual.js b/packages/babel-plugin-transform-es2015-function-name/test/fixtures/function-name/export-default-arrow-renaming-2/actual.js new file mode 100644 index 0000000000..b940f5e8e1 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-function-name/test/fixtures/function-name/export-default-arrow-renaming-2/actual.js @@ -0,0 +1,3 @@ +export default () => ({ + x: ({x}) => {} +}) diff --git a/packages/babel-plugin-transform-es2015-function-name/test/fixtures/function-name/export-default-arrow-renaming-2/expected.js b/packages/babel-plugin-transform-es2015-function-name/test/fixtures/function-name/export-default-arrow-renaming-2/expected.js new file mode 100644 index 0000000000..e86a353cbc --- /dev/null +++ b/packages/babel-plugin-transform-es2015-function-name/test/fixtures/function-name/export-default-arrow-renaming-2/expected.js @@ -0,0 +1,13 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +exports.default = function () { + return { + x: function x(_ref) { + var _x = _ref.x; + } + }; +}; diff --git a/packages/babel-plugin-transform-es2015-function-name/test/fixtures/function-name/export-default-arrow-renaming-2/options.json b/packages/babel-plugin-transform-es2015-function-name/test/fixtures/function-name/export-default-arrow-renaming-2/options.json new file mode 100644 index 0000000000..c13c5f627f --- /dev/null +++ b/packages/babel-plugin-transform-es2015-function-name/test/fixtures/function-name/export-default-arrow-renaming-2/options.json @@ -0,0 +1,3 @@ +{ + "presets": ["es2015"] +} diff --git a/packages/babel-plugin-transform-es2015-function-name/test/fixtures/function-name/export-default-arrow-renaming-3/actual.js b/packages/babel-plugin-transform-es2015-function-name/test/fixtures/function-name/export-default-arrow-renaming-3/actual.js new file mode 100644 index 0000000000..76e1e3dbc1 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-function-name/test/fixtures/function-name/export-default-arrow-renaming-3/actual.js @@ -0,0 +1,4 @@ +export default ({ onClick }) => ( +
onClick()} /> +) + diff --git a/packages/babel-plugin-transform-es2015-function-name/test/fixtures/function-name/export-default-arrow-renaming-3/expected.js b/packages/babel-plugin-transform-es2015-function-name/test/fixtures/function-name/export-default-arrow-renaming-3/expected.js new file mode 100644 index 0000000000..420c4af75a --- /dev/null +++ b/packages/babel-plugin-transform-es2015-function-name/test/fixtures/function-name/export-default-arrow-renaming-3/expected.js @@ -0,0 +1,12 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +exports.default = function (_ref) { + var _onClick = _ref.onClick; + return React.createElement("div", { onClick: function onClick() { + return _onClick(); + } }); +}; diff --git a/packages/babel-plugin-transform-es2015-function-name/test/fixtures/function-name/export-default-arrow-renaming-3/options.json b/packages/babel-plugin-transform-es2015-function-name/test/fixtures/function-name/export-default-arrow-renaming-3/options.json new file mode 100644 index 0000000000..86c445f545 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-function-name/test/fixtures/function-name/export-default-arrow-renaming-3/options.json @@ -0,0 +1,3 @@ +{ + "presets": ["es2015", "react"] +} diff --git a/packages/babel-plugin-transform-es2015-function-name/test/fixtures/function-name/export-default-arrow-renaming-es3/actual.js b/packages/babel-plugin-transform-es2015-function-name/test/fixtures/function-name/export-default-arrow-renaming-es3/actual.js new file mode 100644 index 0000000000..090d8fd2d8 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-function-name/test/fixtures/function-name/export-default-arrow-renaming-es3/actual.js @@ -0,0 +1,3 @@ +export default (a) => { + return { a() { return a } }; +} diff --git a/packages/babel-plugin-transform-es2015-function-name/test/fixtures/function-name/export-default-arrow-renaming-es3/expected.js b/packages/babel-plugin-transform-es2015-function-name/test/fixtures/function-name/export-default-arrow-renaming-es3/expected.js new file mode 100644 index 0000000000..16905a167a --- /dev/null +++ b/packages/babel-plugin-transform-es2015-function-name/test/fixtures/function-name/export-default-arrow-renaming-es3/expected.js @@ -0,0 +1,13 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +exports["default"] = function (_a) { + return { + a: function a() { + return _a; + } + }; +}; diff --git a/packages/babel-plugin-transform-es2015-function-name/test/fixtures/function-name/export-default-arrow-renaming-es3/options.json b/packages/babel-plugin-transform-es2015-function-name/test/fixtures/function-name/export-default-arrow-renaming-es3/options.json new file mode 100644 index 0000000000..dee41f00da --- /dev/null +++ b/packages/babel-plugin-transform-es2015-function-name/test/fixtures/function-name/export-default-arrow-renaming-es3/options.json @@ -0,0 +1,7 @@ +{ + "presets": ["es2015"], + "plugins": [ + "transform-es3-member-expression-literals", + "transform-es3-property-literals" + ] +} diff --git a/packages/babel-plugin-transform-es2015-function-name/test/fixtures/function-name/export-default-arrow-renaming/actual.js b/packages/babel-plugin-transform-es2015-function-name/test/fixtures/function-name/export-default-arrow-renaming/actual.js new file mode 100644 index 0000000000..090d8fd2d8 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-function-name/test/fixtures/function-name/export-default-arrow-renaming/actual.js @@ -0,0 +1,3 @@ +export default (a) => { + return { a() { return a } }; +} diff --git a/packages/babel-plugin-transform-es2015-function-name/test/fixtures/function-name/export-default-arrow-renaming/expected.js b/packages/babel-plugin-transform-es2015-function-name/test/fixtures/function-name/export-default-arrow-renaming/expected.js new file mode 100644 index 0000000000..fce6f22d2d --- /dev/null +++ b/packages/babel-plugin-transform-es2015-function-name/test/fixtures/function-name/export-default-arrow-renaming/expected.js @@ -0,0 +1,13 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +exports.default = function (_a) { + return { + a: function a() { + return _a; + } + }; +}; diff --git a/packages/babel-plugin-transform-es2015-function-name/test/fixtures/function-name/export-default-arrow-renaming/options.json b/packages/babel-plugin-transform-es2015-function-name/test/fixtures/function-name/export-default-arrow-renaming/options.json new file mode 100644 index 0000000000..bb8bbed06f --- /dev/null +++ b/packages/babel-plugin-transform-es2015-function-name/test/fixtures/function-name/export-default-arrow-renaming/options.json @@ -0,0 +1,3 @@ +{ + "plugins": ["transform-es2015-function-name", "transform-es2015-shorthand-properties", "transform-es2015-arrow-functions", "transform-es2015-modules-commonjs"] +} diff --git a/packages/babel-traverse/src/scope/lib/renamer.js b/packages/babel-traverse/src/scope/lib/renamer.js index bf89b3f10f..50da4ea40d 100644 --- a/packages/babel-traverse/src/scope/lib/renamer.js +++ b/packages/babel-traverse/src/scope/lib/renamer.js @@ -57,15 +57,17 @@ export default class Renamer { specifiers.push(t.exportSpecifier(t.identifier(localName), t.identifier(exportedName))); } - let aliasDeclar = t.exportNamedDeclaration(null, specifiers); + if (specifiers.length) { + let aliasDeclar = t.exportNamedDeclaration(null, specifiers); - // hoist to the top if it's a function - if (parentDeclar.isFunctionDeclaration()) { - aliasDeclar._blockHoist = 3; + // hoist to the top if it's a function + if (parentDeclar.isFunctionDeclaration()) { + aliasDeclar._blockHoist = 3; + } + + exportDeclar.insertAfter(aliasDeclar); + exportDeclar.replaceWith(parentDeclar.node); } - - exportDeclar.insertAfter(aliasDeclar); - exportDeclar.replaceWith(parentDeclar.node); } maybeConvertFromClassFunctionDeclaration(path) {