From 8ca99b9f0938daa6a7d91df81e612a1a24b09d98 Mon Sep 17 00:00:00 2001 From: Corey Farrell Date: Mon, 15 Apr 2019 23:05:16 -0400 Subject: [PATCH] Fix: PrivateName Identifier should not be isReferenced. (#9861) --- .../private-loose/canonical/output.js | 6 ++-- .../test/fixtures/private/canonical/output.js | 6 ++-- .../class-properties/live-rewrite/input.mjs | 14 ++++++++ .../class-properties/live-rewrite/output.js | 35 +++++++++++++++++++ .../src/validators/isReferenced.js | 7 ++++ 5 files changed, 62 insertions(+), 6 deletions(-) create mode 100644 packages/babel-plugin-transform-modules-commonjs/test/fixtures/class-properties/live-rewrite/input.mjs create mode 100644 packages/babel-plugin-transform-modules-commonjs/test/fixtures/class-properties/live-rewrite/output.js diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/private-loose/canonical/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/private-loose/canonical/output.js index 899fff2341..47386a7981 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/private-loose/canonical/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/private-loose/canonical/output.js @@ -3,7 +3,7 @@ var Point = function () { "use strict"; - function Point(_x2 = 0, _y2 = 0) { + function Point(x = 0, y = 0) { babelHelpers.classCallCheck(this, Point); Object.defineProperty(this, _x, { writable: true, @@ -13,8 +13,8 @@ function () { writable: true, value: void 0 }); - babelHelpers.classPrivateFieldLooseBase(this, _x)[_x] = +_x2; - babelHelpers.classPrivateFieldLooseBase(this, _y)[_y] = +_y2; + babelHelpers.classPrivateFieldLooseBase(this, _x)[_x] = +x; + babelHelpers.classPrivateFieldLooseBase(this, _y)[_y] = +y; } babelHelpers.createClass(Point, [{ diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/private/canonical/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/private/canonical/output.js index 4c9d083cef..b9c9ab8067 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/private/canonical/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/private/canonical/output.js @@ -3,7 +3,7 @@ var Point = function () { "use strict"; - function Point(_x2 = 0, _y2 = 0) { + function Point(x = 0, y = 0) { babelHelpers.classCallCheck(this, Point); _x.set(this, { @@ -16,8 +16,8 @@ function () { value: void 0 }); - babelHelpers.classPrivateFieldSet(this, _x, +_x2); - babelHelpers.classPrivateFieldSet(this, _y, +_y2); + babelHelpers.classPrivateFieldSet(this, _x, +x); + babelHelpers.classPrivateFieldSet(this, _y, +y); } babelHelpers.createClass(Point, [{ diff --git a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/class-properties/live-rewrite/input.mjs b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/class-properties/live-rewrite/input.mjs new file mode 100644 index 0000000000..020955cd32 --- /dev/null +++ b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/class-properties/live-rewrite/input.mjs @@ -0,0 +1,14 @@ +import {test1, test2, test3, test4, test5, test6, test7, test8, test9} from 'anywhere'; + +class Example { + #test1 = test1; + test2 = test2; + #test3() { return test3; } + test4() { return test4; } + get #test5() { return test5; } + get test6() { return test6; } + + #test7 = this.#test1; + #test8() { return this.#test3(); } + get #test9() { return this.#test5(); } +} diff --git a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/class-properties/live-rewrite/output.js b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/class-properties/live-rewrite/output.js new file mode 100644 index 0000000000..6a8704aee8 --- /dev/null +++ b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/class-properties/live-rewrite/output.js @@ -0,0 +1,35 @@ +"use strict"; + +var _anywhere = require("anywhere"); + +class Example { + #test1 = _anywhere.test1; + test2 = _anywhere.test2; + + #test3() { + return _anywhere.test3; + } + + test4() { + return _anywhere.test4; + } + + get #test5() { + return _anywhere.test5; + } + + get test6() { + return _anywhere.test6; + } + + #test7 = this.#test1; + + #test8() { + return this.#test3(); + } + + get #test9() { + return this.#test5(); + } + +} diff --git a/packages/babel-types/src/validators/isReferenced.js b/packages/babel-types/src/validators/isReferenced.js index f83c7956c4..699b291a01 100644 --- a/packages/babel-types/src/validators/isReferenced.js +++ b/packages/babel-types/src/validators/isReferenced.js @@ -38,6 +38,13 @@ export default function isReferenced( } return parent.local === node; + // no: class { #NODE; } + // no: class { get #NODE() {} } + // no: class { #NODE() {} } + // no: class { fn() { return this.#NODE; } } + case "PrivateName": + return false; + // yes: { [NODE]: "" } // no: { NODE: "" } // depends: { NODE }