From 2d7fb9af419c09d81ff676aefe28ffea8b50d8fb Mon Sep 17 00:00:00 2001 From: Jhen-Jie Hong Date: Sat, 14 May 2016 05:45:15 +0800 Subject: [PATCH] Class properties: Add path.ensureBlock for ArrowFunctionExpression (#3486) * Class properties: Add path.ensureBlock for ArrowFunctionExpression * Class properties: Add test case for non-block arrow function --- .../src/index.js | 10 ++++++++++ .../general/non-block-arrow-func/actual.js | 11 ++++++++++ .../general/non-block-arrow-func/expected.js | 20 +++++++++++++++++++ 3 files changed, 41 insertions(+) create mode 100644 packages/babel-plugin-transform-class-properties/test/fixtures/general/non-block-arrow-func/actual.js create mode 100644 packages/babel-plugin-transform-class-properties/test/fixtures/general/non-block-arrow-func/expected.js diff --git a/packages/babel-plugin-transform-class-properties/src/index.js b/packages/babel-plugin-transform-class-properties/src/index.js index 49f14e188b..bee037d22e 100644 --- a/packages/babel-plugin-transform-class-properties/src/index.js +++ b/packages/babel-plugin-transform-class-properties/src/index.js @@ -145,6 +145,16 @@ export default function ({ types: t }) { } path.insertAfter(nodes); + }, + ArrowFunctionExpression(path) { + let classExp = path.get("body"); + if (!classExp.isClassExpression()) return; + + let body = classExp.get("body"); + let members = body.get("body"); + if (members.some((member) => member.isClassProperty())) { + path.ensureBlock(); + } } } }; diff --git a/packages/babel-plugin-transform-class-properties/test/fixtures/general/non-block-arrow-func/actual.js b/packages/babel-plugin-transform-class-properties/test/fixtures/general/non-block-arrow-func/actual.js new file mode 100644 index 0000000000..4b67e0e158 --- /dev/null +++ b/packages/babel-plugin-transform-class-properties/test/fixtures/general/non-block-arrow-func/actual.js @@ -0,0 +1,11 @@ +export default param => + class App { + static props = { + prop1: 'prop1', + prop2: 'prop2' + } + + getParam() { + return param; + } + } diff --git a/packages/babel-plugin-transform-class-properties/test/fixtures/general/non-block-arrow-func/expected.js b/packages/babel-plugin-transform-class-properties/test/fixtures/general/non-block-arrow-func/expected.js new file mode 100644 index 0000000000..a1e381f8a8 --- /dev/null +++ b/packages/babel-plugin-transform-class-properties/test/fixtures/general/non-block-arrow-func/expected.js @@ -0,0 +1,20 @@ +export default (param => { + var _class, _temp; + + return _temp = _class = function () { + function App() { + babelHelpers.classCallCheck(this, App); + } + + babelHelpers.createClass(App, [{ + key: 'getParam', + value: function getParam() { + return param; + } + }]); + return App; + }(), _class.props = { + prop1: 'prop1', + prop2: 'prop2' + }, _temp; +})