Skip to content

Commit

Permalink
[babel 8] Materialize ESTree's classFeatures option (#13752)
Browse files Browse the repository at this point in the history
* [babel 8] Enable ESTree classFeatures by default in @babel/parser

* Fix `visitorKeys`

* Update tests
  • Loading branch information
nicolo-ribaudo committed Sep 22, 2021
1 parent 3d1481f commit 2e2d202
Show file tree
Hide file tree
Showing 36 changed files with 447 additions and 15 deletions.
2 changes: 1 addition & 1 deletion eslint/babel-eslint-parser/src/worker/ast-info.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ exports.getVisitorKeys = function getVisitorKeys() {
ESLINT_VISITOR_KEYS.MethodDefinition,
),
Property: ["decorators"].concat(ESLINT_VISITOR_KEYS.Property),
PropertyDefinition: ["decorators"].concat(
PropertyDefinition: ["decorators", "typeAnnotation"].concat(
ESLINT_VISITOR_KEYS.PropertyDefinition,
),
};
Expand Down
34 changes: 23 additions & 11 deletions packages/babel-parser/src/plugins/estree.js
Original file line number Diff line number Diff line change
Expand Up @@ -183,8 +183,10 @@ export default (superClass: Class<Parser>): Class<Parser> =>

parsePrivateName(): any {
const node = super.parsePrivateName();
if (!this.getPluginOption("estree", "classFeatures")) {
return node;
if (!process.env.BABEL_8_BREAKING) {
if (!this.getPluginOption("estree", "classFeatures")) {
return node;
}
}
return this.convertPrivateNameToPrivateIdentifier(node);
}
Expand All @@ -201,15 +203,19 @@ export default (superClass: Class<Parser>): Class<Parser> =>
}

