From 1864522b31f0afc66fe6be54ae578c2dc530923a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Ribaudo?= Date: Mon, 14 Dec 2020 19:43:08 +0100 Subject: [PATCH] Fix test error --- .../src/config/validation/options.js | 2 +- .../src/fields.js | 19 ++++--------------- .../src/index.js | 1 + .../static-super-loose/input.js | 9 +++++++++ .../static-super-loose/options.json | 11 +++++++++++ .../static-super-loose/output.js | 10 ++++++++++ .../static-super-loose/stderr.txt | 5 +++++ .../static-super/output.js | 4 ++-- .../super/output.js | 2 +- .../super/output.js | 2 +- .../this/output.js | 2 +- 11 files changed, 46 insertions(+), 21 deletions(-) create mode 100644 packages/babel-plugin-proposal-class-properties/test/fixtures/assumption-setPublicClassFields/static-super-loose/input.js create mode 100644 packages/babel-plugin-proposal-class-properties/test/fixtures/assumption-setPublicClassFields/static-super-loose/options.json create mode 100644 packages/babel-plugin-proposal-class-properties/test/fixtures/assumption-setPublicClassFields/static-super-loose/output.js create mode 100644 packages/babel-plugin-proposal-class-properties/test/fixtures/assumption-setPublicClassFields/static-super-loose/stderr.txt diff --git a/packages/babel-core/src/config/validation/options.js b/packages/babel-core/src/config/validation/options.js index 491c04e74bfe..288a718463f8 100644 --- a/packages/babel-core/src/config/validation/options.js +++ b/packages/babel-core/src/config/validation/options.js @@ -334,8 +334,8 @@ export type NestingPath = RootPath | OverridesPath | EnvPath; export const assumptionsNames = new Set([ "ignoreFunctionLength", "ignoreToPrimitiveHint", - "noDocumentAll", "mutableTemplateObject", + "noDocumentAll", "privateFieldsAsProperties", "setClassMethods", "setComputedProperties", diff --git a/packages/babel-helper-create-class-features-plugin/src/fields.js b/packages/babel-helper-create-class-features-plugin/src/fields.js index 42da78221698..713f6db16040 100644 --- a/packages/babel-helper-create-class-features-plugin/src/fields.js +++ b/packages/babel-helper-create-class-features-plugin/src/fields.js @@ -636,18 +636,12 @@ const thisContextVisitor = traverse.visitors.merge([ environmentVisitor, ]); -function replaceThisContext( - path, - ref, - superRef, - file, - privateFieldsAsProperties, -) { +function replaceThisContext(path, ref, superRef, file, loose) { const state = { classRef: ref, needsClassRef: false }; const replacer = new ReplaceSupers({ methodPath: path, - isLoose: privateFieldsAsProperties, + isLoose: loose, superRef, file, getObjectRef() { @@ -672,6 +666,7 @@ export function buildFieldsInitNodes( state, setPublicClassFields, privateFieldsAsProperties, + loose, ) { const staticNodes = []; const instanceNodes = []; @@ -688,13 +683,7 @@ export function buildFieldsInitNodes( const isMethod = !isField; if (isStatic || (isMethod && isPrivate)) { - const replaced = replaceThisContext( - prop, - ref, - superRef, - state, - privateFieldsAsProperties, - ); + const replaced = replaceThisContext(prop, ref, superRef, state, loose); needsClassRef = needsClassRef || replaced; } diff --git a/packages/babel-helper-create-class-features-plugin/src/index.js b/packages/babel-helper-create-class-features-plugin/src/index.js index 86a2d8143a44..83b03faf3ba9 100644 --- a/packages/babel-helper-create-class-features-plugin/src/index.js +++ b/packages/babel-helper-create-class-features-plugin/src/index.js @@ -213,6 +213,7 @@ export function createClassFeaturePlugin({ state, setPublicClassFields ?? loose, privateFieldsAsProperties ?? loose, + loose, )); } diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/assumption-setPublicClassFields/static-super-loose/input.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/assumption-setPublicClassFields/static-super-loose/input.js new file mode 100644 index 000000000000..9f649ab392bc --- /dev/null +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/assumption-setPublicClassFields/static-super-loose/input.js @@ -0,0 +1,9 @@ +class A { + static prop = 1; +} + +class B extends A { + static prop = 2; + static propA = super.prop; + static getPropA = () => super.prop; +} diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/assumption-setPublicClassFields/static-super-loose/options.json b/packages/babel-plugin-proposal-class-properties/test/fixtures/assumption-setPublicClassFields/static-super-loose/options.json new file mode 100644 index 000000000000..755819446903 --- /dev/null +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/assumption-setPublicClassFields/static-super-loose/options.json @@ -0,0 +1,11 @@ +{ + "validateLogs": true, + "plugins": [ + ["external-helpers", { "helperVersion": "7.100.0" }], + ["proposal-class-properties", { "loose": true }], + "syntax-class-properties" + ], + "assumptions": { + "setPublicClassFields": true + } +} diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/assumption-setPublicClassFields/static-super-loose/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/assumption-setPublicClassFields/static-super-loose/output.js new file mode 100644 index 000000000000..269e97147e8a --- /dev/null +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/assumption-setPublicClassFields/static-super-loose/output.js @@ -0,0 +1,10 @@ +class A {} + +A.prop = 1; + +class B extends A {} + +B.prop = 2; +B.propA = A.prop; + +B.getPropA = () => A.prop; diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/assumption-setPublicClassFields/static-super-loose/stderr.txt b/packages/babel-plugin-proposal-class-properties/test/fixtures/assumption-setPublicClassFields/static-super-loose/stderr.txt new file mode 100644 index 000000000000..2d6c3d02acff --- /dev/null +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/assumption-setPublicClassFields/static-super-loose/stderr.txt @@ -0,0 +1,5 @@ +[proposal-class-properties]: You are using the "loose: true" option and you are explicitly setting a value for the "setPublicClassFields" assumption. The "loose" option can cause incompatibilities with the other class features plugins, so it's recommended that you replace it with the following top-level option: + "assumptions": { + "setPublicClassFields": true, + "privateFieldsAsProperties": true + } diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/assumption-setPublicClassFields/static-super/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/assumption-setPublicClassFields/static-super/output.js index 269e97147e8a..2d4da1550419 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/assumption-setPublicClassFields/static-super/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/assumption-setPublicClassFields/static-super/output.js @@ -5,6 +5,6 @@ A.prop = 1; class B extends A {} B.prop = 2; -B.propA = A.prop; +B.propA = babelHelpers.get(babelHelpers.getPrototypeOf(B), "prop", B); -B.getPropA = () => A.prop; +B.getPropA = () => babelHelpers.get(babelHelpers.getPrototypeOf(B), "prop", B); diff --git a/packages/babel-plugin-proposal-private-methods/test/fixtures/private-method-privateFieldsAsProperties/super/output.js b/packages/babel-plugin-proposal-private-methods/test/fixtures/private-method-privateFieldsAsProperties/super/output.js index 41de8ee02a4d..1a0d87d98e0c 100644 --- a/packages/babel-plugin-proposal-private-methods/test/fixtures/private-method-privateFieldsAsProperties/super/output.js +++ b/packages/babel-plugin-proposal-private-methods/test/fixtures/private-method-privateFieldsAsProperties/super/output.js @@ -26,5 +26,5 @@ class Sub extends Base { } var _privateMethod2 = function _privateMethod2() { - return Base.prototype.superMethod.call(this); + return babelHelpers.get(babelHelpers.getPrototypeOf(Sub.prototype), "superMethod", this).call(this); }; diff --git a/packages/babel-plugin-proposal-private-methods/test/fixtures/private-static-method-privateFieldsAsProperties/super/output.js b/packages/babel-plugin-proposal-private-methods/test/fixtures/private-static-method-privateFieldsAsProperties/super/output.js index 7c93e1917f76..ae589469caf6 100644 --- a/packages/babel-plugin-proposal-private-methods/test/fixtures/private-static-method-privateFieldsAsProperties/super/output.js +++ b/packages/babel-plugin-proposal-private-methods/test/fixtures/private-static-method-privateFieldsAsProperties/super/output.js @@ -19,7 +19,7 @@ class Sub extends Base { } var _subStaticPrivateMethod2 = function _subStaticPrivateMethod2() { - return Base.basePublicStaticMethod.call(this); + return babelHelpers.get(babelHelpers.getPrototypeOf(Sub), "basePublicStaticMethod", this).call(this); }; Object.defineProperty(Sub, _subStaticPrivateMethod, { diff --git a/packages/babel-plugin-proposal-private-methods/test/fixtures/private-static-method-privateFieldsAsProperties/this/output.js b/packages/babel-plugin-proposal-private-methods/test/fixtures/private-static-method-privateFieldsAsProperties/this/output.js index b6f6426d4d10..0d39c5bf1282 100644 --- a/packages/babel-plugin-proposal-private-methods/test/fixtures/private-static-method-privateFieldsAsProperties/this/output.js +++ b/packages/babel-plugin-proposal-private-methods/test/fixtures/private-static-method-privateFieldsAsProperties/this/output.js @@ -25,7 +25,7 @@ var _getB2 = function _getB2() { }; var _getA2 = function _getA2() { - return A.a; + return babelHelpers.get(babelHelpers.getPrototypeOf(B), "a", this); }; Object.defineProperty(B, _getA, {