Don't enable class features by default in estree (#12867)

* Don't enable class features by default in `estree`

* Flow

* Reduce breakage
This commit is contained in:
Nicolò Ribaudo 2021-02-23 11:30:01 +01:00 committed by GitHub
parent a2114d452c
commit c30039029a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
17 changed files with 351 additions and 17 deletions

View File

@ -31,7 +31,10 @@ export function normalizeBabelParseConfig(options) {
allowReturnOutsideFunction: true, allowReturnOutsideFunction: true,
allowSuperOutsideMethod: true, allowSuperOutsideMethod: true,
...options.babelOptions.parserOpts, ...options.babelOptions.parserOpts,
plugins: ["estree", ...(options.babelOptions.parserOpts?.plugins ?? [])], plugins: [
["estree", { classFeatures: false }],
...(options.babelOptions.parserOpts?.plugins ?? []),
],
ranges: true, ranges: true,
tokens: true, tokens: true,
}, },

View File

@ -196,7 +196,10 @@ export default (superClass: Class<Parser>): Class<Parser> =>
parseMaybePrivateName(...args: [boolean]): any { parseMaybePrivateName(...args: [boolean]): any {
const node = super.parseMaybePrivateName(...args); const node = super.parseMaybePrivateName(...args);
if (node.type === "PrivateName") { if (
node.type === "PrivateName" &&
this.getPluginOption("estree", "classFeatures")
) {
return this.convertPrivateNameToPrivateIdentifier(node); return this.convertPrivateNameToPrivateIdentifier(node);
} }
return node; return node;
@ -214,10 +217,16 @@ export default (superClass: Class<Parser>): Class<Parser> =>
} }
isPrivateName(node: N.Node): boolean { isPrivateName(node: N.Node): boolean {
if (!this.getPluginOption("estree", "classFeatures")) {
return super.isPrivateName(node);
}
return node.type === "PrivateIdentifier"; return node.type === "PrivateIdentifier";
} }
getPrivateNameSV(node: N.Node): string { getPrivateNameSV(node: N.Node): string {
if (!this.getPluginOption("estree", "classFeatures")) {
return super.getPrivateNameSV(node);
}
return node.name; return node.name;
} }
@ -277,14 +286,18 @@ export default (superClass: Class<Parser>): Class<Parser> =>
parseClassProperty(...args: [N.ClassProperty]): any { parseClassProperty(...args: [N.ClassProperty]): any {
const propertyNode = (super.parseClassProperty(...args): any); const propertyNode = (super.parseClassProperty(...args): any);
if (this.getPluginOption("estree", "classFeatures")) {
propertyNode.type = "PropertyDefinition"; propertyNode.type = "PropertyDefinition";
}
return (propertyNode: N.EstreePropertyDefinition); return (propertyNode: N.EstreePropertyDefinition);
} }
parseClassPrivateProperty(...args: [N.ClassPrivateProperty]): any { parseClassPrivateProperty(...args: [N.ClassPrivateProperty]): any {
const propertyNode = (super.parseClassPrivateProperty(...args): any); const propertyNode = (super.parseClassPrivateProperty(...args): any);
if (this.getPluginOption("estree", "classFeatures")) {
propertyNode.type = "PropertyDefinition"; propertyNode.type = "PropertyDefinition";
propertyNode.computed = false; propertyNode.computed = false;
}
return (propertyNode: N.EstreePropertyDefinition); return (propertyNode: N.EstreePropertyDefinition);
} }

View File

@ -1,3 +1,8 @@
{ {
"plugins": ["flow", "jsx", "estree", "classPrivateMethods"] "plugins": [
"flow",
"jsx",
["estree", { "classFeatures": true }],
"classPrivateMethods"
]
} }

View File

@ -0,0 +1,4 @@
class A {
#foo(arg, ...others) {}
static #bar(arg, ...others) {}
}

View File

@ -0,0 +1,3 @@
{
"plugins": ["flow", "jsx", "estree", "classPrivateMethods"]
}

View File

