From 3570ba7c281a736ef5ca82d6d0c5158afedc77d4 Mon Sep 17 00:00:00 2001 From: Samuel Reed Date: Fri, 3 Mar 2017 16:56:42 -0600 Subject: [PATCH] Fix PathHoister error attaching after export declarations. Fixes #5369. See also https://github.com/babel/babel/blob/4ee385e96cac4b2c0e851932f1b48550b7523dfc/packages/babel-plugin-transform-class-properties/src/index.js#L167 --- .../regression-node-type-export-default/actual.js | 7 +++++++ .../regression-node-type-export-default/expected.js | 9 +++++++++ .../regression-node-type-export-default/options.json | 6 ++++++ .../regression-node-type-export/actual.js | 7 +++++++ .../regression-node-type-export/expected.js | 9 +++++++++ .../regression-node-type-export/options.json | 6 ++++++ packages/babel-traverse/src/path/lib/hoister.js | 6 ++++++ 7 files changed, 50 insertions(+) create mode 100644 packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/regression-node-type-export-default/actual.js create mode 100644 packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/regression-node-type-export-default/expected.js create mode 100644 packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/regression-node-type-export-default/options.json create mode 100644 packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/regression-node-type-export/actual.js create mode 100644 packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/regression-node-type-export/expected.js create mode 100644 packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/regression-node-type-export/options.json diff --git a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/regression-node-type-export-default/actual.js b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/regression-node-type-export-default/actual.js new file mode 100644 index 0000000000..2f431e188e --- /dev/null +++ b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/regression-node-type-export-default/actual.js @@ -0,0 +1,7 @@ +class A { + render() { + return + } +} + +export default class B {} diff --git a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/regression-node-type-export-default/expected.js b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/regression-node-type-export-default/expected.js new file mode 100644 index 0000000000..03f5171114 --- /dev/null +++ b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/regression-node-type-export-default/expected.js @@ -0,0 +1,9 @@ +class A { + render() { + return _ref; + } +} + +export default class B {} + +var _ref = React.createElement(B, null); diff --git a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/regression-node-type-export-default/options.json b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/regression-node-type-export-default/options.json new file mode 100644 index 0000000000..60d815dd9a --- /dev/null +++ b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/regression-node-type-export-default/options.json @@ -0,0 +1,6 @@ +{ + "plugins": [ + "transform-react-jsx", + "transform-react-constant-elements" + ] +} diff --git a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/regression-node-type-export/actual.js b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/regression-node-type-export/actual.js new file mode 100644 index 0000000000..cbd3496529 --- /dev/null +++ b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/regression-node-type-export/actual.js @@ -0,0 +1,7 @@ +class A { + render() { + return + } +} + +export class B {} diff --git a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/regression-node-type-export/expected.js b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/regression-node-type-export/expected.js new file mode 100644 index 0000000000..f292e104aa --- /dev/null +++ b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/regression-node-type-export/expected.js @@ -0,0 +1,9 @@ +class A { + render() { + return _ref; + } +} + +export class B {} + +var _ref = React.createElement(B, null); diff --git a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/regression-node-type-export/options.json b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/regression-node-type-export/options.json new file mode 100644 index 0000000000..60d815dd9a --- /dev/null +++ b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/regression-node-type-export/options.json @@ -0,0 +1,6 @@ +{ + "plugins": [ + "transform-react-jsx", + "transform-react-constant-elements" + ] +} diff --git a/packages/babel-traverse/src/path/lib/hoister.js b/packages/babel-traverse/src/path/lib/hoister.js index 69154bbc2d..93b5cba40f 100644 --- a/packages/babel-traverse/src/path/lib/hoister.js +++ b/packages/babel-traverse/src/path/lib/hoister.js @@ -117,6 +117,12 @@ export default class PathHoister { } } + // We can't insert before/after a child of an export declaration, so move up + // to the declaration itself. + if (path.parentPath.isExportDeclaration()) { + path = path.parentPath; + } + return path; }