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:
Nicolò Ribaudo 2018-11-05 23:48:06 +01:00 committed by GitHub
parent c125b1dd74
commit 24c4901ff5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
127 changed files with 151 additions and 873 deletions

View File

@ -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})`;

View File

@ -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();

View File

@ -1,4 +1 @@
async function* agf() { a ||= 2;
await 1;
yield 2;
}

View File

@ -1 +0,0 @@
{ "plugins": ["objectRestSpread"] }

View File

@ -1 +1 @@
{ "plugins": ["asyncGenerators", "classProperties"] } { "plugins": ["classProperties"] }

View File

@ -1 +0,0 @@
{ "plugins": ["optionalCatchBinding"] }

View File

@ -1 +0,0 @@
{ "plugins": ["objectRestSpread"] }

View File

@ -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 {

View File

@ -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.

View File

@ -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;

View File

@ -1,3 +0,0 @@
{
"plugins": ["objectRestSpread"]
}

View File

@ -1 +0,0 @@
async function * f () {}

View File

@ -1,4 +0,0 @@
{
"throws": "This experimental syntax requires enabling the parser plugin: 'asyncGenerators' (1:15)",
"plugins": []
}

Some files were not shown because too many files have changed in this diff Show More