@ -0,0 +1,118 @@
{
"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": "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"
}
},
"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": "PrivateName",
"start":45,"end":49,"loc":{"start":{"line":3,"column":9},"end":{"line":3,"column":13}},
"id": {
"type": "Identifier",
"start":46,"end":49,"loc":{"start":{"line":3,"column":10},"end":{"line":3,"column":13},"identifierName":"bar"},
"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
}
]
}
}
]
}
}

View File

@ -1,3 +1,3 @@
{ {
"plugins": ["estree", "classPrivateProperties"] "plugins": [["estree", { "classFeatures": true }], "classPrivateProperties"]
} }

View File

@ -1,3 +1,7 @@
{ {
"plugins": ["flow", "estree", "classPrivateProperties"] "plugins": [
"flow",
["estree", { "classFeatures": true }],
"classPrivateProperties"
]
} }

View File

@ -0,0 +1,4 @@
class A {
#foo = "bar";
static #bar = foo;
}

View File

@ -0,0 +1,3 @@
{
"plugins": [["estree", { "classFeatures": true }], "classPrivateProperties"]
}

View File

@ -0,0 +1,61 @@
{
"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": "PropertyDefinition",
"start":12,"end":25,"loc":{"start":{"line":2,"column":2},"end":{"line":2,"column":15}},
"static": false,
"key": {
"type": "PrivateIdentifier",
"start":12,"end":16,"loc":{"start":{"line":2,"column":2},"end":{"line":2,"column":6}},
"name": "foo"
},
"value": {
"type": "Literal",
"start":19,"end":24,"loc":{"start":{"line":2,"column":9},"end":{"line":2,"column":14}},
"value": "bar",
"raw": "\"bar\""
},
"computed": false
},
{
"type": "PropertyDefinition",
"start":28,"end":46,"loc":{"start":{"line":3,"column":2},"end":{"line":3,"column":20}},
"static": true,
"key": {
"type": "PrivateIdentifier",
"start":35,"end":39,"loc":{"start":{"line":3,"column":9},"end":{"line":3,"column":13}},
"name": "bar"
},
"value": {
"type": "Identifier",
"start":42,"end":45,"loc":{"start":{"line":3,"column":16},"end":{"line":3,"column":19},"identifierName":"foo"},
"name": "foo"
},
"computed": false
}
]
}
}
]
}
}

View File

@ -1,3 +1,7 @@
{ {
"plugins": ["typescript", "estree", "classPrivateProperties"] "plugins": [
"typescript",
["estree", { "classFeatures": true }],
"classPrivateProperties"
]
} }

View File

@ -1,3 +1,3 @@
{ {
"plugins": ["estree", "classProperties"] "plugins": [["estree", { "classFeatures": true }], "classProperties"]
} }

View File

@ -0,0 +1,6 @@
class A {
foo = "bar";
[bar] = foo;
static "qux" = "quux";
static [quux] = "qux";
}

View File

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

View File

