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:
parent
4f2d47500f
commit
d0a965b71f
@ -97,7 +97,13 @@ export default declare((api, options) => {
|
|||||||
|
|
||||||
const calleePath = skipTransparentExprWrappers(path.get("callee"));
|
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();
|
let contextLiteral = scope.buildUndefinedNode();
|
||||||
|
|
||||||
|
|||||||
@ -0,0 +1,5 @@
|
|||||||
|
class A extends B {
|
||||||
|
constructor() {
|
||||||
|
super(...foo);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"plugins": [
|
||||||
|
["external-helpers", { "helperVersion": "7.100.0" }],
|
||||||
|
"transform-spread",
|
||||||
|
"transform-classes"
|
||||||
|
]
|
||||||
|
}
|
||||||
14
packages/babel-plugin-transform-spread/test/fixtures/spread/super-classes-plugin-after/output.js
vendored
Normal file
14
packages/babel-plugin-transform-spread/test/fixtures/spread/super-classes-plugin-after/output.js
vendored
Normal 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);
|
||||||
@ -0,0 +1,5 @@
|
|||||||
|
class A extends B {
|
||||||
|
constructor() {
|
||||||
|
super(...foo);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"plugins": [
|
||||||
|
["external-helpers", { "helperVersion": "7.100.0" }],
|
||||||
|
"transform-classes",
|
||||||
|
"transform-spread"
|
||||||
|
]
|
||||||
|
}
|
||||||
@ -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);
|
||||||
5
packages/babel-plugin-transform-spread/test/fixtures/spread/super-no-classes-plugin/input.js
vendored
Normal file
5
packages/babel-plugin-transform-spread/test/fixtures/spread/super-no-classes-plugin/input.js
vendored
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
class A extends B {
|
||||||
|
constructor() {
|
||||||
|
super(...foo);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -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."
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user