Remove Babylon plugins for features already merged to the ECMAScript spec (#8448)
These are now enabled by default: - objectRestSpread (2018) - asyncGenerators (2018) - optionalCatchBInding (2019) - jsonStrings (2019) TODO (after this commit): - [ ] Deprecate the `@babel/plugin-syntax-*` packages. - [ ] Deprecate the `@babel/plugin-proposal-*` packages. - [ ] Create the `@babel/plugin-transform-*` packages.
This commit is contained in:
parent
c125b1dd74
commit
24c4901ff5
@ -1,16 +1,6 @@
|
|||||||
// @flow
|
// @flow
|
||||||
|
|
||||||
const pluginNameMap = {
|
const pluginNameMap = {
|
||||||
asyncGenerators: {
|
|
||||||
syntax: {
|
|
||||||
name: "@babel/plugin-syntax-async-generators",
|
|
||||||
url: "https://git.io/vb4SY",
|
|
||||||
},
|
|
||||||
transform: {
|
|
||||||
name: "@babel/plugin-proposal-async-generator-functions",
|
|
||||||
url: "https://git.io/vb4yp",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
classProperties: {
|
classProperties: {
|
||||||
syntax: {
|
syntax: {
|
||||||
name: "@babel/plugin-syntax-class-properties",
|
name: "@babel/plugin-syntax-class-properties",
|
||||||
@ -143,26 +133,6 @@ const pluginNameMap = {
|
|||||||
url: "https://git.io/vb4yS",
|
url: "https://git.io/vb4yS",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
objectRestSpread: {
|
|
||||||
syntax: {
|
|
||||||
name: "@babel/plugin-syntax-object-rest-spread",
|
|
||||||
url: "https://git.io/vb4y5",
|
|
||||||
},
|
|
||||||
transform: {
|
|
||||||
name: "@babel/plugin-proposal-object-rest-spread",
|
|
||||||
url: "https://git.io/vb4Ss",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
optionalCatchBinding: {
|
|
||||||
syntax: {
|
|
||||||
name: "@babel/plugin-syntax-optional-catch-binding",
|
|
||||||
url: "https://git.io/vb4Sn",
|
|
||||||
},
|
|
||||||
transform: {
|
|
||||||
name: "@babel/plugin-proposal-optional-catch-binding",
|
|
||||||
url: "https://git.io/vb4SI",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
optionalChaining: {
|
optionalChaining: {
|
||||||
syntax: {
|
syntax: {
|
||||||
name: "@babel/plugin-syntax-optional-chaining",
|
name: "@babel/plugin-syntax-optional-chaining",
|
||||||
@ -203,6 +173,41 @@ const pluginNameMap = {
|
|||||||
url: "https://git.io/vb4Sm",
|
url: "https://git.io/vb4Sm",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// TODO: This plugins are now supported by default by @babel/parser: they can
|
||||||
|
// be removed from this list. Although removing them isn't a breaking change,
|
||||||
|
// it's better to keep a nice error message for users using older versions of
|
||||||
|
// the parser. They can be removed in Babel 8.
|
||||||
|
asyncGenerators: {
|
||||||
|
syntax: {
|
||||||
|
name: "@babel/plugin-syntax-async-generators",
|
||||||
|
url: "https://git.io/vb4SY",
|
||||||
|
},
|
||||||
|
transform: {
|
||||||
|
name: "@babel/plugin-proposal-async-generator-functions",
|
||||||
|
url: "https://git.io/vb4yp",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
objectRestSpread: {
|
||||||
|
syntax: {
|
||||||
|
name: "@babel/plugin-syntax-object-rest-spread",
|
||||||
|
url: "https://git.io/vb4y5",
|
||||||
|
},
|
||||||
|
transform: {
|
||||||
|
name: "@babel/plugin-proposal-object-rest-spread",
|
||||||
|
url: "https://git.io/vb4Ss",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
optionalCatchBinding: {
|
||||||
|
syntax: {
|
||||||
|
name: "@babel/plugin-syntax-optional-catch-binding",
|
||||||
|
url: "https://git.io/vb4Sn",
|
||||||
|
},
|
||||||
|
transform: {
|
||||||
|
name: "@babel/plugin-proposal-optional-catch-binding",
|
||||||
|
url: "https://git.io/vb4SI",
|
||||||
|
},
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
const getNameURLCombination = ({ name, url }) => `${name} (${url})`;
|
const getNameURLCombination = ({ name, url }) => `${name} (${url})`;
|
||||||
|
|||||||
@ -769,10 +769,10 @@ describe("api", function() {
|
|||||||
options,
|
options,
|
||||||
function(err) {
|
function(err) {
|
||||||
expect(err.message).toMatch(
|
expect(err.message).toMatch(
|
||||||
"Support for the experimental syntax 'asyncGenerators' isn't currently enabled (1:15):",
|
"Support for the experimental syntax 'logicalAssignment' isn't currently enabled (1:3):",
|
||||||
);
|
);
|
||||||
expect(err.message).toMatch(
|
expect(err.message).toMatch(
|
||||||
"Add @babel/plugin-proposal-async-generator-functions (https://git.io/vb4yp) to the " +
|
"Add @babel/plugin-proposal-logical-assignment-operators (https://git.io/vAlRe) to the " +
|
||||||
"'plugins' section of your Babel config to enable transformation.",
|
"'plugins' section of your Babel config to enable transformation.",
|
||||||
);
|
);
|
||||||
done();
|
done();
|
||||||
|
|||||||
@ -1,4 +1 @@
|
|||||||
async function* agf() {
|
a ||= 2;
|
||||||
await 1;
|
|
||||||
yield 2;
|
|
||||||
}
|
|
||||||
|
|||||||
@ -1 +0,0 @@
|
|||||||
{ "plugins": ["objectRestSpread"] }
|
|
||||||
@ -1 +1 @@
|
|||||||
{ "plugins": ["asyncGenerators", "classProperties"] }
|
{ "plugins": ["classProperties"] }
|
||||||
|
|||||||
@ -1 +0,0 @@
|
|||||||
{ "plugins": ["optionalCatchBinding"] }
|
|
||||||
@ -1 +0,0 @@
|
|||||||
{ "plugins": ["objectRestSpread"] }
|
|
||||||
@ -1322,7 +1322,6 @@ export default class ExpressionParser extends LValParser {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (this.match(tt.ellipsis)) {
|
if (this.match(tt.ellipsis)) {
|
||||||
this.expectPlugin("objectRestSpread");
|
|
||||||
prop = this.parseSpread(isPattern ? { start: 0 } : undefined);
|
prop = this.parseSpread(isPattern ? { start: 0 } : undefined);
|
||||||
if (isPattern) {
|
if (isPattern) {
|
||||||
this.toAssignable(prop, true, "object pattern");
|
this.toAssignable(prop, true, "object pattern");
|
||||||
@ -1382,11 +1381,7 @@ export default class ExpressionParser extends LValParser {
|
|||||||
prop.computed = false;
|
prop.computed = false;
|
||||||
} else {
|
} else {
|
||||||
isAsync = true;
|
isAsync = true;
|
||||||
if (this.match(tt.star)) {
|
isGenerator = this.eat(tt.star);
|
||||||
this.expectPlugin("asyncGenerators");
|
|
||||||
this.next();
|
|
||||||
isGenerator = true;
|
|
||||||
}
|
|
||||||
this.parsePropertyName(prop);
|
this.parsePropertyName(prop);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@ -391,7 +391,6 @@ export default class StatementParser extends ExpressionParser {
|
|||||||
|
|
||||||
let forAwait = false;
|
let forAwait = false;
|
||||||
if (this.state.inAsync && this.isContextual("await")) {
|
if (this.state.inAsync && this.isContextual("await")) {
|
||||||
this.expectPlugin("asyncGenerators");
|
|
||||||
forAwait = true;
|
forAwait = true;
|
||||||
this.next();
|
this.next();
|
||||||
}
|
}
|
||||||
@ -556,7 +555,6 @@ export default class StatementParser extends ExpressionParser {
|
|||||||
this.checkLVal(clause.param, true, clashes, "catch clause");
|
this.checkLVal(clause.param, true, clashes, "catch clause");
|
||||||
this.expect(tt.parenR);
|
this.expect(tt.parenR);
|
||||||
} else {
|
} else {
|
||||||
this.expectPlugin("optionalCatchBinding");
|
|
||||||
clause.param = null;
|
clause.param = null;
|
||||||
}
|
}
|
||||||
clause.body = this.parseBlock();
|
clause.body = this.parseBlock();
|
||||||
@ -853,9 +851,6 @@ export default class StatementParser extends ExpressionParser {
|
|||||||
this.initFunction(node, isAsync);
|
this.initFunction(node, isAsync);
|
||||||
|
|
||||||
if (this.match(tt.star)) {
|
if (this.match(tt.star)) {
|
||||||
if (node.async) {
|
|
||||||
this.expectPlugin("asyncGenerators");
|
|
||||||
}
|
|
||||||
node.generator = true;
|
node.generator = true;
|
||||||
this.next();
|
this.next();
|
||||||
}
|
}
|
||||||
@ -1153,11 +1148,7 @@ export default class StatementParser extends ExpressionParser {
|
|||||||
}
|
}
|
||||||
} else if (isSimple && key.name === "async" && !this.isLineTerminator()) {
|
} else if (isSimple && key.name === "async" && !this.isLineTerminator()) {
|
||||||
// an async method
|
// an async method
|
||||||
const isGenerator = this.match(tt.star);
|
const isGenerator = this.eat(tt.star);
|
||||||
if (isGenerator) {
|
|
||||||
this.expectPlugin("asyncGenerators");
|
|
||||||
this.next();
|
|
||||||
}
|
|
||||||
|
|
||||||
method.kind = "method";
|
method.kind = "method";
|
||||||
// The so-called parsed name would have been "async": get the real name.
|
// The so-called parsed name would have been "async": get the real name.
|
||||||
|
|||||||
@ -1070,7 +1070,6 @@ export default class Tokenizer extends LocationParser {
|
|||||||
readString(quote: number): void {
|
readString(quote: number): void {
|
||||||
let out = "",
|
let out = "",
|
||||||
chunkStart = ++this.state.pos;
|
chunkStart = ++this.state.pos;
|
||||||
const hasJsonStrings = this.hasPlugin("jsonStrings");
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
if (this.state.pos >= this.input.length) {
|
if (this.state.pos >= this.input.length) {
|
||||||
this.raise(this.state.start, "Unterminated string constant");
|
this.raise(this.state.start, "Unterminated string constant");
|
||||||
@ -1083,8 +1082,8 @@ export default class Tokenizer extends LocationParser {
|
|||||||
out += this.readEscapedChar(false);
|
out += this.readEscapedChar(false);
|
||||||
chunkStart = this.state.pos;
|
chunkStart = this.state.pos;
|
||||||
} else if (
|
} else if (
|
||||||
hasJsonStrings &&
|
ch === charCodes.lineSeparator ||
|
||||||
(ch === charCodes.lineSeparator || ch === charCodes.paragraphSeparator)
|
ch === charCodes.paragraphSeparator
|
||||||
) {
|
) {
|
||||||
++this.state.pos;
|
++this.state.pos;
|
||||||
++this.state.curLine;
|
++this.state.curLine;
|
||||||
|
|||||||
@ -1,3 +0,0 @@
|
|||||||
{
|
|
||||||
"plugins": ["objectRestSpread"]
|
|
||||||
}
|
|
||||||
@ -1 +0,0 @@
|
|||||||
async function * f () {}
|
|
||||||
@ -1,4 +0,0 @@
|
|||||||
{
|
|
||||||
"throws": "This experimental syntax requires enabling the parser plugin: 'asyncGenerators' (1:15)",
|
|
||||||
"plugins": []
|
|
||||||
}
|
|
||||||
@ -1 +0,0 @@
|
|||||||
({...x})
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user