Throw when compiling spread in super() but not classes (#12722)

* Throw when compiling spread in `super()` but not classes

* Add comment
This commit is contained in:
Nicolò Ribaudo 2021-02-01 20:16:10 +01:00 committed by GitHub
parent 4f2d47500f
commit d0a965b71f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 71 additions and 1 deletions

View File

@ -97,7 +97,13 @@ export default declare((api, options) => {
const calleePath = skipTransparentExprWrappers(path.get("callee"));
if (calleePath.isSuper()) return;
if (calleePath.isSuper()) {
// NOTE: spread and classes have almost the same compat data, so this is very unlikely to happen in practice.
throw path.buildCodeFrameError(
"It's not possible to compile spread arguments in `super()` without compiling classes.\n" +
"Please add '@babel/plugin-transform-classes' to your Babel configuration.",
);
}
let contextLiteral = scope.buildUndefinedNode();

View File

@ -0,0 +1,5 @@
class A extends B {
constructor() {
super(...foo);
}
}

View File

@ -0,0 +1,7 @@
{
"plugins": [
["external-helpers", { "helperVersion": "7.100.0" }],
"transform-spread",
"transform-classes"
]
}

View File

@ -0,0 +1,14 @@
let A = /*#__PURE__*/function (_B) {
"use strict";
babelHelpers.inherits(A, _B);
var _super = babelHelpers.createSuper(A);
function A() {
babelHelpers.classCallCheck(this, A);
return _super.call.apply(_super, [this].concat(babelHelpers.toConsumableArray(foo)));
}
return A;
}(B);

View File

@ -0,0 +1,5 @@
class A extends B {
constructor() {
super(...foo);
}
}

View File

@ -0,0 +1,7 @@
{
"plugins": [
["external-helpers", { "helperVersion": "7.100.0" }],
"transform-classes",
"transform-spread"
]
}

View File

@ -0,0 +1,14 @@
let A = /*#__PURE__*/function (_B) {
"use strict";
babelHelpers.inherits(A, _B);
var _super = babelHelpers.createSuper(A);
function A() {
babelHelpers.classCallCheck(this, A);
return _super.call.apply(_super, [this].concat(babelHelpers.toConsumableArray(foo)));
}
return A;
}(B);

View File

@ -0,0 +1,5 @@
class A extends B {
constructor() {
super(...foo);
}
}

View File

@ -0,0 +1,7 @@
{
"plugins": [
["external-helpers", { "helperVersion": "7.100.0" }],
"transform-spread"
],
"throws": "It's not possible to compile spread arguments in `super()` without compiling classes."
}