From 879f69f0fba2ed74661da2b7a37f4e1a76713197 Mon Sep 17 00:00:00 2001 From: Keyan Zhang Date: Fri, 22 Jul 2016 06:50:03 -0700 Subject: [PATCH] infer class name for classes that have static properties (#3589) --- .../babel-plugin-transform-class-properties/package.json | 1 + .../babel-plugin-transform-class-properties/src/index.js | 2 ++ .../test/fixtures/general/static-infer-name/actual.js | 3 +++ .../test/fixtures/general/static-infer-name/exec.js | 7 +++++++ .../test/fixtures/general/static-infer-name/expected.js | 5 +++++ 5 files changed, 18 insertions(+) create mode 100644 packages/babel-plugin-transform-class-properties/test/fixtures/general/static-infer-name/actual.js create mode 100644 packages/babel-plugin-transform-class-properties/test/fixtures/general/static-infer-name/exec.js create mode 100644 packages/babel-plugin-transform-class-properties/test/fixtures/general/static-infer-name/expected.js diff --git a/packages/babel-plugin-transform-class-properties/package.json b/packages/babel-plugin-transform-class-properties/package.json index 478552465c..df0c8a9027 100644 --- a/packages/babel-plugin-transform-class-properties/package.json +++ b/packages/babel-plugin-transform-class-properties/package.json @@ -9,6 +9,7 @@ "babel-plugin" ], "dependencies": { + "babel-helper-function-name": "^6.8.0", "babel-plugin-syntax-class-properties": "^6.8.0", "babel-runtime": "^6.9.1" }, diff --git a/packages/babel-plugin-transform-class-properties/src/index.js b/packages/babel-plugin-transform-class-properties/src/index.js index bee037d22e..ed0feea204 100644 --- a/packages/babel-plugin-transform-class-properties/src/index.js +++ b/packages/babel-plugin-transform-class-properties/src/index.js @@ -1,5 +1,6 @@ /* eslint max-len: 0 */ // todo: define instead of assign +import nameFunction from "babel-helper-function-name"; export default function ({ types: t }) { let findBareSupers = { @@ -43,6 +44,7 @@ export default function ({ types: t }) { let ref; if (path.isClassExpression() || !path.node.id) { + nameFunction(path); ref = path.scope.generateUidIdentifier("class"); } else { // path.isClassDeclaration() && path.node.id ref = path.node.id; diff --git a/packages/babel-plugin-transform-class-properties/test/fixtures/general/static-infer-name/actual.js b/packages/babel-plugin-transform-class-properties/test/fixtures/general/static-infer-name/actual.js new file mode 100644 index 0000000000..96f03df576 --- /dev/null +++ b/packages/babel-plugin-transform-class-properties/test/fixtures/general/static-infer-name/actual.js @@ -0,0 +1,3 @@ +var Foo = class { + static num = 0; +} diff --git a/packages/babel-plugin-transform-class-properties/test/fixtures/general/static-infer-name/exec.js b/packages/babel-plugin-transform-class-properties/test/fixtures/general/static-infer-name/exec.js new file mode 100644 index 0000000000..b7ecf2f9cb --- /dev/null +++ b/packages/babel-plugin-transform-class-properties/test/fixtures/general/static-infer-name/exec.js @@ -0,0 +1,7 @@ +var Foo = class { + static num = 0; +} + +assert.equal(Foo.num, 0); +assert.equal(Foo.num = 1, 1); +assert.equal(Foo.name, "Foo"); diff --git a/packages/babel-plugin-transform-class-properties/test/fixtures/general/static-infer-name/expected.js b/packages/babel-plugin-transform-class-properties/test/fixtures/general/static-infer-name/expected.js new file mode 100644 index 0000000000..b9dfd403a2 --- /dev/null +++ b/packages/babel-plugin-transform-class-properties/test/fixtures/general/static-infer-name/expected.js @@ -0,0 +1,5 @@ +var _class, _temp; + +var Foo = (_temp = _class = function Foo() { + babelHelpers.classCallCheck(this, Foo); +}, _class.num = 0, _temp);