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) {