Implement class features in estree (#12370)
Co-authored-by: Kai Cataldo <kai@kaicataldo.com>
This commit is contained in:
@@ -1172,12 +1172,15 @@ export default class ExpressionParser extends LValParser {
|
||||
node = (this.parseMaybePrivateName(true): N.PrivateName);
|
||||
if (this.match(tt._in)) {
|
||||
this.expectPlugin("privateIn");
|
||||
this.classScope.usePrivateName(node.id.name, node.start);
|
||||
this.classScope.usePrivateName(
|
||||
this.getPrivateNameSV(node),
|
||||
node.start,
|
||||
);
|
||||
} else if (this.hasPlugin("privateIn")) {
|
||||
this.raise(
|
||||
this.state.start,
|
||||
Errors.PrivateInExpectedIn,
|
||||
node.id.name,
|
||||
this.getPrivateNameSV(node),
|
||||
);
|
||||
} else {
|
||||
throw this.unexpected(start);
|
||||
|
||||
@@ -194,6 +194,33 @@ export default (superClass: Class<Parser>): Class<Parser> =>
|
||||
}
|
||||
}
|
||||
|
||||
parseMaybePrivateName(...args: [boolean]): any {
|
||||
const node = super.parseMaybePrivateName(...args);
|
||||
if (node.type === "PrivateName") {
|
||||
return this.convertPrivateNameToPrivateIdentifier(node);
|
||||
}
|
||||
return node;
|
||||
}
|
||||
|
||||
convertPrivateNameToPrivateIdentifier(
|
||||
node: N.PrivateName,
|
||||
): N.EstreePrivateIdentifier {
|
||||
const name = super.getPrivateNameSV(node);
|
||||
node = (node: any);
|
||||
delete node.id;
|
||||
node.name = name;
|
||||
node.type = "PrivateIdentifier";
|
||||
return node;
|
||||
}
|
||||
|
||||
isPrivateName(node: N.Node): boolean {
|
||||
return node.type === "PrivateIdentifier";
|
||||
}
|
||||
|
||||
getPrivateNameSV(node: N.Node): string {
|
||||
return node.name;
|
||||
}
|
||||
|
||||
parseLiteral<T: N.Literal>(
|
||||
value: any,
|
||||
type: /*T["kind"]*/ string,
|
||||
@@ -240,11 +267,27 @@ export default (superClass: Class<Parser>): Class<Parser> =>
|
||||
delete funcNode.kind;
|
||||
// $FlowIgnore
|
||||
node.value = funcNode;
|
||||
|
||||
type = type === "ClassMethod" ? "MethodDefinition" : type;
|
||||
if (type === "ClassPrivateMethod") {
|
||||
// $FlowIgnore
|
||||
node.computed = false;
|
||||
}
|
||||
type = "MethodDefinition";
|
||||
return this.finishNode(node, type);
|
||||
}
|
||||
|
||||
parseClassProperty(...args: [N.ClassProperty]): any {
|
||||
const propertyNode = (super.parseClassProperty(...args): any);
|
||||
propertyNode.type = "PropertyDefinition";
|
||||
return (propertyNode: N.EstreePropertyDefinition);
|
||||
}
|
||||
|
||||
parseClassPrivateProperty(...args: [N.ClassPrivateProperty]): any {
|
||||
const propertyNode = (super.parseClassPrivateProperty(...args): any);
|
||||
propertyNode.type = "PropertyDefinition";
|
||||
propertyNode.computed = false;
|
||||
return (propertyNode: N.EstreePropertyDefinition);
|
||||
}
|
||||
|
||||
parseObjectMethod(
|
||||
prop: N.ObjectMethod,
|
||||
isGenerator: boolean,
|
||||
|
||||
@@ -2181,7 +2181,8 @@ export default (superClass: Class<Parser>): Class<Parser> =>
|
||||
if (member.declare) {
|
||||
if (
|
||||
member.type !== "ClassProperty" &&
|
||||
member.type !== "ClassPrivateProperty"
|
||||
member.type !== "ClassPrivateProperty" &&
|
||||
member.type !== "PropertyDefinition" // Used by estree plugin
|
||||
) {
|
||||
this.raise(pos, FlowErrors.DeclareClassElement);
|
||||
} else if (member.value) {
|
||||
|
||||
@@ -1077,6 +1077,19 @@ export type EstreeImportExpression = NodeBase & {
|
||||
source: Expression,
|
||||
};
|
||||
|
||||
export type EstreePrivateIdentifier = NodeBase & {
|
||||
type: "PrivateIdentifier",
|
||||
name: string,
|
||||
};
|
||||
|
||||
export type EstreePropertyDefinition = NodeBase & {
|
||||
type: "PropertyDefinition",
|
||||
static: boolean,
|
||||
key: Expression | EstreePrivateIdentifier,
|
||||
computed: boolean,
|
||||
value: Expression,
|
||||
};
|
||||
|
||||
// === === === ===
|
||||
// TypeScript
|
||||
// === === === ===
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
class A {
|
||||
#foo(arg, ...others) {}
|
||||
static #bar(arg, ...others) {}
|
||||
}
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
{
|
||||
"type": "File",
|
||||
"start":0,"end":37,"loc":{"start":{"line":1,"column":0},"end":{"line":3,"column":1}},
|
||||
"start":0,"end":70,"loc":{"start":{"line":1,"column":0},"end":{"line":4,"column":1}},
|
||||
"program": {
|
||||
"type": "Program",
|
||||
"start":0,"end":37,"loc":{"start":{"line":1,"column":0},"end":{"line":3,"column":1}},
|
||||
"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":37,"loc":{"start":{"line":1,"column":0},"end":{"line":3,"column":1}},
|
||||
"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"},
|
||||
@@ -18,20 +18,16 @@
|
||||
"superClass": null,
|
||||
"body": {
|
||||
"type": "ClassBody",
|
||||
"start":8,"end":37,"loc":{"start":{"line":1,"column":8},"end":{"line":3,"column":1}},
|
||||
"start":8,"end":70,"loc":{"start":{"line":1,"column":8},"end":{"line":4,"column":1}},
|
||||
"body": [
|
||||
{
|
||||
"type": "ClassPrivateMethod",
|
||||
"type": "MethodDefinition",
|
||||
"start":12,"end":35,"loc":{"start":{"line":2,"column":2},"end":{"line":2,"column":25}},
|
||||
"static": false,
|
||||
"key": {
|
||||
"type": "PrivateName",
|
||||
"type": "PrivateIdentifier",
|
||||
"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"
|
||||
},
|
||||
"kind": "method",
|
||||
"value": {
|
||||
@@ -62,7 +58,49 @@
|
||||
"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
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
4
packages/babel-parser/test/fixtures/estree/class-private-property/basic/input.js
vendored
Normal file
4
packages/babel-parser/test/fixtures/estree/class-private-property/basic/input.js
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
class A {
|
||||
#foo = "bar";
|
||||
static #bar = foo;
|
||||
}
|
||||
3
packages/babel-parser/test/fixtures/estree/class-private-property/basic/options.json
vendored
Normal file
3
packages/babel-parser/test/fixtures/estree/class-private-property/basic/options.json
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"plugins": ["estree", "classPrivateProperties"]
|
||||
}
|
||||
61
packages/babel-parser/test/fixtures/estree/class-private-property/basic/output.json
vendored
Normal file
61
packages/babel-parser/test/fixtures/estree/class-private-property/basic/output.json
vendored
Normal 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
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
5
packages/babel-parser/test/fixtures/estree/class-private-property/flow/input.js
vendored
Normal file
5
packages/babel-parser/test/fixtures/estree/class-private-property/flow/input.js
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
class A {
|
||||
#foo = "bar";
|
||||
static #bar = foo;
|
||||
declare #qux: Array<string>;
|
||||
}
|
||||
3
packages/babel-parser/test/fixtures/estree/class-private-property/flow/options.json
vendored
Normal file
3
packages/babel-parser/test/fixtures/estree/class-private-property/flow/options.json
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"plugins": ["flow", "estree", "classPrivateProperties"]
|
||||
}
|
||||
100
packages/babel-parser/test/fixtures/estree/class-private-property/flow/output.json
vendored
Normal file
100
packages/babel-parser/test/fixtures/estree/class-private-property/flow/output.json
vendored
Normal file
@@ -0,0 +1,100 @@
|
||||
{
|
||||
"type": "File",
|
||||
"start":0,"end":79,"loc":{"start":{"line":1,"column":0},"end":{"line":5,"column":1}},
|
||||
"program": {
|
||||
"type": "Program",
|
||||
"start":0,"end":79,"loc":{"start":{"line":1,"column":0},"end":{"line":5,"column":1}},
|
||||
"sourceType": "script",
|
||||
"interpreter": null,
|
||||
"body": [
|
||||
{
|
||||
"type": "ClassDeclaration",
|
||||
"start":0,"end":79,"loc":{"start":{"line":1,"column":0},"end":{"line":5,"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":79,"loc":{"start":{"line":1,"column":8},"end":{"line":5,"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"
|
||||
},
|
||||
"variance": null,
|
||||
"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"
|
||||
},
|
||||
"variance": null,
|
||||
"value": {
|
||||
"type": "Identifier",
|
||||
"start":42,"end":45,"loc":{"start":{"line":3,"column":16},"end":{"line":3,"column":19},"identifierName":"foo"},
|
||||
"name": "foo"
|
||||
},
|
||||
"computed": false
|
||||
},
|
||||
{
|
||||
"type": "PropertyDefinition",
|
||||
"start":49,"end":77,"loc":{"start":{"line":4,"column":2},"end":{"line":4,"column":30}},
|
||||
"declare": true,
|
||||
"static": false,
|
||||
"key": {
|
||||
"type": "PrivateIdentifier",
|
||||
"start":57,"end":61,"loc":{"start":{"line":4,"column":10},"end":{"line":4,"column":14}},
|
||||
"name": "qux"
|
||||
},
|
||||
"variance": null,
|
||||
"typeAnnotation": {
|
||||
"type": "TypeAnnotation",
|
||||
"start":61,"end":76,"loc":{"start":{"line":4,"column":14},"end":{"line":4,"column":29}},
|
||||
"typeAnnotation": {
|
||||
"type": "GenericTypeAnnotation",
|
||||
"start":63,"end":76,"loc":{"start":{"line":4,"column":16},"end":{"line":4,"column":29}},
|
||||
"typeParameters": {
|
||||
"type": "TypeParameterInstantiation",
|
||||
"start":68,"end":76,"loc":{"start":{"line":4,"column":21},"end":{"line":4,"column":29}},
|
||||
"params": [
|
||||
{
|
||||
"type": "StringTypeAnnotation",
|
||||
"start":69,"end":75,"loc":{"start":{"line":4,"column":22},"end":{"line":4,"column":28}}
|
||||
}
|
||||
]
|
||||
},
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"start":63,"end":68,"loc":{"start":{"line":4,"column":16},"end":{"line":4,"column":21},"identifierName":"Array"},
|
||||
"name": "Array"
|
||||
}
|
||||
}
|
||||
},
|
||||
"value": null,
|
||||
"computed": false
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
5
packages/babel-parser/test/fixtures/estree/class-private-property/typescript/input.js
vendored
Normal file
5
packages/babel-parser/test/fixtures/estree/class-private-property/typescript/input.js
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
class A {
|
||||
#foo = "bar";
|
||||
static #bar = foo;
|
||||
declare #qux: Array<string>;
|
||||
}
|
||||
3
packages/babel-parser/test/fixtures/estree/class-private-property/typescript/options.json
vendored
Normal file
3
packages/babel-parser/test/fixtures/estree/class-private-property/typescript/options.json
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"plugins": ["typescript", "estree", "classPrivateProperties"]
|
||||
}
|
||||
97
packages/babel-parser/test/fixtures/estree/class-private-property/typescript/output.json
vendored
Normal file
97
packages/babel-parser/test/fixtures/estree/class-private-property/typescript/output.json
vendored
Normal file
@@ -0,0 +1,97 @@
|
||||
{
|
||||
"type": "File",
|
||||
"start":0,"end":79,"loc":{"start":{"line":1,"column":0},"end":{"line":5,"column":1}},
|
||||
"program": {
|
||||
"type": "Program",
|
||||
"start":0,"end":79,"loc":{"start":{"line":1,"column":0},"end":{"line":5,"column":1}},
|
||||
"sourceType": "script",
|
||||
"interpreter": null,
|
||||
"body": [
|
||||
{
|
||||
"type": "ClassDeclaration",
|
||||
"start":0,"end":79,"loc":{"start":{"line":1,"column":0},"end":{"line":5,"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":79,"loc":{"start":{"line":1,"column":8},"end":{"line":5,"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
|
||||
},
|
||||
{
|
||||
"type": "PropertyDefinition",
|
||||
"start":49,"end":77,"loc":{"start":{"line":4,"column":2},"end":{"line":4,"column":30}},
|
||||
"declare": true,
|
||||
"static": false,
|
||||
"key": {
|
||||
"type": "PrivateIdentifier",
|
||||
"start":57,"end":61,"loc":{"start":{"line":4,"column":10},"end":{"line":4,"column":14}},
|
||||
"name": "qux"
|
||||
},
|
||||
"typeAnnotation": {
|
||||
"type": "TSTypeAnnotation",
|
||||
"start":61,"end":76,"loc":{"start":{"line":4,"column":14},"end":{"line":4,"column":29}},
|
||||
"typeAnnotation": {
|
||||
"type": "TSTypeReference",
|
||||
"start":63,"end":76,"loc":{"start":{"line":4,"column":16},"end":{"line":4,"column":29}},
|
||||
"typeName": {
|
||||
"type": "Identifier",
|
||||
"start":63,"end":68,"loc":{"start":{"line":4,"column":16},"end":{"line":4,"column":21},"identifierName":"Array"},
|
||||
"name": "Array"
|
||||
},
|
||||
"typeParameters": {
|
||||
"type": "TSTypeParameterInstantiation",
|
||||
"start":68,"end":76,"loc":{"start":{"line":4,"column":21},"end":{"line":4,"column":29}},
|
||||
"params": [
|
||||
{
|
||||
"type": "TSStringKeyword",
|
||||
"start":69,"end":75,"loc":{"start":{"line":4,"column":22},"end":{"line":4,"column":28}}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"value": null,
|
||||
"computed": false
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
6
packages/babel-parser/test/fixtures/estree/class-property/basic/input.js
vendored
Normal file
6
packages/babel-parser/test/fixtures/estree/class-property/basic/input.js
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
class A {
|
||||
foo = "bar";
|
||||
[bar] = foo;
|
||||
static "qux" = "quux";
|
||||
static [quux] = "qux";
|
||||
}
|
||||
3
packages/babel-parser/test/fixtures/estree/class-property/basic/options.json
vendored
Normal file
3
packages/babel-parser/test/fixtures/estree/class-property/basic/options.json
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"plugins": ["estree", "classProperties"]
|
||||
}
|
||||
96
packages/babel-parser/test/fixtures/estree/class-property/basic/output.json
vendored
Normal file
96
packages/babel-parser/test/fixtures/estree/class-property/basic/output.json
vendored
Normal 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": "PropertyDefinition",
|
||||
"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": "PropertyDefinition",
|
||||
"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": "PropertyDefinition",
|
||||
"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": "PropertyDefinition",
|
||||
"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\""
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
6
packages/babel-parser/test/fixtures/estree/private-in/basic/input.js
vendored
Normal file
6
packages/babel-parser/test/fixtures/estree/private-in/basic/input.js
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
class A {
|
||||
#foo = "bar";
|
||||
static isA(obj) {
|
||||
return #foo in obj;
|
||||
}
|
||||
}
|
||||
3
packages/babel-parser/test/fixtures/estree/private-in/basic/options.json
vendored
Normal file
3
packages/babel-parser/test/fixtures/estree/private-in/basic/options.json
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"plugins": ["estree", "classPrivateProperties", "privateIn"]
|
||||
}
|
||||
97
packages/babel-parser/test/fixtures/estree/private-in/basic/output.json
vendored
Normal file
97
packages/babel-parser/test/fixtures/estree/private-in/basic/output.json
vendored
Normal file
@@ -0,0 +1,97 @@
|
||||
{
|
||||
"type": "File",
|
||||
"start":0,"end":75,"loc":{"start":{"line":1,"column":0},"end":{"line":6,"column":1}},
|
||||
"program": {
|
||||
"type": "Program",
|
||||
"start":0,"end":75,"loc":{"start":{"line":1,"column":0},"end":{"line":6,"column":1}},
|
||||
"sourceType": "script",
|
||||
"interpreter": null,
|
||||
"body": [
|
||||
{
|
||||
"type": "ClassDeclaration",
|
||||
"start":0,"end":75,"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":75,"loc":{"start":{"line":1,"column":8},"end":{"line":6,"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": "MethodDefinition",
|
||||
"start":28,"end":73,"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},
|
||||
"static": true,
|
||||
"key": {
|
||||
"type": "Identifier",
|
||||
"start":35,"end":38,"loc":{"start":{"line":3,"column":9},"end":{"line":3,"column":12},"identifierName":"isA"},
|
||||
"name": "isA"
|
||||
},
|
||||
"computed": false,
|
||||
"kind": "method",
|
||||
"value": {
|
||||
"type": "FunctionExpression",
|
||||
"start":38,"end":73,"loc":{"start":{"line":3,"column":12},"end":{"line":5,"column":3}},
|
||||
"id": null,
|
||||
"generator": false,
|
||||
"async": false,
|
||||
"expression": false,
|
||||
"params": [
|
||||
{
|
||||
"type": "Identifier",
|
||||
"start":39,"end":42,"loc":{"start":{"line":3,"column":13},"end":{"line":3,"column":16},"identifierName":"obj"},
|
||||
"name": "obj"
|
||||
}
|
||||
],
|
||||
"body": {
|
||||
"type": "BlockStatement",
|
||||
"start":44,"end":73,"loc":{"start":{"line":3,"column":18},"end":{"line":5,"column":3}},
|
||||
"body": [
|
||||
{
|
||||
"type": "ReturnStatement",
|
||||
"start":50,"end":69,"loc":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},
|
||||
"argument": {
|
||||
"type": "BinaryExpression",
|
||||
"start":57,"end":68,"loc":{"start":{"line":4,"column":11},"end":{"line":4,"column":22}},
|
||||
"left": {
|
||||
"type": "PrivateIdentifier",
|
||||
"start":57,"end":61,"loc":{"start":{"line":4,"column":11},"end":{"line":4,"column":15}},
|
||||
"name": "foo"
|
||||
},
|
||||
"operator": "in",
|
||||
"right": {
|
||||
"type": "Identifier",
|
||||
"start":65,"end":68,"loc":{"start":{"line":4,"column":19},"end":{"line":4,"column":22},"identifierName":"obj"},
|
||||
"name": "obj"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user