@ -0,0 +1,96 @@
{
"type": "File",
"start":0,"end":91,"loc":{"start":{"line":1,"column":0},"end":{"line":6,"column":1}},
"program": {
"type": "Program",
"start":0,"end":91,"loc":{"start":{"line":1,"column":0},"end":{"line":6,"column":1}},
"sourceType": "script",
"interpreter": null,
"body": [
{
"type": "ClassDeclaration",
"start":0,"end":91,"loc":{"start":{"line":1,"column":0},"end":{"line":6,"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":91,"loc":{"start":{"line":1,"column":8},"end":{"line":6,"column":1}},
"body": [
{
"type": "ClassProperty",
"start":12,"end":24,"loc":{"start":{"line":2,"column":2},"end":{"line":2,"column":14}},
"static": false,
"key": {
"type": "Identifier",
"start":12,"end":15,"loc":{"start":{"line":2,"column":2},"end":{"line":2,"column":5},"identifierName":"foo"},
"name": "foo"
},
"computed": false,
"value": {
"type": "Literal",
"start":18,"end":23,"loc":{"start":{"line":2,"column":8},"end":{"line":2,"column":13}},
"value": "bar",
"raw": "\"bar\""
}
},
{
"type": "ClassProperty",
"start":27,"end":39,"loc":{"start":{"line":3,"column":2},"end":{"line":3,"column":14}},
"static": false,
"computed": true,
"key": {
"type": "Identifier",
"start":28,"end":31,"loc":{"start":{"line":3,"column":3},"end":{"line":3,"column":6},"identifierName":"bar"},
"name": "bar"
},
"value": {
"type": "Identifier",
"start":35,"end":38,"loc":{"start":{"line":3,"column":10},"end":{"line":3,"column":13},"identifierName":"foo"},
"name": "foo"
}
},
{
"type": "ClassProperty",
"start":42,"end":64,"loc":{"start":{"line":4,"column":2},"end":{"line":4,"column":24}},
"static": true,
"key": {
"type": "Literal",
"start":49,"end":54,"loc":{"start":{"line":4,"column":9},"end":{"line":4,"column":14}},
"value": "qux",
"raw": "\"qux\""
},
"computed": false,
"value": {
"type": "Literal",
"start":57,"end":63,"loc":{"start":{"line":4,"column":17},"end":{"line":4,"column":23}},
"value": "quux",
"raw": "\"quux\""
}
},
{
"type": "ClassProperty",
"start":67,"end":89,"loc":{"start":{"line":5,"column":2},"end":{"line":5,"column":24}},
"static": true,
"computed": true,
"key": {
"type": "Identifier",
"start":75,"end":79,"loc":{"start":{"line":5,"column":10},"end":{"line":5,"column":14},"identifierName":"quux"},
"name": "quux"
},
"value": {
"type": "Literal",
"start":83,"end":88,"loc":{"start":{"line":5,"column":18},"end":{"line":5,"column":23}},
"value": "qux",
"raw": "\"qux\""
}
}
]
}
}
]
}
}

View File

@ -21,21 +21,24 @@
"start":8,"end":75,"loc":{"start":{"line":1,"column":8},"end":{"line":6,"column":1}}, "start":8,"end":75,"loc":{"start":{"line":1,"column":8},"end":{"line":6,"column":1}},
"body": [ "body": [
{ {
"type": "PropertyDefinition", "type": "ClassPrivateProperty",
"start":12,"end":25,"loc":{"start":{"line":2,"column":2},"end":{"line":2,"column":15}}, "start":12,"end":25,"loc":{"start":{"line":2,"column":2},"end":{"line":2,"column":15}},
"static": false, "static": false,
"key": { "key": {
"type": "PrivateIdentifier", "type": "PrivateName",
"start":12,"end":16,"loc":{"start":{"line":2,"column":2},"end":{"line":2,"column":6}}, "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" "name": "foo"
}
}, },
"value": { "value": {
"type": "Literal", "type": "Literal",
"start":19,"end":24,"loc":{"start":{"line":2,"column":9},"end":{"line":2,"column":14}}, "start":19,"end":24,"loc":{"start":{"line":2,"column":9},"end":{"line":2,"column":14}},
"value": "bar", "value": "bar",
"raw": "\"bar\"" "raw": "\"bar\""
}, }
"computed": false
}, },
{ {
"type": "MethodDefinition", "type": "MethodDefinition",
@ -73,9 +76,13 @@
"type": "BinaryExpression", "type": "BinaryExpression",
"start":57,"end":68,"loc":{"start":{"line":4,"column":11},"end":{"line":4,"column":22}}, "start":57,"end":68,"loc":{"start":{"line":4,"column":11},"end":{"line":4,"column":22}},
"left": { "left": {
"type": "PrivateIdentifier", "type": "PrivateName",
"start":57,"end":61,"loc":{"start":{"line":4,"column":11},"end":{"line":4,"column":15}}, "start":57,"end":61,"loc":{"start":{"line":4,"column":11},"end":{"line":4,"column":15}},
"id": {
"type": "Identifier",
"start":58,"end":61,"loc":{"start":{"line":4,"column":12},"end":{"line":4,"column":15},"identifierName":"foo"},
"name": "foo" "name": "foo"
}
}, },
"operator": "in", "operator": "in",
"right": { "right": {