isPrivateName(node: N.Node): boolean {
if (!this.getPluginOption("estree", "classFeatures")) {
return super.isPrivateName(node);
if (!process.env.BABEL_8_BREAKING) {
if (!this.getPluginOption("estree", "classFeatures")) {
return super.isPrivateName(node);
}
}
return node.type === "PrivateIdentifier";
}

getPrivateNameSV(node: N.Node): string {
if (!this.getPluginOption("estree", "classFeatures")) {
return super.getPrivateNameSV(node);
if (!process.env.BABEL_8_BREAKING) {
if (!this.getPluginOption("estree", "classFeatures")) {
return super.getPrivateNameSV(node);
}
}
return node.name;
}
Expand Down Expand Up @@ -265,18 +271,24 @@ export default (superClass: Class<Parser>): Class<Parser> =>
parseClassProperty(...args: [N.ClassProperty]): any {
const propertyNode = (super.parseClassProperty(...args): any);
if (this.getPluginOption("estree", "classFeatures")) {
propertyNode.type = "PropertyDefinition";
if (!process.env.BABEL_8_BREAKING) {
if (!this.getPluginOption("estree", "classFeatures")) {
return (propertyNode: N.EstreePropertyDefinition);
}
}
propertyNode.type = "PropertyDefinition";
return (propertyNode: N.EstreePropertyDefinition);
}
parseClassPrivateProperty(...args: [N.ClassPrivateProperty]): any {
const propertyNode = (super.parseClassPrivateProperty(...args): any);
if (this.getPluginOption("estree", "classFeatures")) {
propertyNode.type = "PropertyDefinition";
propertyNode.computed = false;
if (!process.env.BABEL_8_BREAKING) {
if (!this.getPluginOption("estree", "classFeatures")) {
return (propertyNode: N.EstreePropertyDefinition);
}
}
propertyNode.type = "PropertyDefinition";
propertyNode.computed = false;
return (propertyNode: N.EstreePropertyDefinition);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
{
"BABEL_8_BREAKING": false,
"plugins": ["flow", "jsx", ["estree", { "classFeatures": true }]]
}
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
{
"BABEL_8_BREAKING": true,
"plugins": ["flow", "jsx", "estree"]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
{
"type": "File",
"start":0,"end":70,"loc":{"start":{"line":1,"column":0},"end":{"line":4,"column":1}},
"program": {
"type": "Program",
"start":0,"end":70,"loc":{"start":{"line":1,"column":0},"end":{"line":4,"column":1}},
"sourceType": "script",
"interpreter": null,
"body": [
{
"type": "ClassDeclaration",
"start":0,"end":70,"loc":{"start":{"line":1,"column":0},"end":{"line":4,"column":1}},
"id": {
"type": "Identifier",
"start":6,"end":7,"loc":{"start":{"line":1,"column":6},"end":{"line":1,"column":7},"identifierName":"A"},
"name": "A"
},
"superClass": null,
"body": {
"type": "ClassBody",
"start":8,"end":70,"loc":{"start":{"line":1,"column":8},"end":{"line":4,"column":1}},
"body": [
{
"type": "MethodDefinition",
"start":12,"end":35,"loc":{"start":{"line":2,"column":2},"end":{"line":2,"column":25}},
"static": false,
"key": {
"type": "PrivateIdentifier",
"start":12,"end":16,"loc":{"start":{"line":2,"column":2},"end":{"line":2,"column":6}},
"name": "foo"
},
"kind": "method",
"value": {
"type": "FunctionExpression",
"start":16,"end":35,"loc":{"start":{"line":2,"column":6},"end":{"line":2,"column":25}},
"id": null,
"generator": false,
"async": false,
"expression": false,
"params": [
{
"type": "Identifier",
"start":17,"end":20,"loc":{"start":{"line":2,"column":7},"end":{"line":2,"column":10},"identifierName":"arg"},
"name": "arg"
},
{
"type": "RestElement",
"start":22,"end":31,"loc":{"start":{"line":2,"column":12},"end":{"line":2,"column":21}},
"argument": {
"type": "Identifier",
"start":25,"end":31,"loc":{"start":{"line":2,"column":15},"end":{"line":2,"column":21},"identifierName":"others"},
"name": "others"
}
}
],
"body": {
"type": "BlockStatement",
"start":33,"end":35,"loc":{"start":{"line":2,"column":23},"end":{"line":2,"column":25}},
"body": []
}
},
"computed": false
},
{
"type": "MethodDefinition",
"start":38,"end":68,"loc":{"start":{"line":3,"column":2},"end":{"line":3,"column":32}},
"static": true,
"key": {
"type": "PrivateIdentifier",
"start":45,"end":49,"loc":{"start":{"line":3,"column":9},"end":{"line":3,"column":13}},
"name": "bar"
},
"kind": "method",
"value": {
"type": "FunctionExpression",
"start":49,"end":68,"loc":{"start":{"line":3,"column":13},"end":{"line":3,"column":32}},
"id": null,
"generator": false,
"async": false,
"expression": false,
"params": [
{
"type": "Identifier",
"start":50,"end":53,"loc":{"start":{"line":3,"column":14},"end":{"line":3,"column":17},"identifierName":"arg"},
"name": "arg"
},
{
"type": "RestElement",
"start":55,"end":64,"loc":{"start":{"line":3,"column":19},"end":{"line":3,"column":28}},
"argument": {
"type": "Identifier",
"start":58,"end":64,"loc":{"start":{"line":3,"column":22},"end":{"line":3,"column":28},"identifierName":"others"},
"name": "others"
}
}
],
"body": {
"type": "BlockStatement",
"start":66,"end":68,"loc":{"start":{"line":3,"column":30},"end":{"line":3,"column":32}},
"body": []
}
},
"computed": false
}
]
}
}
]
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
class A {
#foo(arg, ...others) {}
static #bar(arg, ...others) {}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"BABEL_8_BREAKING": false,
"plugins": ["flow", "jsx", "estree"]
}
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
{
"BABEL_8_BREAKING": false,
"plugins": [["estree", { "classFeatures": true }]]
}
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
{
"BABEL_8_BREAKING": true,
"plugins": ["estree"]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
class A {
#foo = "bar";
static #bar = foo;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"BABEL_8_BREAKING": false,
"plugins": ["estree"]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
{
"type": "File",
"start":0,"end":48,"loc":{"start":{"line":1,"column":0},"end":{"line":4,"column":1}},
"program": {
"type": "Program",
"start":0,"end":48,"loc":{"start":{"line":1,"column":0},"end":{"line":4,"column":1}},
"sourceType": "script",
"interpreter": null,
"body": [
{
"type": "ClassDeclaration",
"start":0,"end":48,"loc":{"start":{"line":1,"column":0},"end":{"line":4,"column":1}},
"id": {
"type": "Identifier",
"start":6,"end":7,"loc":{"start":{"line":1,"column":6},"end":{"line":1,"column":7},"identifierName":"A"},
"name": "A"
},
"superClass": null,
"body": {
"type": "ClassBody",
"start":8,"end":48,"loc":{"start":{"line":1,"column":8},"end":{"line":4,"column":1}},
"body": [
{
"type": "ClassPrivateProperty",
"start":12,"end":25,"loc":{"start":{"line":2,"column":2},"end":{"line":2,"column":15}},
"static": false,
"key": {
"type": "PrivateName",
"start":12,"end":16,"loc":{"start":{"line":2,"column":2},"end":{"line":2,"column":6}},
"id": {
"type": "Identifier",
"start":13,"end":16,"loc":{"start":{"line":2,"column":3},"end":{"line":2,"column":6},"identifierName":"foo"},
"name": "foo"
}
},
"value": {
"type": "Literal",
"start":19,"end":24,"loc":{"start":{"line":2,"column":9},"end":{"line":2,"column":14}},
"value": "bar",
"raw": "\"bar\""
}
},
{
"type": "ClassPrivateProperty",
"start":28,"end":46,"loc":{"start":{"line":3,"column":2},"end":{"line":3,"column":20}},
"static": true,
"key": {
"type": "PrivateName",
"start":35,"end":39,"loc":{"start":{"line":3,"column":9},"end":{"line":3,"column":13}},
"id": {
"type": "Identifier",
"start":36,"end":39,"loc":{"start":{"line":3,"column":10},"end":{"line":3,"column":13},"identifierName":"bar"},
"name": "bar"
}
},
"value": {
"type": "Identifier",
"start":42,"end":45,"loc":{"start":{"line":3,"column":16},"end":{"line":3,"column":19},"identifierName":"foo"},
"name": "foo"
}
}
]
}
}
]
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
{
"BABEL_8_BREAKING": false,
"plugins": [["estree", { "classFeatures": true }]]
}
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
{
"BABEL_8_BREAKING": true,
"plugins": ["estree"]
}

0 comments on commit 2e2d202

Please sign in to comment.