diff --git a/lib/options.js b/lib/options.js index 855d5187..0736599b 100644 --- a/lib/options.js +++ b/lib/options.js @@ -17,7 +17,8 @@ const SUPPORTED_VERSIONS = [ 9, 10, 11, - 12 + 12, + 13 ]; /** diff --git a/lib/token-translator.js b/lib/token-translator.js index 1e03ae66..9aa5e22e 100644 --- a/lib/token-translator.js +++ b/lib/token-translator.js @@ -20,6 +20,7 @@ const Token = { Boolean: "Boolean", EOF: "", Identifier: "Identifier", + PrivateIdentifier: "PrivateIdentifier", Keyword: "Keyword", Null: "Null", Numeric: "Numeric", @@ -114,6 +115,9 @@ TokenTranslator.prototype = { token.type = Token.Keyword; } + } else if (type === tt.privateId) { + token.type = Token.PrivateIdentifier; + } else if (type === tt.semi || type === tt.comma || type === tt.parenL || type === tt.parenR || type === tt.braceL || type === tt.braceR || diff --git a/package.json b/package.json index 198147fb..61b3b5e5 100644 --- a/package.json +++ b/package.json @@ -31,9 +31,9 @@ }, "license": "BSD-2-Clause", "dependencies": { - "acorn": "^8.1.0", + "acorn": "^8.2.1", "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^2.0.0" + "eslint-visitor-keys": "github:eslint/eslint-visitor-keys#908fdf8c0d9a352c696c8c1f4901280d1a0795f7" }, "devDependencies": { "@rollup/plugin-commonjs": "^17.1.0", diff --git a/tests/fixtures/ecma-version/13/class-fields/invalid-delete-private-optional.result.js b/tests/fixtures/ecma-version/13/class-fields/invalid-delete-private-optional.result.js new file mode 100644 index 00000000..9b503393 --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/invalid-delete-private-optional.result.js @@ -0,0 +1,6 @@ +export default { + "index": 28, + "lineNumber": 3, + "column": 11, + "message": "Private fields can not be deleted" +}; \ No newline at end of file diff --git a/tests/fixtures/ecma-version/13/class-fields/invalid-delete-private-optional.src.js b/tests/fixtures/ecma-version/13/class-fields/invalid-delete-private-optional.src.js new file mode 100644 index 00000000..af84166b --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/invalid-delete-private-optional.src.js @@ -0,0 +1,4 @@ +class C { + #a; + f() { delete this?.#a } +} diff --git a/tests/fixtures/ecma-version/13/class-fields/invalid-delete-private.result.js b/tests/fixtures/ecma-version/13/class-fields/invalid-delete-private.result.js new file mode 100644 index 00000000..9b503393 --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/invalid-delete-private.result.js @@ -0,0 +1,6 @@ +export default { + "index": 28, + "lineNumber": 3, + "column": 11, + "message": "Private fields can not be deleted" +}; \ No newline at end of file diff --git a/tests/fixtures/ecma-version/13/class-fields/invalid-delete-private.src.js b/tests/fixtures/ecma-version/13/class-fields/invalid-delete-private.src.js new file mode 100644 index 00000000..87c0ca40 --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/invalid-delete-private.src.js @@ -0,0 +1,4 @@ +class C { + #a; + f() { delete this.#a } +} diff --git a/tests/fixtures/ecma-version/13/class-fields/invalid-init-arguments.result.js b/tests/fixtures/ecma-version/13/class-fields/invalid-init-arguments.result.js new file mode 100644 index 00000000..6704351a --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/invalid-init-arguments.result.js @@ -0,0 +1,6 @@ +export default { + "index": 43, + "lineNumber": 3, + "column": 15, + "message": "Cannot use 'arguments' in class field initializer" +}; \ No newline at end of file diff --git a/tests/fixtures/ecma-version/13/class-fields/invalid-init-arguments.src.js b/tests/fixtures/ecma-version/13/class-fields/invalid-init-arguments.src.js new file mode 100644 index 00000000..ec2d75c6 --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/invalid-init-arguments.src.js @@ -0,0 +1,5 @@ +function f() { + class C { + aaa = arguments + } +} diff --git a/tests/fixtures/ecma-version/13/class-fields/invalid-init-arrow-arguments.result.js b/tests/fixtures/ecma-version/13/class-fields/invalid-init-arrow-arguments.result.js new file mode 100644 index 00000000..68b5bd4e --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/invalid-init-arrow-arguments.result.js @@ -0,0 +1,6 @@ +export default { + "index": 49, + "lineNumber": 3, + "column": 21, + "message": "Cannot use 'arguments' in class field initializer" +}; \ No newline at end of file diff --git a/tests/fixtures/ecma-version/13/class-fields/invalid-init-arrow-arguments.src.js b/tests/fixtures/ecma-version/13/class-fields/invalid-init-arrow-arguments.src.js new file mode 100644 index 00000000..15614ac7 --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/invalid-init-arrow-arguments.src.js @@ -0,0 +1,5 @@ +function f() { + class C { + aaa = () => arguments + } +} diff --git a/tests/fixtures/ecma-version/13/class-fields/invalid-init-yield.result.js b/tests/fixtures/ecma-version/13/class-fields/invalid-init-yield.result.js new file mode 100644 index 00000000..8065c0aa --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/invalid-init-yield.result.js @@ -0,0 +1,6 @@ +export default { + "index": 333, + "lineNumber": 7, + "column": 15, + "message": "The keyword 'yield' is reserved" +}; \ No newline at end of file diff --git a/tests/fixtures/ecma-version/13/class-fields/invalid-init-yield.src.js b/tests/fixtures/ecma-version/13/class-fields/invalid-init-yield.src.js new file mode 100644 index 00000000..326b3b99 --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/invalid-init-yield.src.js @@ -0,0 +1,9 @@ +function* f() { + class C { + // `yield` is an identifier reference in field initializers even if it's in a generator function. + // But `yield` as identifier references is disallowed in strict mode. + // And the inside of classes is always strict mode. + // Therefore this is a syntax error. + aaa = yield + } +} diff --git a/tests/fixtures/ecma-version/13/class-fields/invalid-member-private-undef.result.js b/tests/fixtures/ecma-version/13/class-fields/invalid-member-private-undef.result.js new file mode 100644 index 00000000..6a528b4c --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/invalid-member-private-undef.result.js @@ -0,0 +1,6 @@ +export default { + "index": 41, + "lineNumber": 4, + "column": 14, + "message": "Private field '#b' must be declared in an enclosing class" +}; \ No newline at end of file diff --git a/tests/fixtures/ecma-version/13/class-fields/invalid-member-private-undef.src.js b/tests/fixtures/ecma-version/13/class-fields/invalid-member-private-undef.src.js new file mode 100644 index 00000000..f92ef155 --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/invalid-member-private-undef.src.js @@ -0,0 +1,6 @@ +class C { + #a; + f() { + this.#b + } +} diff --git a/tests/fixtures/ecma-version/13/class-fields/invalid-member-super-private.result.js b/tests/fixtures/ecma-version/13/class-fields/invalid-member-super-private.result.js new file mode 100644 index 00000000..511f4c88 --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/invalid-member-super-private.result.js @@ -0,0 +1,6 @@ +export default { + "index": 49, + "lineNumber": 3, + "column": 17, + "message": "Unexpected token #foo" +}; \ No newline at end of file diff --git a/tests/fixtures/ecma-version/13/class-fields/invalid-member-super-private.src.js b/tests/fixtures/ecma-version/13/class-fields/invalid-member-super-private.src.js new file mode 100644 index 00000000..07c20b59 --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/invalid-member-super-private.src.js @@ -0,0 +1,4 @@ +class C extends Base { + #foo; + f() { super.#foo } +} diff --git a/tests/fixtures/ecma-version/13/class-fields/invalid-private-constructor.result.js b/tests/fixtures/ecma-version/13/class-fields/invalid-private-constructor.result.js new file mode 100644 index 00000000..c9c25ffb --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/invalid-private-constructor.result.js @@ -0,0 +1,6 @@ +export default { + "index": 14, + "lineNumber": 2, + "column": 5, + "message": "Classes can't have an element named '#constructor'" +}; \ No newline at end of file diff --git a/tests/fixtures/ecma-version/13/class-fields/invalid-private-constructor.src.js b/tests/fixtures/ecma-version/13/class-fields/invalid-private-constructor.src.js new file mode 100644 index 00000000..c360f6b6 --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/invalid-private-constructor.src.js @@ -0,0 +1,3 @@ +class C { + #constructor = () => {} +} diff --git a/tests/fixtures/ecma-version/13/class-fields/invalid-private-dupelicate.result.js b/tests/fixtures/ecma-version/13/class-fields/invalid-private-dupelicate.result.js new file mode 100644 index 00000000..5e653264 --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/invalid-private-dupelicate.result.js @@ -0,0 +1,6 @@ +export default { + "index": 22, + "lineNumber": 3, + "column": 5, + "message": "Identifier '#a' has already been declared" +}; \ No newline at end of file diff --git a/tests/fixtures/ecma-version/13/class-fields/invalid-private-dupelicate.src.js b/tests/fixtures/ecma-version/13/class-fields/invalid-private-dupelicate.src.js new file mode 100644 index 00000000..9634ef9d --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/invalid-private-dupelicate.src.js @@ -0,0 +1,4 @@ +class C { + #a; + #a; +} diff --git a/tests/fixtures/ecma-version/13/class-fields/invalid-public-constructor.result.js b/tests/fixtures/ecma-version/13/class-fields/invalid-public-constructor.result.js new file mode 100644 index 00000000..f399d5a3 --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/invalid-public-constructor.result.js @@ -0,0 +1,6 @@ +export default { + "index": 14, + "lineNumber": 2, + "column": 5, + "message": "Classes can't have a field named 'constructor'" +}; \ No newline at end of file diff --git a/tests/fixtures/ecma-version/13/class-fields/invalid-public-constructor.src.js b/tests/fixtures/ecma-version/13/class-fields/invalid-public-constructor.src.js new file mode 100644 index 00000000..9e81de64 --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/invalid-public-constructor.src.js @@ -0,0 +1,3 @@ +class C { + constructor = () => {} +} diff --git a/tests/fixtures/ecma-version/13/class-fields/mixed-init-await.module-result.js b/tests/fixtures/ecma-version/13/class-fields/mixed-init-await.module-result.js new file mode 100644 index 00000000..821df907 --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/mixed-init-await.module-result.js @@ -0,0 +1,6 @@ +export default { + "index": 304, + "lineNumber": 6, + "column": 15, + "message": "Cannot use keyword 'await' outside an async function" +}; \ No newline at end of file diff --git a/tests/fixtures/ecma-version/13/class-fields/mixed-init-await.result.js b/tests/fixtures/ecma-version/13/class-fields/mixed-init-await.result.js new file mode 100644 index 00000000..8bb610e1 --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/mixed-init-await.result.js @@ -0,0 +1,442 @@ +export default { + "type": "Program", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 8, + "column": 1 + } + }, + "range": [ + 0, + 317 + ], + "body": [ + { + "type": "FunctionDeclaration", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 8, + "column": 1 + } + }, + "range": [ + 0, + 317 + ], + "id": { + "type": "Identifier", + "loc": { + "start": { + "line": 1, + "column": 15 + }, + "end": { + "line": 1, + "column": 16 + } + }, + "range": [ + 15, + 16 + ], + "name": "f" + }, + "expression": false, + "generator": false, + "async": true, + "params": [], + "body": { + "type": "BlockStatement", + "loc": { + "start": { + "line": 1, + "column": 19 + }, + "end": { + "line": 8, + "column": 1 + } + }, + "range": [ + 19, + 317 + ], + "body": [ + { + "type": "ClassDeclaration", + "loc": { + "start": { + "line": 2, + "column": 4 + }, + "end": { + "line": 7, + "column": 5 + } + }, + "range": [ + 25, + 315 + ], + "id": { + "type": "Identifier", + "loc": { + "start": { + "line": 2, + "column": 10 + }, + "end": { + "line": 2, + "column": 11 + } + }, + "range": [ + 31, + 32 + ], + "name": "C" + }, + "superClass": null, + "body": { + "type": "ClassBody", + "loc": { + "start": { + "line": 2, + "column": 12 + }, + "end": { + "line": 7, + "column": 5 + } + }, + "range": [ + 33, + 315 + ], + "body": [ + { + "type": "PropertyDefinition", + "loc": { + "start": { + "line": 6, + "column": 8 + }, + "end": { + "line": 6, + "column": 19 + } + }, + "range": [ + 298, + 309 + ], + "static": false, + "computed": false, + "key": { + "type": "Identifier", + "loc": { + "start": { + "line": 6, + "column": 8 + }, + "end": { + "line": 6, + "column": 11 + } + }, + "range": [ + 298, + 301 + ], + "name": "aaa" + }, + "value": { + "type": "Identifier", + "loc": { + "start": { + "line": 6, + "column": 14 + }, + "end": { + "line": 6, + "column": 19 + } + }, + "range": [ + 304, + 309 + ], + "name": "await" + } + } + ] + } + } + ] + } + } + ], + "sourceType": "script", + "tokens": [ + { + "type": "Identifier", + "value": "async", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 5 + } + }, + "range": [ + 0, + 5 + ] + }, + { + "type": "Keyword", + "value": "function", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 14 + } + }, + "range": [ + 6, + 14 + ] + }, + { + "type": "Identifier", + "value": "f", + "loc": { + "start": { + "line": 1, + "column": 15 + }, + "end": { + "line": 1, + "column": 16 + } + }, + "range": [ + 15, + 16 + ] + }, + { + "type": "Punctuator", + "value": "(", + "loc": { + "start": { + "line": 1, + "column": 16 + }, + "end": { + "line": 1, + "column": 17 + } + }, + "range": [ + 16, + 17 + ] + }, + { + "type": "Punctuator", + "value": ")", + "loc": { + "start": { + "line": 1, + "column": 17 + }, + "end": { + "line": 1, + "column": 18 + } + }, + "range": [ + 17, + 18 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 1, + "column": 19 + }, + "end": { + "line": 1, + "column": 20 + } + }, + "range": [ + 19, + 20 + ] + }, + { + "type": "Keyword", + "value": "class", + "loc": { + "start": { + "line": 2, + "column": 4 + }, + "end": { + "line": 2, + "column": 9 + } + }, + "range": [ + 25, + 30 + ] + }, + { + "type": "Identifier", + "value": "C", + "loc": { + "start": { + "line": 2, + "column": 10 + }, + "end": { + "line": 2, + "column": 11 + } + }, + "range": [ + 31, + 32 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 2, + "column": 12 + }, + "end": { + "line": 2, + "column": 13 + } + }, + "range": [ + 33, + 34 + ] + }, + { + "type": "Identifier", + "value": "aaa", + "loc": { + "start": { + "line": 6, + "column": 8 + }, + "end": { + "line": 6, + "column": 11 + } + }, + "range": [ + 298, + 301 + ] + }, + { + "type": "Punctuator", + "value": "=", + "loc": { + "start": { + "line": 6, + "column": 12 + }, + "end": { + "line": 6, + "column": 13 + } + }, + "range": [ + 302, + 303 + ] + }, + { + "type": "Identifier", + "value": "await", + "loc": { + "start": { + "line": 6, + "column": 14 + }, + "end": { + "line": 6, + "column": 19 + } + }, + "range": [ + 304, + 309 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 7, + "column": 4 + }, + "end": { + "line": 7, + "column": 5 + } + }, + "range": [ + 314, + 315 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 8, + "column": 0 + }, + "end": { + "line": 8, + "column": 1 + } + }, + "range": [ + 316, + 317 + ] + } + ] +}; \ No newline at end of file diff --git a/tests/fixtures/ecma-version/13/class-fields/mixed-init-await.src.js b/tests/fixtures/ecma-version/13/class-fields/mixed-init-await.src.js new file mode 100644 index 00000000..c5466e8a --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/mixed-init-await.src.js @@ -0,0 +1,8 @@ +async function f() { + class C { + // `await` is an identifier reference in field initializers even if it's in async function body. + // But ES modules disallow `await` as identifier references. + // Therefore, it's Identifier in script and it's syntax error in module. + aaa = await + } +} diff --git a/tests/fixtures/ecma-version/13/class-fields/valid-arguments-in-computed-key.result.js b/tests/fixtures/ecma-version/13/class-fields/valid-arguments-in-computed-key.result.js new file mode 100644 index 00000000..a3217ba9 --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/valid-arguments-in-computed-key.result.js @@ -0,0 +1,461 @@ +export default { + "type": "Program", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 6, + "column": 1 + } + }, + "range": [ + 0, + 166 + ], + "body": [ + { + "type": "FunctionDeclaration", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 6, + "column": 1 + } + }, + "range": [ + 0, + 166 + ], + "id": { + "type": "Identifier", + "loc": { + "start": { + "line": 1, + "column": 9 + }, + "end": { + "line": 1, + "column": 10 + } + }, + "range": [ + 9, + 10 + ], + "name": "f" + }, + "expression": false, + "generator": false, + "async": false, + "params": [], + "body": { + "type": "BlockStatement", + "loc": { + "start": { + "line": 1, + "column": 13 + }, + "end": { + "line": 6, + "column": 1 + } + }, + "range": [ + 13, + 166 + ], + "body": [ + { + "type": "ClassDeclaration", + "loc": { + "start": { + "line": 2, + "column": 4 + }, + "end": { + "line": 5, + "column": 5 + } + }, + "range": [ + 19, + 164 + ], + "id": { + "type": "Identifier", + "loc": { + "start": { + "line": 2, + "column": 10 + }, + "end": { + "line": 2, + "column": 11 + } + }, + "range": [ + 25, + 26 + ], + "name": "C" + }, + "superClass": null, + "body": { + "type": "ClassBody", + "loc": { + "start": { + "line": 2, + "column": 12 + }, + "end": { + "line": 5, + "column": 5 + } + }, + "range": [ + 27, + 164 + ], + "body": [ + { + "type": "PropertyDefinition", + "loc": { + "start": { + "line": 4, + "column": 8 + }, + "end": { + "line": 4, + "column": 23 + } + }, + "range": [ + 143, + 158 + ], + "static": false, + "computed": true, + "key": { + "type": "Identifier", + "loc": { + "start": { + "line": 4, + "column": 9 + }, + "end": { + "line": 4, + "column": 18 + } + }, + "range": [ + 144, + 153 + ], + "name": "arguments" + }, + "value": { + "type": "Literal", + "loc": { + "start": { + "line": 4, + "column": 22 + }, + "end": { + "line": 4, + "column": 23 + } + }, + "range": [ + 157, + 158 + ], + "value": 0, + "raw": "0" + } + } + ] + } + } + ] + } + } + ], + "sourceType": "script", + "tokens": [ + { + "type": "Keyword", + "value": "function", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 8 + } + }, + "range": [ + 0, + 8 + ] + }, + { + "type": "Identifier", + "value": "f", + "loc": { + "start": { + "line": 1, + "column": 9 + }, + "end": { + "line": 1, + "column": 10 + } + }, + "range": [ + 9, + 10 + ] + }, + { + "type": "Punctuator", + "value": "(", + "loc": { + "start": { + "line": 1, + "column": 10 + }, + "end": { + "line": 1, + "column": 11 + } + }, + "range": [ + 10, + 11 + ] + }, + { + "type": "Punctuator", + "value": ")", + "loc": { + "start": { + "line": 1, + "column": 11 + }, + "end": { + "line": 1, + "column": 12 + } + }, + "range": [ + 11, + 12 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 1, + "column": 13 + }, + "end": { + "line": 1, + "column": 14 + } + }, + "range": [ + 13, + 14 + ] + }, + { + "type": "Keyword", + "value": "class", + "loc": { + "start": { + "line": 2, + "column": 4 + }, + "end": { + "line": 2, + "column": 9 + } + }, + "range": [ + 19, + 24 + ] + }, + { + "type": "Identifier", + "value": "C", + "loc": { + "start": { + "line": 2, + "column": 10 + }, + "end": { + "line": 2, + "column": 11 + } + }, + "range": [ + 25, + 26 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 2, + "column": 12 + }, + "end": { + "line": 2, + "column": 13 + } + }, + "range": [ + 27, + 28 + ] + }, + { + "type": "Punctuator", + "value": "[", + "loc": { + "start": { + "line": 4, + "column": 8 + }, + "end": { + "line": 4, + "column": 9 + } + }, + "range": [ + 143, + 144 + ] + }, + { + "type": "Identifier", + "value": "arguments", + "loc": { + "start": { + "line": 4, + "column": 9 + }, + "end": { + "line": 4, + "column": 18 + } + }, + "range": [ + 144, + 153 + ] + }, + { + "type": "Punctuator", + "value": "]", + "loc": { + "start": { + "line": 4, + "column": 18 + }, + "end": { + "line": 4, + "column": 19 + } + }, + "range": [ + 153, + 154 + ] + }, + { + "type": "Punctuator", + "value": "=", + "loc": { + "start": { + "line": 4, + "column": 20 + }, + "end": { + "line": 4, + "column": 21 + } + }, + "range": [ + 155, + 156 + ] + }, + { + "type": "Numeric", + "value": "0", + "loc": { + "start": { + "line": 4, + "column": 22 + }, + "end": { + "line": 4, + "column": 23 + } + }, + "range": [ + 157, + 158 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 5, + "column": 4 + }, + "end": { + "line": 5, + "column": 5 + } + }, + "range": [ + 163, + 164 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 6, + "column": 0 + }, + "end": { + "line": 6, + "column": 1 + } + }, + "range": [ + 165, + 166 + ] + } + ] +}; \ No newline at end of file diff --git a/tests/fixtures/ecma-version/13/class-fields/valid-arguments-in-computed-key.src.js b/tests/fixtures/ecma-version/13/class-fields/valid-arguments-in-computed-key.src.js new file mode 100644 index 00000000..1b4db221 --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/valid-arguments-in-computed-key.src.js @@ -0,0 +1,6 @@ +function f() { + class C { + // `arguments` in computed keys is allowed (on the other hand, disallowed in field initializers). + [arguments] = 0 + } +} diff --git a/tests/fixtures/ecma-version/13/class-fields/valid-async-asi.result.js b/tests/fixtures/ecma-version/13/class-fields/valid-async-asi.result.js new file mode 100644 index 00000000..1757b8a8 --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/valid-async-asi.result.js @@ -0,0 +1,373 @@ +export default { + "type": "Program", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 5, + "column": 1 + } + }, + "range": [ + 0, + 98 + ], + "body": [ + { + "type": "ClassDeclaration", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 5, + "column": 1 + } + }, + "range": [ + 0, + 98 + ], + "id": { + "type": "Identifier", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "range": [ + 6, + 7 + ], + "name": "C" + }, + "superClass": null, + "body": { + "type": "ClassBody", + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 5, + "column": 1 + } + }, + "range": [ + 8, + 98 + ], + "body": [ + { + "type": "PropertyDefinition", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 3, + "column": 9 + } + }, + "range": [ + 75, + 80 + ], + "static": false, + "computed": false, + "key": { + "type": "Identifier", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 3, + "column": 9 + } + }, + "range": [ + 75, + 80 + ], + "name": "async" + }, + "value": null + }, + { + "type": "MethodDefinition", + "loc": { + "start": { + "line": 4, + "column": 4 + }, + "end": { + "line": 4, + "column": 15 + } + }, + "range": [ + 85, + 96 + ], + "static": false, + "computed": false, + "key": { + "type": "Identifier", + "loc": { + "start": { + "line": 4, + "column": 4 + }, + "end": { + "line": 4, + "column": 10 + } + }, + "range": [ + 85, + 91 + ], + "name": "method" + }, + "kind": "method", + "value": { + "type": "FunctionExpression", + "loc": { + "start": { + "line": 4, + "column": 10 + }, + "end": { + "line": 4, + "column": 15 + } + }, + "range": [ + 91, + 96 + ], + "id": null, + "expression": false, + "generator": false, + "async": false, + "params": [], + "body": { + "type": "BlockStatement", + "loc": { + "start": { + "line": 4, + "column": 13 + }, + "end": { + "line": 4, + "column": 15 + } + }, + "range": [ + 94, + 96 + ], + "body": [] + } + } + } + ] + } + } + ], + "sourceType": "script", + "tokens": [ + { + "type": "Keyword", + "value": "class", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 5 + } + }, + "range": [ + 0, + 5 + ] + }, + { + "type": "Identifier", + "value": "C", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "range": [ + 6, + 7 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 9 + } + }, + "range": [ + 8, + 9 + ] + }, + { + "type": "Identifier", + "value": "async", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 3, + "column": 9 + } + }, + "range": [ + 75, + 80 + ] + }, + { + "type": "Identifier", + "value": "method", + "loc": { + "start": { + "line": 4, + "column": 4 + }, + "end": { + "line": 4, + "column": 10 + } + }, + "range": [ + 85, + 91 + ] + }, + { + "type": "Punctuator", + "value": "(", + "loc": { + "start": { + "line": 4, + "column": 10 + }, + "end": { + "line": 4, + "column": 11 + } + }, + "range": [ + 91, + 92 + ] + }, + { + "type": "Punctuator", + "value": ")", + "loc": { + "start": { + "line": 4, + "column": 11 + }, + "end": { + "line": 4, + "column": 12 + } + }, + "range": [ + 92, + 93 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 4, + "column": 13 + }, + "end": { + "line": 4, + "column": 14 + } + }, + "range": [ + 94, + 95 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 4, + "column": 14 + }, + "end": { + "line": 4, + "column": 15 + } + }, + "range": [ + 95, + 96 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 5, + "column": 0 + }, + "end": { + "line": 5, + "column": 1 + } + }, + "range": [ + 97, + 98 + ] + } + ] +}; \ No newline at end of file diff --git a/tests/fixtures/ecma-version/13/class-fields/valid-async-asi.src.js b/tests/fixtures/ecma-version/13/class-fields/valid-async-asi.src.js new file mode 100644 index 00000000..49f07272 --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/valid-async-asi.src.js @@ -0,0 +1,5 @@ +class C { + // Line breaks preceded by `async` create fields by ASI. + async + method() {} +} diff --git a/tests/fixtures/ecma-version/13/class-fields/valid-computed-asi.result.js b/tests/fixtures/ecma-version/13/class-fields/valid-computed-asi.result.js new file mode 100644 index 00000000..4f44c719 --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/valid-computed-asi.result.js @@ -0,0 +1,559 @@ +export default { + "type": "Program", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 8, + "column": 1 + } + }, + "range": [ + 0, + 133 + ], + "body": [ + { + "type": "ClassDeclaration", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 8, + "column": 1 + } + }, + "range": [ + 0, + 133 + ], + "id": { + "type": "Identifier", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "range": [ + 6, + 7 + ], + "name": "C" + }, + "superClass": null, + "body": { + "type": "ClassBody", + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 8, + "column": 1 + } + }, + "range": [ + 8, + 133 + ], + "body": [ + { + "type": "PropertyDefinition", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 3, + "column": 7 + } + }, + "range": [ + 91, + 94 + ], + "static": false, + "computed": false, + "key": { + "type": "Identifier", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 3, + "column": 7 + } + }, + "range": [ + 91, + 94 + ], + "name": "aaa" + }, + "value": null + }, + { + "type": "PropertyDefinition", + "loc": { + "start": { + "line": 4, + "column": 4 + }, + "end": { + "line": 4, + "column": 11 + } + }, + "range": [ + 99, + 106 + ], + "static": false, + "computed": true, + "key": { + "type": "Literal", + "loc": { + "start": { + "line": 4, + "column": 5 + }, + "end": { + "line": 4, + "column": 10 + } + }, + "range": [ + 100, + 105 + ], + "value": "bbb", + "raw": "\"bbb\"" + }, + "value": null + }, + { + "type": "PropertyDefinition", + "loc": { + "start": { + "line": 6, + "column": 4 + }, + "end": { + "line": 6, + "column": 7 + } + }, + "range": [ + 112, + 115 + ], + "static": false, + "computed": false, + "key": { + "type": "Identifier", + "loc": { + "start": { + "line": 6, + "column": 4 + }, + "end": { + "line": 6, + "column": 7 + } + }, + "range": [ + 112, + 115 + ], + "name": "ccc" + }, + "value": null + }, + { + "type": "MethodDefinition", + "loc": { + "start": { + "line": 7, + "column": 4 + }, + "end": { + "line": 7, + "column": 15 + } + }, + "range": [ + 120, + 131 + ], + "static": false, + "computed": true, + "key": { + "type": "Literal", + "loc": { + "start": { + "line": 7, + "column": 5 + }, + "end": { + "line": 7, + "column": 10 + } + }, + "range": [ + 121, + 126 + ], + "value": "ddd", + "raw": "\"ddd\"" + }, + "kind": "method", + "value": { + "type": "FunctionExpression", + "loc": { + "start": { + "line": 7, + "column": 11 + }, + "end": { + "line": 7, + "column": 15 + } + }, + "range": [ + 127, + 131 + ], + "id": null, + "expression": false, + "generator": false, + "async": false, + "params": [], + "body": { + "type": "BlockStatement", + "loc": { + "start": { + "line": 7, + "column": 13 + }, + "end": { + "line": 7, + "column": 15 + } + }, + "range": [ + 129, + 131 + ], + "body": [] + } + } + } + ] + } + } + ], + "sourceType": "script", + "tokens": [ + { + "type": "Keyword", + "value": "class", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 5 + } + }, + "range": [ + 0, + 5 + ] + }, + { + "type": "Identifier", + "value": "C", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "range": [ + 6, + 7 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 9 + } + }, + "range": [ + 8, + 9 + ] + }, + { + "type": "Identifier", + "value": "aaa", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 3, + "column": 7 + } + }, + "range": [ + 91, + 94 + ] + }, + { + "type": "Punctuator", + "value": "[", + "loc": { + "start": { + "line": 4, + "column": 4 + }, + "end": { + "line": 4, + "column": 5 + } + }, + "range": [ + 99, + 100 + ] + }, + { + "type": "String", + "value": "\"bbb\"", + "loc": { + "start": { + "line": 4, + "column": 5 + }, + "end": { + "line": 4, + "column": 10 + } + }, + "range": [ + 100, + 105 + ] + }, + { + "type": "Punctuator", + "value": "]", + "loc": { + "start": { + "line": 4, + "column": 10 + }, + "end": { + "line": 4, + "column": 11 + } + }, + "range": [ + 105, + 106 + ] + }, + { + "type": "Identifier", + "value": "ccc", + "loc": { + "start": { + "line": 6, + "column": 4 + }, + "end": { + "line": 6, + "column": 7 + } + }, + "range": [ + 112, + 115 + ] + }, + { + "type": "Punctuator", + "value": "[", + "loc": { + "start": { + "line": 7, + "column": 4 + }, + "end": { + "line": 7, + "column": 5 + } + }, + "range": [ + 120, + 121 + ] + }, + { + "type": "String", + "value": "\"ddd\"", + "loc": { + "start": { + "line": 7, + "column": 5 + }, + "end": { + "line": 7, + "column": 10 + } + }, + "range": [ + 121, + 126 + ] + }, + { + "type": "Punctuator", + "value": "]", + "loc": { + "start": { + "line": 7, + "column": 10 + }, + "end": { + "line": 7, + "column": 11 + } + }, + "range": [ + 126, + 127 + ] + }, + { + "type": "Punctuator", + "value": "(", + "loc": { + "start": { + "line": 7, + "column": 11 + }, + "end": { + "line": 7, + "column": 12 + } + }, + "range": [ + 127, + 128 + ] + }, + { + "type": "Punctuator", + "value": ")", + "loc": { + "start": { + "line": 7, + "column": 12 + }, + "end": { + "line": 7, + "column": 13 + } + }, + "range": [ + 128, + 129 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 7, + "column": 13 + }, + "end": { + "line": 7, + "column": 14 + } + }, + "range": [ + 129, + 130 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 7, + "column": 14 + }, + "end": { + "line": 7, + "column": 15 + } + }, + "range": [ + 130, + 131 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 8, + "column": 0 + }, + "end": { + "line": 8, + "column": 1 + } + }, + "range": [ + 132, + 133 + ] + } + ] +}; \ No newline at end of file diff --git a/tests/fixtures/ecma-version/13/class-fields/valid-computed-asi.src.js b/tests/fixtures/ecma-version/13/class-fields/valid-computed-asi.src.js new file mode 100644 index 00000000..36dc8056 --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/valid-computed-asi.src.js @@ -0,0 +1,8 @@ +class C { + // Line breaks make fields by ASI. (there are three fields and a method) + aaa + ["bbb"] + + ccc + ["ddd"](){} +} diff --git a/tests/fixtures/ecma-version/13/class-fields/valid-computed-no-asi.result.js b/tests/fixtures/ecma-version/13/class-fields/valid-computed-no-asi.result.js new file mode 100644 index 00000000..e5ac4f59 --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/valid-computed-no-asi.result.js @@ -0,0 +1,444 @@ +export default { + "type": "Program", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 5, + "column": 1 + } + }, + "range": [ + 0, + 80 + ], + "body": [ + { + "type": "ClassDeclaration", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 5, + "column": 1 + } + }, + "range": [ + 0, + 80 + ], + "id": { + "type": "Identifier", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "range": [ + 6, + 7 + ], + "name": "C" + }, + "superClass": null, + "body": { + "type": "ClassBody", + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 5, + "column": 1 + } + }, + "range": [ + 8, + 80 + ], + "body": [ + { + "type": "PropertyDefinition", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 4, + "column": 9 + } + }, + "range": [ + 59, + 78 + ], + "static": false, + "computed": false, + "key": { + "type": "Identifier", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 3, + "column": 7 + } + }, + "range": [ + 59, + 62 + ], + "name": "aaa" + }, + "value": { + "type": "MemberExpression", + "loc": { + "start": { + "line": 3, + "column": 10 + }, + "end": { + "line": 4, + "column": 9 + } + }, + "range": [ + 65, + 78 + ], + "object": { + "type": "ObjectExpression", + "loc": { + "start": { + "line": 3, + "column": 10 + }, + "end": { + "line": 3, + "column": 13 + } + }, + "range": [ + 65, + 68 + ], + "properties": [ + { + "type": "Property", + "loc": { + "start": { + "line": 3, + "column": 11 + }, + "end": { + "line": 3, + "column": 12 + } + }, + "range": [ + 66, + 67 + ], + "method": false, + "shorthand": true, + "computed": false, + "key": { + "type": "Identifier", + "loc": { + "start": { + "line": 3, + "column": 11 + }, + "end": { + "line": 3, + "column": 12 + } + }, + "range": [ + 66, + 67 + ], + "name": "f" + }, + "kind": "init", + "value": { + "type": "Identifier", + "loc": { + "start": { + "line": 3, + "column": 11 + }, + "end": { + "line": 3, + "column": 12 + } + }, + "range": [ + 66, + 67 + ], + "name": "f" + } + } + ] + }, + "property": { + "type": "Literal", + "loc": { + "start": { + "line": 4, + "column": 5 + }, + "end": { + "line": 4, + "column": 8 + } + }, + "range": [ + 74, + 77 + ], + "value": "f", + "raw": "\"f\"" + }, + "computed": true, + "optional": false + } + } + ] + } + } + ], + "sourceType": "script", + "tokens": [ + { + "type": "Keyword", + "value": "class", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 5 + } + }, + "range": [ + 0, + 5 + ] + }, + { + "type": "Identifier", + "value": "C", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "range": [ + 6, + 7 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 9 + } + }, + "range": [ + 8, + 9 + ] + }, + { + "type": "Identifier", + "value": "aaa", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 3, + "column": 7 + } + }, + "range": [ + 59, + 62 + ] + }, + { + "type": "Punctuator", + "value": "=", + "loc": { + "start": { + "line": 3, + "column": 8 + }, + "end": { + "line": 3, + "column": 9 + } + }, + "range": [ + 63, + 64 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 3, + "column": 10 + }, + "end": { + "line": 3, + "column": 11 + } + }, + "range": [ + 65, + 66 + ] + }, + { + "type": "Identifier", + "value": "f", + "loc": { + "start": { + "line": 3, + "column": 11 + }, + "end": { + "line": 3, + "column": 12 + } + }, + "range": [ + 66, + 67 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 3, + "column": 12 + }, + "end": { + "line": 3, + "column": 13 + } + }, + "range": [ + 67, + 68 + ] + }, + { + "type": "Punctuator", + "value": "[", + "loc": { + "start": { + "line": 4, + "column": 4 + }, + "end": { + "line": 4, + "column": 5 + } + }, + "range": [ + 73, + 74 + ] + }, + { + "type": "String", + "value": "\"f\"", + "loc": { + "start": { + "line": 4, + "column": 5 + }, + "end": { + "line": 4, + "column": 8 + } + }, + "range": [ + 74, + 77 + ] + }, + { + "type": "Punctuator", + "value": "]", + "loc": { + "start": { + "line": 4, + "column": 8 + }, + "end": { + "line": 4, + "column": 9 + } + }, + "range": [ + 77, + 78 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 5, + "column": 0 + }, + "end": { + "line": 5, + "column": 1 + } + }, + "range": [ + 79, + 80 + ] + } + ] +}; \ No newline at end of file diff --git a/tests/fixtures/ecma-version/13/class-fields/valid-computed-no-asi.src.js b/tests/fixtures/ecma-version/13/class-fields/valid-computed-no-asi.src.js new file mode 100644 index 00000000..f2175dc8 --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/valid-computed-no-asi.src.js @@ -0,0 +1,5 @@ +class C { + // This is `{f}["f"]` member expression. + aaa = {f} + ["f"] +} diff --git a/tests/fixtures/ecma-version/13/class-fields/valid-computed.result.js b/tests/fixtures/ecma-version/13/class-fields/valid-computed.result.js new file mode 100644 index 00000000..6d14f563 --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/valid-computed.result.js @@ -0,0 +1,260 @@ +export default { + "type": "Program", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 3, + "column": 1 + } + }, + "range": [ + 0, + 22 + ], + "body": [ + { + "type": "ClassDeclaration", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 3, + "column": 1 + } + }, + "range": [ + 0, + 22 + ], + "id": { + "type": "Identifier", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "range": [ + 6, + 7 + ], + "name": "C" + }, + "superClass": null, + "body": { + "type": "ClassBody", + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 3, + "column": 1 + } + }, + "range": [ + 8, + 22 + ], + "body": [ + { + "type": "PropertyDefinition", + "loc": { + "start": { + "line": 2, + "column": 4 + }, + "end": { + "line": 2, + "column": 10 + } + }, + "range": [ + 14, + 20 + ], + "static": false, + "computed": true, + "key": { + "type": "Literal", + "loc": { + "start": { + "line": 2, + "column": 5 + }, + "end": { + "line": 2, + "column": 8 + } + }, + "range": [ + 15, + 18 + ], + "value": "a", + "raw": "\"a\"" + }, + "value": null + } + ] + } + } + ], + "sourceType": "script", + "tokens": [ + { + "type": "Keyword", + "value": "class", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 5 + } + }, + "range": [ + 0, + 5 + ] + }, + { + "type": "Identifier", + "value": "C", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "range": [ + 6, + 7 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 9 + } + }, + "range": [ + 8, + 9 + ] + }, + { + "type": "Punctuator", + "value": "[", + "loc": { + "start": { + "line": 2, + "column": 4 + }, + "end": { + "line": 2, + "column": 5 + } + }, + "range": [ + 14, + 15 + ] + }, + { + "type": "String", + "value": "\"a\"", + "loc": { + "start": { + "line": 2, + "column": 5 + }, + "end": { + "line": 2, + "column": 8 + } + }, + "range": [ + 15, + 18 + ] + }, + { + "type": "Punctuator", + "value": "]", + "loc": { + "start": { + "line": 2, + "column": 8 + }, + "end": { + "line": 2, + "column": 9 + } + }, + "range": [ + 18, + 19 + ] + }, + { + "type": "Punctuator", + "value": ";", + "loc": { + "start": { + "line": 2, + "column": 9 + }, + "end": { + "line": 2, + "column": 10 + } + }, + "range": [ + 19, + 20 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 3, + "column": 0 + }, + "end": { + "line": 3, + "column": 1 + } + }, + "range": [ + 21, + 22 + ] + } + ] +}; \ No newline at end of file diff --git a/tests/fixtures/ecma-version/13/class-fields/valid-computed.src.js b/tests/fixtures/ecma-version/13/class-fields/valid-computed.src.js new file mode 100644 index 00000000..66c98d27 --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/valid-computed.src.js @@ -0,0 +1,3 @@ +class C { + ["a"]; +} diff --git a/tests/fixtures/ecma-version/13/class-fields/valid-contextual-keywords-init.result.js b/tests/fixtures/ecma-version/13/class-fields/valid-contextual-keywords-init.result.js new file mode 100644 index 00000000..2d37bbaa --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/valid-contextual-keywords-init.result.js @@ -0,0 +1,661 @@ +export default { + "type": "Program", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 6, + "column": 1 + } + }, + "range": [ + 0, + 68 + ], + "body": [ + { + "type": "ClassDeclaration", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 6, + "column": 1 + } + }, + "range": [ + 0, + 68 + ], + "id": { + "type": "Identifier", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "range": [ + 6, + 7 + ], + "name": "C" + }, + "superClass": null, + "body": { + "type": "ClassBody", + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 6, + "column": 1 + } + }, + "range": [ + 8, + 68 + ], + "body": [ + { + "type": "PropertyDefinition", + "loc": { + "start": { + "line": 2, + "column": 4 + }, + "end": { + "line": 2, + "column": 12 + } + }, + "range": [ + 14, + 22 + ], + "static": false, + "computed": false, + "key": { + "type": "Identifier", + "loc": { + "start": { + "line": 2, + "column": 4 + }, + "end": { + "line": 2, + "column": 7 + } + }, + "range": [ + 14, + 17 + ], + "name": "get" + }, + "value": { + "type": "Literal", + "loc": { + "start": { + "line": 2, + "column": 10 + }, + "end": { + "line": 2, + "column": 11 + } + }, + "range": [ + 20, + 21 + ], + "value": 0, + "raw": "0" + } + }, + { + "type": "PropertyDefinition", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 3, + "column": 12 + } + }, + "range": [ + 27, + 35 + ], + "static": false, + "computed": false, + "key": { + "type": "Identifier", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 3, + "column": 7 + } + }, + "range": [ + 27, + 30 + ], + "name": "set" + }, + "value": { + "type": "Literal", + "loc": { + "start": { + "line": 3, + "column": 10 + }, + "end": { + "line": 3, + "column": 11 + } + }, + "range": [ + 33, + 34 + ], + "value": 0, + "raw": "0" + } + }, + { + "type": "PropertyDefinition", + "loc": { + "start": { + "line": 4, + "column": 4 + }, + "end": { + "line": 4, + "column": 15 + } + }, + "range": [ + 40, + 51 + ], + "static": false, + "computed": false, + "key": { + "type": "Identifier", + "loc": { + "start": { + "line": 4, + "column": 4 + }, + "end": { + "line": 4, + "column": 10 + } + }, + "range": [ + 40, + 46 + ], + "name": "static" + }, + "value": { + "type": "Literal", + "loc": { + "start": { + "line": 4, + "column": 13 + }, + "end": { + "line": 4, + "column": 14 + } + }, + "range": [ + 49, + 50 + ], + "value": 0, + "raw": "0" + } + }, + { + "type": "PropertyDefinition", + "loc": { + "start": { + "line": 5, + "column": 4 + }, + "end": { + "line": 5, + "column": 14 + } + }, + "range": [ + 56, + 66 + ], + "static": false, + "computed": false, + "key": { + "type": "Identifier", + "loc": { + "start": { + "line": 5, + "column": 4 + }, + "end": { + "line": 5, + "column": 9 + } + }, + "range": [ + 56, + 61 + ], + "name": "async" + }, + "value": { + "type": "Literal", + "loc": { + "start": { + "line": 5, + "column": 12 + }, + "end": { + "line": 5, + "column": 13 + } + }, + "range": [ + 64, + 65 + ], + "value": 0, + "raw": "0" + } + } + ] + } + } + ], + "sourceType": "script", + "tokens": [ + { + "type": "Keyword", + "value": "class", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 5 + } + }, + "range": [ + 0, + 5 + ] + }, + { + "type": "Identifier", + "value": "C", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "range": [ + 6, + 7 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 9 + } + }, + "range": [ + 8, + 9 + ] + }, + { + "type": "Identifier", + "value": "get", + "loc": { + "start": { + "line": 2, + "column": 4 + }, + "end": { + "line": 2, + "column": 7 + } + }, + "range": [ + 14, + 17 + ] + }, + { + "type": "Punctuator", + "value": "=", + "loc": { + "start": { + "line": 2, + "column": 8 + }, + "end": { + "line": 2, + "column": 9 + } + }, + "range": [ + 18, + 19 + ] + }, + { + "type": "Numeric", + "value": "0", + "loc": { + "start": { + "line": 2, + "column": 10 + }, + "end": { + "line": 2, + "column": 11 + } + }, + "range": [ + 20, + 21 + ] + }, + { + "type": "Punctuator", + "value": ";", + "loc": { + "start": { + "line": 2, + "column": 11 + }, + "end": { + "line": 2, + "column": 12 + } + }, + "range": [ + 21, + 22 + ] + }, + { + "type": "Identifier", + "value": "set", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 3, + "column": 7 + } + }, + "range": [ + 27, + 30 + ] + }, + { + "type": "Punctuator", + "value": "=", + "loc": { + "start": { + "line": 3, + "column": 8 + }, + "end": { + "line": 3, + "column": 9 + } + }, + "range": [ + 31, + 32 + ] + }, + { + "type": "Numeric", + "value": "0", + "loc": { + "start": { + "line": 3, + "column": 10 + }, + "end": { + "line": 3, + "column": 11 + } + }, + "range": [ + 33, + 34 + ] + }, + { + "type": "Punctuator", + "value": ";", + "loc": { + "start": { + "line": 3, + "column": 11 + }, + "end": { + "line": 3, + "column": 12 + } + }, + "range": [ + 34, + 35 + ] + }, + { + "type": "Keyword", + "value": "static", + "loc": { + "start": { + "line": 4, + "column": 4 + }, + "end": { + "line": 4, + "column": 10 + } + }, + "range": [ + 40, + 46 + ] + }, + { + "type": "Punctuator", + "value": "=", + "loc": { + "start": { + "line": 4, + "column": 11 + }, + "end": { + "line": 4, + "column": 12 + } + }, + "range": [ + 47, + 48 + ] + }, + { + "type": "Numeric", + "value": "0", + "loc": { + "start": { + "line": 4, + "column": 13 + }, + "end": { + "line": 4, + "column": 14 + } + }, + "range": [ + 49, + 50 + ] + }, + { + "type": "Punctuator", + "value": ";", + "loc": { + "start": { + "line": 4, + "column": 14 + }, + "end": { + "line": 4, + "column": 15 + } + }, + "range": [ + 50, + 51 + ] + }, + { + "type": "Identifier", + "value": "async", + "loc": { + "start": { + "line": 5, + "column": 4 + }, + "end": { + "line": 5, + "column": 9 + } + }, + "range": [ + 56, + 61 + ] + }, + { + "type": "Punctuator", + "value": "=", + "loc": { + "start": { + "line": 5, + "column": 10 + }, + "end": { + "line": 5, + "column": 11 + } + }, + "range": [ + 62, + 63 + ] + }, + { + "type": "Numeric", + "value": "0", + "loc": { + "start": { + "line": 5, + "column": 12 + }, + "end": { + "line": 5, + "column": 13 + } + }, + "range": [ + 64, + 65 + ] + }, + { + "type": "Punctuator", + "value": ";", + "loc": { + "start": { + "line": 5, + "column": 13 + }, + "end": { + "line": 5, + "column": 14 + } + }, + "range": [ + 65, + 66 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 6, + "column": 0 + }, + "end": { + "line": 6, + "column": 1 + } + }, + "range": [ + 67, + 68 + ] + } + ] +}; \ No newline at end of file diff --git a/tests/fixtures/ecma-version/13/class-fields/valid-contextual-keywords-init.src.js b/tests/fixtures/ecma-version/13/class-fields/valid-contextual-keywords-init.src.js new file mode 100644 index 00000000..43bb5fa9 --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/valid-contextual-keywords-init.src.js @@ -0,0 +1,6 @@ +class C { + get = 0; + set = 0; + static = 0; + async = 0; +} diff --git a/tests/fixtures/ecma-version/13/class-fields/valid-contextual-keywords.result.js b/tests/fixtures/ecma-version/13/class-fields/valid-contextual-keywords.result.js new file mode 100644 index 00000000..450c243e --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/valid-contextual-keywords.result.js @@ -0,0 +1,445 @@ +export default { + "type": "Program", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 6, + "column": 1 + } + }, + "range": [ + 0, + 52 + ], + "body": [ + { + "type": "ClassDeclaration", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 6, + "column": 1 + } + }, + "range": [ + 0, + 52 + ], + "id": { + "type": "Identifier", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "range": [ + 6, + 7 + ], + "name": "C" + }, + "superClass": null, + "body": { + "type": "ClassBody", + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 6, + "column": 1 + } + }, + "range": [ + 8, + 52 + ], + "body": [ + { + "type": "PropertyDefinition", + "loc": { + "start": { + "line": 2, + "column": 4 + }, + "end": { + "line": 2, + "column": 8 + } + }, + "range": [ + 14, + 18 + ], + "static": false, + "computed": false, + "key": { + "type": "Identifier", + "loc": { + "start": { + "line": 2, + "column": 4 + }, + "end": { + "line": 2, + "column": 7 + } + }, + "range": [ + 14, + 17 + ], + "name": "get" + }, + "value": null + }, + { + "type": "PropertyDefinition", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 3, + "column": 8 + } + }, + "range": [ + 23, + 27 + ], + "static": false, + "computed": false, + "key": { + "type": "Identifier", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 3, + "column": 7 + } + }, + "range": [ + 23, + 26 + ], + "name": "set" + }, + "value": null + }, + { + "type": "PropertyDefinition", + "loc": { + "start": { + "line": 4, + "column": 4 + }, + "end": { + "line": 4, + "column": 11 + } + }, + "range": [ + 32, + 39 + ], + "static": false, + "computed": false, + "key": { + "type": "Identifier", + "loc": { + "start": { + "line": 4, + "column": 4 + }, + "end": { + "line": 4, + "column": 10 + } + }, + "range": [ + 32, + 38 + ], + "name": "static" + }, + "value": null + }, + { + "type": "PropertyDefinition", + "loc": { + "start": { + "line": 5, + "column": 4 + }, + "end": { + "line": 5, + "column": 10 + } + }, + "range": [ + 44, + 50 + ], + "static": false, + "computed": false, + "key": { + "type": "Identifier", + "loc": { + "start": { + "line": 5, + "column": 4 + }, + "end": { + "line": 5, + "column": 9 + } + }, + "range": [ + 44, + 49 + ], + "name": "async" + }, + "value": null + } + ] + } + } + ], + "sourceType": "script", + "tokens": [ + { + "type": "Keyword", + "value": "class", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 5 + } + }, + "range": [ + 0, + 5 + ] + }, + { + "type": "Identifier", + "value": "C", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "range": [ + 6, + 7 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 9 + } + }, + "range": [ + 8, + 9 + ] + }, + { + "type": "Identifier", + "value": "get", + "loc": { + "start": { + "line": 2, + "column": 4 + }, + "end": { + "line": 2, + "column": 7 + } + }, + "range": [ + 14, + 17 + ] + }, + { + "type": "Punctuator", + "value": ";", + "loc": { + "start": { + "line": 2, + "column": 7 + }, + "end": { + "line": 2, + "column": 8 + } + }, + "range": [ + 17, + 18 + ] + }, + { + "type": "Identifier", + "value": "set", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 3, + "column": 7 + } + }, + "range": [ + 23, + 26 + ] + }, + { + "type": "Punctuator", + "value": ";", + "loc": { + "start": { + "line": 3, + "column": 7 + }, + "end": { + "line": 3, + "column": 8 + } + }, + "range": [ + 26, + 27 + ] + }, + { + "type": "Keyword", + "value": "static", + "loc": { + "start": { + "line": 4, + "column": 4 + }, + "end": { + "line": 4, + "column": 10 + } + }, + "range": [ + 32, + 38 + ] + }, + { + "type": "Punctuator", + "value": ";", + "loc": { + "start": { + "line": 4, + "column": 10 + }, + "end": { + "line": 4, + "column": 11 + } + }, + "range": [ + 38, + 39 + ] + }, + { + "type": "Identifier", + "value": "async", + "loc": { + "start": { + "line": 5, + "column": 4 + }, + "end": { + "line": 5, + "column": 9 + } + }, + "range": [ + 44, + 49 + ] + }, + { + "type": "Punctuator", + "value": ";", + "loc": { + "start": { + "line": 5, + "column": 9 + }, + "end": { + "line": 5, + "column": 10 + } + }, + "range": [ + 49, + 50 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 6, + "column": 0 + }, + "end": { + "line": 6, + "column": 1 + } + }, + "range": [ + 51, + 52 + ] + } + ] +}; \ No newline at end of file diff --git a/tests/fixtures/ecma-version/13/class-fields/valid-contextual-keywords.src.js b/tests/fixtures/ecma-version/13/class-fields/valid-contextual-keywords.src.js new file mode 100644 index 00000000..d47e822c --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/valid-contextual-keywords.src.js @@ -0,0 +1,6 @@ +class C { + get; + set; + static; + async; +} diff --git a/tests/fixtures/ecma-version/13/class-fields/valid-get-set-star-no-asi.result.js b/tests/fixtures/ecma-version/13/class-fields/valid-get-set-star-no-asi.result.js new file mode 100644 index 00000000..95d02bab --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/valid-get-set-star-no-asi.result.js @@ -0,0 +1,744 @@ +export default { + "type": "Program", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 11, + "column": 1 + } + }, + "range": [ + 0, + 118 + ], + "body": [ + { + "type": "ClassDeclaration", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 11, + "column": 1 + } + }, + "range": [ + 0, + 118 + ], + "id": { + "type": "Identifier", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "range": [ + 6, + 7 + ], + "name": "C" + }, + "superClass": null, + "body": { + "type": "ClassBody", + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 11, + "column": 1 + } + }, + "range": [ + 8, + 118 + ], + "body": [ + { + "type": "MethodDefinition", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 4, + "column": 11 + } + }, + "range": [ + 59, + 74 + ], + "static": false, + "computed": false, + "key": { + "type": "Identifier", + "loc": { + "start": { + "line": 4, + "column": 4 + }, + "end": { + "line": 4, + "column": 7 + } + }, + "range": [ + 67, + 70 + ], + "name": "get" + }, + "kind": "get", + "value": { + "type": "FunctionExpression", + "loc": { + "start": { + "line": 4, + "column": 7 + }, + "end": { + "line": 4, + "column": 11 + } + }, + "range": [ + 70, + 74 + ], + "id": null, + "expression": false, + "generator": false, + "async": false, + "params": [], + "body": { + "type": "BlockStatement", + "loc": { + "start": { + "line": 4, + "column": 9 + }, + "end": { + "line": 4, + "column": 11 + } + }, + "range": [ + 72, + 74 + ], + "body": [] + } + } + }, + { + "type": "MethodDefinition", + "loc": { + "start": { + "line": 6, + "column": 4 + }, + "end": { + "line": 7, + "column": 12 + } + }, + "range": [ + 80, + 96 + ], + "static": false, + "computed": false, + "key": { + "type": "Identifier", + "loc": { + "start": { + "line": 7, + "column": 4 + }, + "end": { + "line": 7, + "column": 7 + } + }, + "range": [ + 88, + 91 + ], + "name": "set" + }, + "kind": "set", + "value": { + "type": "FunctionExpression", + "loc": { + "start": { + "line": 7, + "column": 7 + }, + "end": { + "line": 7, + "column": 12 + } + }, + "range": [ + 91, + 96 + ], + "id": null, + "expression": false, + "generator": false, + "async": false, + "params": [ + { + "type": "Identifier", + "loc": { + "start": { + "line": 7, + "column": 8 + }, + "end": { + "line": 7, + "column": 9 + } + }, + "range": [ + 92, + 93 + ], + "name": "x" + } + ], + "body": { + "type": "BlockStatement", + "loc": { + "start": { + "line": 7, + "column": 10 + }, + "end": { + "line": 7, + "column": 12 + } + }, + "range": [ + 94, + 96 + ], + "body": [] + } + } + }, + { + "type": "MethodDefinition", + "loc": { + "start": { + "line": 9, + "column": 4 + }, + "end": { + "line": 10, + "column": 12 + } + }, + "range": [ + 102, + 116 + ], + "static": false, + "computed": false, + "key": { + "type": "Identifier", + "loc": { + "start": { + "line": 10, + "column": 4 + }, + "end": { + "line": 10, + "column": 8 + } + }, + "range": [ + 108, + 112 + ], + "name": "star" + }, + "kind": "method", + "value": { + "type": "FunctionExpression", + "loc": { + "start": { + "line": 10, + "column": 8 + }, + "end": { + "line": 10, + "column": 12 + } + }, + "range": [ + 112, + 116 + ], + "id": null, + "expression": false, + "generator": true, + "async": false, + "params": [], + "body": { + "type": "BlockStatement", + "loc": { + "start": { + "line": 10, + "column": 10 + }, + "end": { + "line": 10, + "column": 12 + } + }, + "range": [ + 114, + 116 + ], + "body": [] + } + } + } + ] + } + } + ], + "sourceType": "script", + "tokens": [ + { + "type": "Keyword", + "value": "class", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 5 + } + }, + "range": [ + 0, + 5 + ] + }, + { + "type": "Identifier", + "value": "C", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "range": [ + 6, + 7 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 9 + } + }, + "range": [ + 8, + 9 + ] + }, + { + "type": "Identifier", + "value": "get", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 3, + "column": 7 + } + }, + "range": [ + 59, + 62 + ] + }, + { + "type": "Identifier", + "value": "get", + "loc": { + "start": { + "line": 4, + "column": 4 + }, + "end": { + "line": 4, + "column": 7 + } + }, + "range": [ + 67, + 70 + ] + }, + { + "type": "Punctuator", + "value": "(", + "loc": { + "start": { + "line": 4, + "column": 7 + }, + "end": { + "line": 4, + "column": 8 + } + }, + "range": [ + 70, + 71 + ] + }, + { + "type": "Punctuator", + "value": ")", + "loc": { + "start": { + "line": 4, + "column": 8 + }, + "end": { + "line": 4, + "column": 9 + } + }, + "range": [ + 71, + 72 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 4, + "column": 9 + }, + "end": { + "line": 4, + "column": 10 + } + }, + "range": [ + 72, + 73 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 4, + "column": 10 + }, + "end": { + "line": 4, + "column": 11 + } + }, + "range": [ + 73, + 74 + ] + }, + { + "type": "Identifier", + "value": "set", + "loc": { + "start": { + "line": 6, + "column": 4 + }, + "end": { + "line": 6, + "column": 7 + } + }, + "range": [ + 80, + 83 + ] + }, + { + "type": "Identifier", + "value": "set", + "loc": { + "start": { + "line": 7, + "column": 4 + }, + "end": { + "line": 7, + "column": 7 + } + }, + "range": [ + 88, + 91 + ] + }, + { + "type": "Punctuator", + "value": "(", + "loc": { + "start": { + "line": 7, + "column": 7 + }, + "end": { + "line": 7, + "column": 8 + } + }, + "range": [ + 91, + 92 + ] + }, + { + "type": "Identifier", + "value": "x", + "loc": { + "start": { + "line": 7, + "column": 8 + }, + "end": { + "line": 7, + "column": 9 + } + }, + "range": [ + 92, + 93 + ] + }, + { + "type": "Punctuator", + "value": ")", + "loc": { + "start": { + "line": 7, + "column": 9 + }, + "end": { + "line": 7, + "column": 10 + } + }, + "range": [ + 93, + 94 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 7, + "column": 10 + }, + "end": { + "line": 7, + "column": 11 + } + }, + "range": [ + 94, + 95 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 7, + "column": 11 + }, + "end": { + "line": 7, + "column": 12 + } + }, + "range": [ + 95, + 96 + ] + }, + { + "type": "Punctuator", + "value": "*", + "loc": { + "start": { + "line": 9, + "column": 4 + }, + "end": { + "line": 9, + "column": 5 + } + }, + "range": [ + 102, + 103 + ] + }, + { + "type": "Identifier", + "value": "star", + "loc": { + "start": { + "line": 10, + "column": 4 + }, + "end": { + "line": 10, + "column": 8 + } + }, + "range": [ + 108, + 112 + ] + }, + { + "type": "Punctuator", + "value": "(", + "loc": { + "start": { + "line": 10, + "column": 8 + }, + "end": { + "line": 10, + "column": 9 + } + }, + "range": [ + 112, + 113 + ] + }, + { + "type": "Punctuator", + "value": ")", + "loc": { + "start": { + "line": 10, + "column": 9 + }, + "end": { + "line": 10, + "column": 10 + } + }, + "range": [ + 113, + 114 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 10, + "column": 10 + }, + "end": { + "line": 10, + "column": 11 + } + }, + "range": [ + 114, + 115 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 10, + "column": 11 + }, + "end": { + "line": 10, + "column": 12 + } + }, + "range": [ + 115, + 116 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 11, + "column": 0 + }, + "end": { + "line": 11, + "column": 1 + } + }, + "range": [ + 117, + 118 + ] + } + ] +}; \ No newline at end of file diff --git a/tests/fixtures/ecma-version/13/class-fields/valid-get-set-star-no-asi.src.js b/tests/fixtures/ecma-version/13/class-fields/valid-get-set-star-no-asi.src.js new file mode 100644 index 00000000..f13ac182 --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/valid-get-set-star-no-asi.src.js @@ -0,0 +1,11 @@ +class C { + // Line breaks don't make fields by ASI. + get + get(){} + + set + set(x){} + + * + star(){} +} diff --git a/tests/fixtures/ecma-version/13/class-fields/valid-init-arguments.result.js b/tests/fixtures/ecma-version/13/class-fields/valid-init-arguments.result.js new file mode 100644 index 00000000..088f7e92 --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/valid-init-arguments.result.js @@ -0,0 +1,572 @@ +export default { + "type": "Program", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 8, + "column": 1 + } + }, + "range": [ + 0, + 198 + ], + "body": [ + { + "type": "FunctionDeclaration", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 8, + "column": 1 + } + }, + "range": [ + 0, + 198 + ], + "id": { + "type": "Identifier", + "loc": { + "start": { + "line": 1, + "column": 9 + }, + "end": { + "line": 1, + "column": 10 + } + }, + "range": [ + 9, + 10 + ], + "name": "f" + }, + "expression": false, + "generator": false, + "async": false, + "params": [], + "body": { + "type": "BlockStatement", + "loc": { + "start": { + "line": 1, + "column": 13 + }, + "end": { + "line": 8, + "column": 1 + } + }, + "range": [ + 13, + 198 + ], + "body": [ + { + "type": "ClassDeclaration", + "loc": { + "start": { + "line": 2, + "column": 4 + }, + "end": { + "line": 7, + "column": 5 + } + }, + "range": [ + 19, + 196 + ], + "id": { + "type": "Identifier", + "loc": { + "start": { + "line": 2, + "column": 10 + }, + "end": { + "line": 2, + "column": 11 + } + }, + "range": [ + 25, + 26 + ], + "name": "C" + }, + "superClass": null, + "body": { + "type": "ClassBody", + "loc": { + "start": { + "line": 2, + "column": 12 + }, + "end": { + "line": 7, + "column": 5 + } + }, + "range": [ + 27, + 196 + ], + "body": [ + { + "type": "PropertyDefinition", + "loc": { + "start": { + "line": 4, + "column": 8 + }, + "end": { + "line": 6, + "column": 9 + } + }, + "range": [ + 140, + 190 + ], + "static": false, + "computed": false, + "key": { + "type": "Identifier", + "loc": { + "start": { + "line": 4, + "column": 8 + }, + "end": { + "line": 4, + "column": 11 + } + }, + "range": [ + 140, + 143 + ], + "name": "aaa" + }, + "value": { + "type": "FunctionExpression", + "loc": { + "start": { + "line": 4, + "column": 14 + }, + "end": { + "line": 6, + "column": 9 + } + }, + "range": [ + 146, + 190 + ], + "id": null, + "expression": false, + "generator": false, + "async": false, + "params": [], + "body": { + "type": "BlockStatement", + "loc": { + "start": { + "line": 4, + "column": 25 + }, + "end": { + "line": 6, + "column": 9 + } + }, + "range": [ + 157, + 190 + ], + "body": [ + { + "type": "ExpressionStatement", + "loc": { + "start": { + "line": 5, + "column": 12 + }, + "end": { + "line": 5, + "column": 21 + } + }, + "range": [ + 171, + 180 + ], + "expression": { + "type": "Identifier", + "loc": { + "start": { + "line": 5, + "column": 12 + }, + "end": { + "line": 5, + "column": 21 + } + }, + "range": [ + 171, + 180 + ], + "name": "arguments" + } + } + ] + } + } + } + ] + } + } + ] + } + } + ], + "sourceType": "script", + "tokens": [ + { + "type": "Keyword", + "value": "function", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 8 + } + }, + "range": [ + 0, + 8 + ] + }, + { + "type": "Identifier", + "value": "f", + "loc": { + "start": { + "line": 1, + "column": 9 + }, + "end": { + "line": 1, + "column": 10 + } + }, + "range": [ + 9, + 10 + ] + }, + { + "type": "Punctuator", + "value": "(", + "loc": { + "start": { + "line": 1, + "column": 10 + }, + "end": { + "line": 1, + "column": 11 + } + }, + "range": [ + 10, + 11 + ] + }, + { + "type": "Punctuator", + "value": ")", + "loc": { + "start": { + "line": 1, + "column": 11 + }, + "end": { + "line": 1, + "column": 12 + } + }, + "range": [ + 11, + 12 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 1, + "column": 13 + }, + "end": { + "line": 1, + "column": 14 + } + }, + "range": [ + 13, + 14 + ] + }, + { + "type": "Keyword", + "value": "class", + "loc": { + "start": { + "line": 2, + "column": 4 + }, + "end": { + "line": 2, + "column": 9 + } + }, + "range": [ + 19, + 24 + ] + }, + { + "type": "Identifier", + "value": "C", + "loc": { + "start": { + "line": 2, + "column": 10 + }, + "end": { + "line": 2, + "column": 11 + } + }, + "range": [ + 25, + 26 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 2, + "column": 12 + }, + "end": { + "line": 2, + "column": 13 + } + }, + "range": [ + 27, + 28 + ] + }, + { + "type": "Identifier", + "value": "aaa", + "loc": { + "start": { + "line": 4, + "column": 8 + }, + "end": { + "line": 4, + "column": 11 + } + }, + "range": [ + 140, + 143 + ] + }, + { + "type": "Punctuator", + "value": "=", + "loc": { + "start": { + "line": 4, + "column": 12 + }, + "end": { + "line": 4, + "column": 13 + } + }, + "range": [ + 144, + 145 + ] + }, + { + "type": "Keyword", + "value": "function", + "loc": { + "start": { + "line": 4, + "column": 14 + }, + "end": { + "line": 4, + "column": 22 + } + }, + "range": [ + 146, + 154 + ] + }, + { + "type": "Punctuator", + "value": "(", + "loc": { + "start": { + "line": 4, + "column": 22 + }, + "end": { + "line": 4, + "column": 23 + } + }, + "range": [ + 154, + 155 + ] + }, + { + "type": "Punctuator", + "value": ")", + "loc": { + "start": { + "line": 4, + "column": 23 + }, + "end": { + "line": 4, + "column": 24 + } + }, + "range": [ + 155, + 156 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 4, + "column": 25 + }, + "end": { + "line": 4, + "column": 26 + } + }, + "range": [ + 157, + 158 + ] + }, + { + "type": "Identifier", + "value": "arguments", + "loc": { + "start": { + "line": 5, + "column": 12 + }, + "end": { + "line": 5, + "column": 21 + } + }, + "range": [ + 171, + 180 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 6, + "column": 8 + }, + "end": { + "line": 6, + "column": 9 + } + }, + "range": [ + 189, + 190 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 7, + "column": 4 + }, + "end": { + "line": 7, + "column": 5 + } + }, + "range": [ + 195, + 196 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 8, + "column": 0 + }, + "end": { + "line": 8, + "column": 1 + } + }, + "range": [ + 197, + 198 + ] + } + ] +}; \ No newline at end of file diff --git a/tests/fixtures/ecma-version/13/class-fields/valid-init-arguments.src.js b/tests/fixtures/ecma-version/13/class-fields/valid-init-arguments.src.js new file mode 100644 index 00000000..946a705a --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/valid-init-arguments.src.js @@ -0,0 +1,8 @@ +function f() { + class C { + // Field initializers disallow `arguments` reference, but it's OK in function expression body. + aaa = function() { + arguments + } + } +} diff --git a/tests/fixtures/ecma-version/13/class-fields/valid-init-arrow-super.result.js b/tests/fixtures/ecma-version/13/class-fields/valid-init-arrow-super.result.js new file mode 100644 index 00000000..85753e4c --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/valid-init-arrow-super.result.js @@ -0,0 +1,461 @@ +export default { + "type": "Program", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 3, + "column": 1 + } + }, + "range": [ + 0, + 49 + ], + "body": [ + { + "type": "ClassDeclaration", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 3, + "column": 1 + } + }, + "range": [ + 0, + 49 + ], + "id": { + "type": "Identifier", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "range": [ + 6, + 7 + ], + "name": "C" + }, + "superClass": null, + "body": { + "type": "ClassBody", + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 3, + "column": 1 + } + }, + "range": [ + 8, + 49 + ], + "body": [ + { + "type": "PropertyDefinition", + "loc": { + "start": { + "line": 2, + "column": 4 + }, + "end": { + "line": 2, + "column": 37 + } + }, + "range": [ + 14, + 47 + ], + "static": false, + "computed": false, + "key": { + "type": "Identifier", + "loc": { + "start": { + "line": 2, + "column": 4 + }, + "end": { + "line": 2, + "column": 12 + } + }, + "range": [ + 14, + 22 + ], + "name": "toString" + }, + "value": { + "type": "ArrowFunctionExpression", + "loc": { + "start": { + "line": 2, + "column": 15 + }, + "end": { + "line": 2, + "column": 37 + } + }, + "range": [ + 25, + 47 + ], + "id": null, + "expression": true, + "generator": false, + "async": false, + "params": [], + "body": { + "type": "CallExpression", + "loc": { + "start": { + "line": 2, + "column": 21 + }, + "end": { + "line": 2, + "column": 37 + } + }, + "range": [ + 31, + 47 + ], + "callee": { + "type": "MemberExpression", + "loc": { + "start": { + "line": 2, + "column": 21 + }, + "end": { + "line": 2, + "column": 35 + } + }, + "range": [ + 31, + 45 + ], + "object": { + "type": "Super", + "loc": { + "start": { + "line": 2, + "column": 21 + }, + "end": { + "line": 2, + "column": 26 + } + }, + "range": [ + 31, + 36 + ] + }, + "property": { + "type": "Identifier", + "loc": { + "start": { + "line": 2, + "column": 27 + }, + "end": { + "line": 2, + "column": 35 + } + }, + "range": [ + 37, + 45 + ], + "name": "toString" + }, + "computed": false, + "optional": false + }, + "arguments": [], + "optional": false + } + } + } + ] + } + } + ], + "sourceType": "script", + "tokens": [ + { + "type": "Keyword", + "value": "class", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 5 + } + }, + "range": [ + 0, + 5 + ] + }, + { + "type": "Identifier", + "value": "C", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "range": [ + 6, + 7 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 9 + } + }, + "range": [ + 8, + 9 + ] + }, + { + "type": "Identifier", + "value": "toString", + "loc": { + "start": { + "line": 2, + "column": 4 + }, + "end": { + "line": 2, + "column": 12 + } + }, + "range": [ + 14, + 22 + ] + }, + { + "type": "Punctuator", + "value": "=", + "loc": { + "start": { + "line": 2, + "column": 13 + }, + "end": { + "line": 2, + "column": 14 + } + }, + "range": [ + 23, + 24 + ] + }, + { + "type": "Punctuator", + "value": "(", + "loc": { + "start": { + "line": 2, + "column": 15 + }, + "end": { + "line": 2, + "column": 16 + } + }, + "range": [ + 25, + 26 + ] + }, + { + "type": "Punctuator", + "value": ")", + "loc": { + "start": { + "line": 2, + "column": 16 + }, + "end": { + "line": 2, + "column": 17 + } + }, + "range": [ + 26, + 27 + ] + }, + { + "type": "Punctuator", + "value": "=>", + "loc": { + "start": { + "line": 2, + "column": 18 + }, + "end": { + "line": 2, + "column": 20 + } + }, + "range": [ + 28, + 30 + ] + }, + { + "type": "Keyword", + "value": "super", + "loc": { + "start": { + "line": 2, + "column": 21 + }, + "end": { + "line": 2, + "column": 26 + } + }, + "range": [ + 31, + 36 + ] + }, + { + "type": "Punctuator", + "value": ".", + "loc": { + "start": { + "line": 2, + "column": 26 + }, + "end": { + "line": 2, + "column": 27 + } + }, + "range": [ + 36, + 37 + ] + }, + { + "type": "Identifier", + "value": "toString", + "loc": { + "start": { + "line": 2, + "column": 27 + }, + "end": { + "line": 2, + "column": 35 + } + }, + "range": [ + 37, + 45 + ] + }, + { + "type": "Punctuator", + "value": "(", + "loc": { + "start": { + "line": 2, + "column": 35 + }, + "end": { + "line": 2, + "column": 36 + } + }, + "range": [ + 45, + 46 + ] + }, + { + "type": "Punctuator", + "value": ")", + "loc": { + "start": { + "line": 2, + "column": 36 + }, + "end": { + "line": 2, + "column": 37 + } + }, + "range": [ + 46, + 47 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 3, + "column": 0 + }, + "end": { + "line": 3, + "column": 1 + } + }, + "range": [ + 48, + 49 + ] + } + ] +}; \ No newline at end of file diff --git a/tests/fixtures/ecma-version/13/class-fields/valid-init-arrow-super.src.js b/tests/fixtures/ecma-version/13/class-fields/valid-init-arrow-super.src.js new file mode 100644 index 00000000..815789f4 --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/valid-init-arrow-super.src.js @@ -0,0 +1,3 @@ +class C { + toString = () => super.toString() +} diff --git a/tests/fixtures/ecma-version/13/class-fields/valid-init-arrow.result.js b/tests/fixtures/ecma-version/13/class-fields/valid-init-arrow.result.js new file mode 100644 index 00000000..61a21fcf --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/valid-init-arrow.result.js @@ -0,0 +1,335 @@ +export default { + "type": "Program", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 3, + "column": 1 + } + }, + "range": [ + 0, + 29 + ], + "body": [ + { + "type": "ClassDeclaration", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 3, + "column": 1 + } + }, + "range": [ + 0, + 29 + ], + "id": { + "type": "Identifier", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "range": [ + 6, + 7 + ], + "name": "C" + }, + "superClass": null, + "body": { + "type": "ClassBody", + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 3, + "column": 1 + } + }, + "range": [ + 8, + 29 + ], + "body": [ + { + "type": "PropertyDefinition", + "loc": { + "start": { + "line": 2, + "column": 4 + }, + "end": { + "line": 2, + "column": 17 + } + }, + "range": [ + 14, + 27 + ], + "static": false, + "computed": false, + "key": { + "type": "Identifier", + "loc": { + "start": { + "line": 2, + "column": 4 + }, + "end": { + "line": 2, + "column": 7 + } + }, + "range": [ + 14, + 17 + ], + "name": "aaa" + }, + "value": { + "type": "ArrowFunctionExpression", + "loc": { + "start": { + "line": 2, + "column": 10 + }, + "end": { + "line": 2, + "column": 17 + } + }, + "range": [ + 20, + 27 + ], + "id": null, + "expression": true, + "generator": false, + "async": false, + "params": [], + "body": { + "type": "Literal", + "loc": { + "start": { + "line": 2, + "column": 16 + }, + "end": { + "line": 2, + "column": 17 + } + }, + "range": [ + 26, + 27 + ], + "value": 0, + "raw": "0" + } + } + } + ] + } + } + ], + "sourceType": "script", + "tokens": [ + { + "type": "Keyword", + "value": "class", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 5 + } + }, + "range": [ + 0, + 5 + ] + }, + { + "type": "Identifier", + "value": "C", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "range": [ + 6, + 7 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 9 + } + }, + "range": [ + 8, + 9 + ] + }, + { + "type": "Identifier", + "value": "aaa", + "loc": { + "start": { + "line": 2, + "column": 4 + }, + "end": { + "line": 2, + "column": 7 + } + }, + "range": [ + 14, + 17 + ] + }, + { + "type": "Punctuator", + "value": "=", + "loc": { + "start": { + "line": 2, + "column": 8 + }, + "end": { + "line": 2, + "column": 9 + } + }, + "range": [ + 18, + 19 + ] + }, + { + "type": "Punctuator", + "value": "(", + "loc": { + "start": { + "line": 2, + "column": 10 + }, + "end": { + "line": 2, + "column": 11 + } + }, + "range": [ + 20, + 21 + ] + }, + { + "type": "Punctuator", + "value": ")", + "loc": { + "start": { + "line": 2, + "column": 11 + }, + "end": { + "line": 2, + "column": 12 + } + }, + "range": [ + 21, + 22 + ] + }, + { + "type": "Punctuator", + "value": "=>", + "loc": { + "start": { + "line": 2, + "column": 13 + }, + "end": { + "line": 2, + "column": 15 + } + }, + "range": [ + 23, + 25 + ] + }, + { + "type": "Numeric", + "value": "0", + "loc": { + "start": { + "line": 2, + "column": 16 + }, + "end": { + "line": 2, + "column": 17 + } + }, + "range": [ + 26, + 27 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 3, + "column": 0 + }, + "end": { + "line": 3, + "column": 1 + } + }, + "range": [ + 28, + 29 + ] + } + ] +}; \ No newline at end of file diff --git a/tests/fixtures/ecma-version/13/class-fields/valid-init-arrow.src.js b/tests/fixtures/ecma-version/13/class-fields/valid-init-arrow.src.js new file mode 100644 index 00000000..32cf142e --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/valid-init-arrow.src.js @@ -0,0 +1,3 @@ +class C { + aaa = () => 0 +} diff --git a/tests/fixtures/ecma-version/13/class-fields/valid-init-super.result.js b/tests/fixtures/ecma-version/13/class-fields/valid-init-super.result.js new file mode 100644 index 00000000..9e688158 --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/valid-init-super.result.js @@ -0,0 +1,330 @@ +export default { + "type": "Program", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 4, + "column": 1 + } + }, + "range": [ + 0, + 126 + ], + "body": [ + { + "type": "ClassDeclaration", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 4, + "column": 1 + } + }, + "range": [ + 0, + 126 + ], + "id": { + "type": "Identifier", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "range": [ + 6, + 7 + ], + "name": "C" + }, + "superClass": null, + "body": { + "type": "ClassBody", + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 4, + "column": 1 + } + }, + "range": [ + 8, + 126 + ], + "body": [ + { + "type": "PropertyDefinition", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 3, + "column": 24 + } + }, + "range": [ + 104, + 124 + ], + "static": false, + "computed": false, + "key": { + "type": "Identifier", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 3, + "column": 7 + } + }, + "range": [ + 104, + 107 + ], + "name": "aaa" + }, + "value": { + "type": "MemberExpression", + "loc": { + "start": { + "line": 3, + "column": 10 + }, + "end": { + "line": 3, + "column": 24 + } + }, + "range": [ + 110, + 124 + ], + "object": { + "type": "Super", + "loc": { + "start": { + "line": 3, + "column": 10 + }, + "end": { + "line": 3, + "column": 15 + } + }, + "range": [ + 110, + 115 + ] + }, + "property": { + "type": "Identifier", + "loc": { + "start": { + "line": 3, + "column": 16 + }, + "end": { + "line": 3, + "column": 24 + } + }, + "range": [ + 116, + 124 + ], + "name": "toString" + }, + "computed": false, + "optional": false + } + } + ] + } + } + ], + "sourceType": "script", + "tokens": [ + { + "type": "Keyword", + "value": "class", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 5 + } + }, + "range": [ + 0, + 5 + ] + }, + { + "type": "Identifier", + "value": "C", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "range": [ + 6, + 7 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 9 + } + }, + "range": [ + 8, + 9 + ] + }, + { + "type": "Identifier", + "value": "aaa", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 3, + "column": 7 + } + }, + "range": [ + 104, + 107 + ] + }, + { + "type": "Punctuator", + "value": "=", + "loc": { + "start": { + "line": 3, + "column": 8 + }, + "end": { + "line": 3, + "column": 9 + } + }, + "range": [ + 108, + 109 + ] + }, + { + "type": "Keyword", + "value": "super", + "loc": { + "start": { + "line": 3, + "column": 10 + }, + "end": { + "line": 3, + "column": 15 + } + }, + "range": [ + 110, + 115 + ] + }, + { + "type": "Punctuator", + "value": ".", + "loc": { + "start": { + "line": 3, + "column": 15 + }, + "end": { + "line": 3, + "column": 16 + } + }, + "range": [ + 115, + 116 + ] + }, + { + "type": "Identifier", + "value": "toString", + "loc": { + "start": { + "line": 3, + "column": 16 + }, + "end": { + "line": 3, + "column": 24 + } + }, + "range": [ + 116, + 124 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 4, + "column": 0 + }, + "end": { + "line": 4, + "column": 1 + } + }, + "range": [ + 125, + 126 + ] + } + ] +}; \ No newline at end of file diff --git a/tests/fixtures/ecma-version/13/class-fields/valid-init-super.src.js b/tests/fixtures/ecma-version/13/class-fields/valid-init-super.src.js new file mode 100644 index 00000000..6c843d52 --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/valid-init-super.src.js @@ -0,0 +1,4 @@ +class C { + // Field initializers allow `super` properties even if it's outside of any functions. + aaa = super.toString +} diff --git a/tests/fixtures/ecma-version/13/class-fields/valid-member-private-nesting-use-first.result.js b/tests/fixtures/ecma-version/13/class-fields/valid-member-private-nesting-use-first.result.js new file mode 100644 index 00000000..e1fe0f52 --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/valid-member-private-nesting-use-first.result.js @@ -0,0 +1,993 @@ +export default { + "type": "Program", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 10, + "column": 1 + } + }, + "range": [ + 0, + 181 + ], + "body": [ + { + "type": "ClassDeclaration", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 10, + "column": 1 + } + }, + "range": [ + 0, + 181 + ], + "id": { + "type": "Identifier", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 11 + } + }, + "range": [ + 6, + 11 + ], + "name": "Outer" + }, + "superClass": null, + "body": { + "type": "ClassBody", + "loc": { + "start": { + "line": 1, + "column": 12 + }, + "end": { + "line": 10, + "column": 1 + } + }, + "range": [ + 12, + 181 + ], + "body": [ + { + "type": "PropertyDefinition", + "loc": { + "start": { + "line": 2, + "column": 4 + }, + "end": { + "line": 8, + "column": 5 + } + }, + "range": [ + 18, + 171 + ], + "static": false, + "computed": false, + "key": { + "type": "Identifier", + "loc": { + "start": { + "line": 2, + "column": 4 + }, + "end": { + "line": 2, + "column": 9 + } + }, + "range": [ + 18, + 23 + ], + "name": "Inner" + }, + "value": { + "type": "ClassExpression", + "loc": { + "start": { + "line": 2, + "column": 12 + }, + "end": { + "line": 8, + "column": 5 + } + }, + "range": [ + 26, + 171 + ], + "id": null, + "superClass": null, + "body": { + "type": "ClassBody", + "loc": { + "start": { + "line": 2, + "column": 18 + }, + "end": { + "line": 8, + "column": 5 + } + }, + "range": [ + 32, + 171 + ], + "body": [ + { + "type": "MethodDefinition", + "loc": { + "start": { + "line": 3, + "column": 8 + }, + "end": { + "line": 6, + "column": 9 + } + }, + "range": [ + 42, + 153 + ], + "static": false, + "computed": false, + "key": { + "type": "Identifier", + "loc": { + "start": { + "line": 3, + "column": 8 + }, + "end": { + "line": 3, + "column": 9 + } + }, + "range": [ + 42, + 43 + ], + "name": "f" + }, + "kind": "method", + "value": { + "type": "FunctionExpression", + "loc": { + "start": { + "line": 3, + "column": 9 + }, + "end": { + "line": 6, + "column": 9 + } + }, + "range": [ + 43, + 153 + ], + "id": null, + "expression": false, + "generator": false, + "async": false, + "params": [ + { + "type": "Identifier", + "loc": { + "start": { + "line": 3, + "column": 10 + }, + "end": { + "line": 3, + "column": 11 + } + }, + "range": [ + 44, + 45 + ], + "name": "x" + }, + { + "type": "Identifier", + "loc": { + "start": { + "line": 3, + "column": 13 + }, + "end": { + "line": 3, + "column": 14 + } + }, + "range": [ + 47, + 48 + ], + "name": "y" + } + ], + "body": { + "type": "BlockStatement", + "loc": { + "start": { + "line": 3, + "column": 16 + }, + "end": { + "line": 6, + "column": 9 + } + }, + "range": [ + 50, + 153 + ], + "body": [ + { + "type": "ExpressionStatement", + "loc": { + "start": { + "line": 5, + "column": 12 + }, + "end": { + "line": 5, + "column": 23 + } + }, + "range": [ + 132, + 143 + ], + "expression": { + "type": "BinaryExpression", + "loc": { + "start": { + "line": 5, + "column": 12 + }, + "end": { + "line": 5, + "column": 23 + } + }, + "range": [ + 132, + 143 + ], + "left": { + "type": "MemberExpression", + "loc": { + "start": { + "line": 5, + "column": 12 + }, + "end": { + "line": 5, + "column": 16 + } + }, + "range": [ + 132, + 136 + ], + "object": { + "type": "Identifier", + "loc": { + "start": { + "line": 5, + "column": 12 + }, + "end": { + "line": 5, + "column": 13 + } + }, + "range": [ + 132, + 133 + ], + "name": "x" + }, + "property": { + "type": "PrivateIdentifier", + "loc": { + "start": { + "line": 5, + "column": 14 + }, + "end": { + "line": 5, + "column": 16 + } + }, + "range": [ + 134, + 136 + ], + "name": "a" + }, + "computed": false, + "optional": false + }, + "operator": "+", + "right": { + "type": "MemberExpression", + "loc": { + "start": { + "line": 5, + "column": 19 + }, + "end": { + "line": 5, + "column": 23 + } + }, + "range": [ + 139, + 143 + ], + "object": { + "type": "Identifier", + "loc": { + "start": { + "line": 5, + "column": 19 + }, + "end": { + "line": 5, + "column": 20 + } + }, + "range": [ + 139, + 140 + ], + "name": "y" + }, + "property": { + "type": "PrivateIdentifier", + "loc": { + "start": { + "line": 5, + "column": 21 + }, + "end": { + "line": 5, + "column": 23 + } + }, + "range": [ + 141, + 143 + ], + "name": "b" + }, + "computed": false, + "optional": false + } + } + } + ] + } + } + }, + { + "type": "PropertyDefinition", + "loc": { + "start": { + "line": 7, + "column": 8 + }, + "end": { + "line": 7, + "column": 11 + } + }, + "range": [ + 162, + 165 + ], + "static": false, + "computed": false, + "key": { + "type": "PrivateIdentifier", + "loc": { + "start": { + "line": 7, + "column": 8 + }, + "end": { + "line": 7, + "column": 10 + } + }, + "range": [ + 162, + 164 + ], + "name": "b" + }, + "value": null + } + ] + } + } + }, + { + "type": "PropertyDefinition", + "loc": { + "start": { + "line": 9, + "column": 4 + }, + "end": { + "line": 9, + "column": 7 + } + }, + "range": [ + 176, + 179 + ], + "static": false, + "computed": false, + "key": { + "type": "PrivateIdentifier", + "loc": { + "start": { + "line": 9, + "column": 4 + }, + "end": { + "line": 9, + "column": 6 + } + }, + "range": [ + 176, + 178 + ], + "name": "a" + }, + "value": null + } + ] + } + } + ], + "sourceType": "script", + "tokens": [ + { + "type": "Keyword", + "value": "class", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 5 + } + }, + "range": [ + 0, + 5 + ] + }, + { + "type": "Identifier", + "value": "Outer", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 11 + } + }, + "range": [ + 6, + 11 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 1, + "column": 12 + }, + "end": { + "line": 1, + "column": 13 + } + }, + "range": [ + 12, + 13 + ] + }, + { + "type": "Identifier", + "value": "Inner", + "loc": { + "start": { + "line": 2, + "column": 4 + }, + "end": { + "line": 2, + "column": 9 + } + }, + "range": [ + 18, + 23 + ] + }, + { + "type": "Punctuator", + "value": "=", + "loc": { + "start": { + "line": 2, + "column": 10 + }, + "end": { + "line": 2, + "column": 11 + } + }, + "range": [ + 24, + 25 + ] + }, + { + "type": "Keyword", + "value": "class", + "loc": { + "start": { + "line": 2, + "column": 12 + }, + "end": { + "line": 2, + "column": 17 + } + }, + "range": [ + 26, + 31 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 2, + "column": 18 + }, + "end": { + "line": 2, + "column": 19 + } + }, + "range": [ + 32, + 33 + ] + }, + { + "type": "Identifier", + "value": "f", + "loc": { + "start": { + "line": 3, + "column": 8 + }, + "end": { + "line": 3, + "column": 9 + } + }, + "range": [ + 42, + 43 + ] + }, + { + "type": "Punctuator", + "value": "(", + "loc": { + "start": { + "line": 3, + "column": 9 + }, + "end": { + "line": 3, + "column": 10 + } + }, + "range": [ + 43, + 44 + ] + }, + { + "type": "Identifier", + "value": "x", + "loc": { + "start": { + "line": 3, + "column": 10 + }, + "end": { + "line": 3, + "column": 11 + } + }, + "range": [ + 44, + 45 + ] + }, + { + "type": "Punctuator", + "value": ",", + "loc": { + "start": { + "line": 3, + "column": 11 + }, + "end": { + "line": 3, + "column": 12 + } + }, + "range": [ + 45, + 46 + ] + }, + { + "type": "Identifier", + "value": "y", + "loc": { + "start": { + "line": 3, + "column": 13 + }, + "end": { + "line": 3, + "column": 14 + } + }, + "range": [ + 47, + 48 + ] + }, + { + "type": "Punctuator", + "value": ")", + "loc": { + "start": { + "line": 3, + "column": 14 + }, + "end": { + "line": 3, + "column": 15 + } + }, + "range": [ + 48, + 49 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 3, + "column": 16 + }, + "end": { + "line": 3, + "column": 17 + } + }, + "range": [ + 50, + 51 + ] + }, + { + "type": "Identifier", + "value": "x", + "loc": { + "start": { + "line": 5, + "column": 12 + }, + "end": { + "line": 5, + "column": 13 + } + }, + "range": [ + 132, + 133 + ] + }, + { + "type": "Punctuator", + "value": ".", + "loc": { + "start": { + "line": 5, + "column": 13 + }, + "end": { + "line": 5, + "column": 14 + } + }, + "range": [ + 133, + 134 + ] + }, + { + "type": "PrivateIdentifier", + "value": "a", + "loc": { + "start": { + "line": 5, + "column": 14 + }, + "end": { + "line": 5, + "column": 16 + } + }, + "range": [ + 134, + 136 + ] + }, + { + "type": "Punctuator", + "value": "+", + "loc": { + "start": { + "line": 5, + "column": 17 + }, + "end": { + "line": 5, + "column": 18 + } + }, + "range": [ + 137, + 138 + ] + }, + { + "type": "Identifier", + "value": "y", + "loc": { + "start": { + "line": 5, + "column": 19 + }, + "end": { + "line": 5, + "column": 20 + } + }, + "range": [ + 139, + 140 + ] + }, + { + "type": "Punctuator", + "value": ".", + "loc": { + "start": { + "line": 5, + "column": 20 + }, + "end": { + "line": 5, + "column": 21 + } + }, + "range": [ + 140, + 141 + ] + }, + { + "type": "PrivateIdentifier", + "value": "b", + "loc": { + "start": { + "line": 5, + "column": 21 + }, + "end": { + "line": 5, + "column": 23 + } + }, + "range": [ + 141, + 143 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 6, + "column": 8 + }, + "end": { + "line": 6, + "column": 9 + } + }, + "range": [ + 152, + 153 + ] + }, + { + "type": "PrivateIdentifier", + "value": "b", + "loc": { + "start": { + "line": 7, + "column": 8 + }, + "end": { + "line": 7, + "column": 10 + } + }, + "range": [ + 162, + 164 + ] + }, + { + "type": "Punctuator", + "value": ";", + "loc": { + "start": { + "line": 7, + "column": 10 + }, + "end": { + "line": 7, + "column": 11 + } + }, + "range": [ + 164, + 165 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 8, + "column": 4 + }, + "end": { + "line": 8, + "column": 5 + } + }, + "range": [ + 170, + 171 + ] + }, + { + "type": "PrivateIdentifier", + "value": "a", + "loc": { + "start": { + "line": 9, + "column": 4 + }, + "end": { + "line": 9, + "column": 6 + } + }, + "range": [ + 176, + 178 + ] + }, + { + "type": "Punctuator", + "value": ";", + "loc": { + "start": { + "line": 9, + "column": 6 + }, + "end": { + "line": 9, + "column": 7 + } + }, + "range": [ + 178, + 179 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 10, + "column": 0 + }, + "end": { + "line": 10, + "column": 1 + } + }, + "range": [ + 180, + 181 + ] + } + ] +}; \ No newline at end of file diff --git a/tests/fixtures/ecma-version/13/class-fields/valid-member-private-nesting-use-first.src.js b/tests/fixtures/ecma-version/13/class-fields/valid-member-private-nesting-use-first.src.js new file mode 100644 index 00000000..c90f1332 --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/valid-member-private-nesting-use-first.src.js @@ -0,0 +1,10 @@ +class Outer { + Inner = class { + f(x, y) { + // OK even if the private fields are defined after use. + x.#a + y.#b + } + #b; + } + #a; +} diff --git a/tests/fixtures/ecma-version/13/class-fields/valid-member-private-nesting.result.js b/tests/fixtures/ecma-version/13/class-fields/valid-member-private-nesting.result.js new file mode 100644 index 00000000..d622b958 --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/valid-member-private-nesting.result.js @@ -0,0 +1,993 @@ +export default { + "type": "Program", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 10, + "column": 1 + } + }, + "range": [ + 0, + 182 + ], + "body": [ + { + "type": "ClassDeclaration", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 10, + "column": 1 + } + }, + "range": [ + 0, + 182 + ], + "id": { + "type": "Identifier", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 11 + } + }, + "range": [ + 6, + 11 + ], + "name": "Outer" + }, + "superClass": null, + "body": { + "type": "ClassBody", + "loc": { + "start": { + "line": 1, + "column": 12 + }, + "end": { + "line": 10, + "column": 1 + } + }, + "range": [ + 12, + 182 + ], + "body": [ + { + "type": "PropertyDefinition", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 3, + "column": 7 + } + }, + "range": [ + 87, + 90 + ], + "static": false, + "computed": false, + "key": { + "type": "PrivateIdentifier", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 3, + "column": 6 + } + }, + "range": [ + 87, + 89 + ], + "name": "a" + }, + "value": null + }, + { + "type": "PropertyDefinition", + "loc": { + "start": { + "line": 4, + "column": 4 + }, + "end": { + "line": 9, + "column": 5 + } + }, + "range": [ + 95, + 180 + ], + "static": false, + "computed": false, + "key": { + "type": "Identifier", + "loc": { + "start": { + "line": 4, + "column": 4 + }, + "end": { + "line": 4, + "column": 9 + } + }, + "range": [ + 95, + 100 + ], + "name": "Inner" + }, + "value": { + "type": "ClassExpression", + "loc": { + "start": { + "line": 4, + "column": 12 + }, + "end": { + "line": 9, + "column": 5 + } + }, + "range": [ + 103, + 180 + ], + "id": null, + "superClass": null, + "body": { + "type": "ClassBody", + "loc": { + "start": { + "line": 4, + "column": 18 + }, + "end": { + "line": 9, + "column": 5 + } + }, + "range": [ + 109, + 180 + ], + "body": [ + { + "type": "PropertyDefinition", + "loc": { + "start": { + "line": 5, + "column": 8 + }, + "end": { + "line": 5, + "column": 11 + } + }, + "range": [ + 119, + 122 + ], + "static": false, + "computed": false, + "key": { + "type": "PrivateIdentifier", + "loc": { + "start": { + "line": 5, + "column": 8 + }, + "end": { + "line": 5, + "column": 10 + } + }, + "range": [ + 119, + 121 + ], + "name": "b" + }, + "value": null + }, + { + "type": "MethodDefinition", + "loc": { + "start": { + "line": 6, + "column": 8 + }, + "end": { + "line": 8, + "column": 9 + } + }, + "range": [ + 131, + 174 + ], + "static": false, + "computed": false, + "key": { + "type": "Identifier", + "loc": { + "start": { + "line": 6, + "column": 8 + }, + "end": { + "line": 6, + "column": 9 + } + }, + "range": [ + 131, + 132 + ], + "name": "f" + }, + "kind": "method", + "value": { + "type": "FunctionExpression", + "loc": { + "start": { + "line": 6, + "column": 9 + }, + "end": { + "line": 8, + "column": 9 + } + }, + "range": [ + 132, + 174 + ], + "id": null, + "expression": false, + "generator": false, + "async": false, + "params": [ + { + "type": "Identifier", + "loc": { + "start": { + "line": 6, + "column": 10 + }, + "end": { + "line": 6, + "column": 11 + } + }, + "range": [ + 133, + 134 + ], + "name": "x" + }, + { + "type": "Identifier", + "loc": { + "start": { + "line": 6, + "column": 13 + }, + "end": { + "line": 6, + "column": 14 + } + }, + "range": [ + 136, + 137 + ], + "name": "y" + } + ], + "body": { + "type": "BlockStatement", + "loc": { + "start": { + "line": 6, + "column": 16 + }, + "end": { + "line": 8, + "column": 9 + } + }, + "range": [ + 139, + 174 + ], + "body": [ + { + "type": "ExpressionStatement", + "loc": { + "start": { + "line": 7, + "column": 12 + }, + "end": { + "line": 7, + "column": 23 + } + }, + "range": [ + 153, + 164 + ], + "expression": { + "type": "BinaryExpression", + "loc": { + "start": { + "line": 7, + "column": 12 + }, + "end": { + "line": 7, + "column": 23 + } + }, + "range": [ + 153, + 164 + ], + "left": { + "type": "MemberExpression", + "loc": { + "start": { + "line": 7, + "column": 12 + }, + "end": { + "line": 7, + "column": 16 + } + }, + "range": [ + 153, + 157 + ], + "object": { + "type": "Identifier", + "loc": { + "start": { + "line": 7, + "column": 12 + }, + "end": { + "line": 7, + "column": 13 + } + }, + "range": [ + 153, + 154 + ], + "name": "x" + }, + "property": { + "type": "PrivateIdentifier", + "loc": { + "start": { + "line": 7, + "column": 14 + }, + "end": { + "line": 7, + "column": 16 + } + }, + "range": [ + 155, + 157 + ], + "name": "a" + }, + "computed": false, + "optional": false + }, + "operator": "+", + "right": { + "type": "MemberExpression", + "loc": { + "start": { + "line": 7, + "column": 19 + }, + "end": { + "line": 7, + "column": 23 + } + }, + "range": [ + 160, + 164 + ], + "object": { + "type": "Identifier", + "loc": { + "start": { + "line": 7, + "column": 19 + }, + "end": { + "line": 7, + "column": 20 + } + }, + "range": [ + 160, + 161 + ], + "name": "y" + }, + "property": { + "type": "PrivateIdentifier", + "loc": { + "start": { + "line": 7, + "column": 21 + }, + "end": { + "line": 7, + "column": 23 + } + }, + "range": [ + 162, + 164 + ], + "name": "b" + }, + "computed": false, + "optional": false + } + } + } + ] + } + } + } + ] + } + } + } + ] + } + } + ], + "sourceType": "script", + "tokens": [ + { + "type": "Keyword", + "value": "class", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 5 + } + }, + "range": [ + 0, + 5 + ] + }, + { + "type": "Identifier", + "value": "Outer", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 11 + } + }, + "range": [ + 6, + 11 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 1, + "column": 12 + }, + "end": { + "line": 1, + "column": 13 + } + }, + "range": [ + 12, + 13 + ] + }, + { + "type": "PrivateIdentifier", + "value": "a", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 3, + "column": 6 + } + }, + "range": [ + 87, + 89 + ] + }, + { + "type": "Punctuator", + "value": ";", + "loc": { + "start": { + "line": 3, + "column": 6 + }, + "end": { + "line": 3, + "column": 7 + } + }, + "range": [ + 89, + 90 + ] + }, + { + "type": "Identifier", + "value": "Inner", + "loc": { + "start": { + "line": 4, + "column": 4 + }, + "end": { + "line": 4, + "column": 9 + } + }, + "range": [ + 95, + 100 + ] + }, + { + "type": "Punctuator", + "value": "=", + "loc": { + "start": { + "line": 4, + "column": 10 + }, + "end": { + "line": 4, + "column": 11 + } + }, + "range": [ + 101, + 102 + ] + }, + { + "type": "Keyword", + "value": "class", + "loc": { + "start": { + "line": 4, + "column": 12 + }, + "end": { + "line": 4, + "column": 17 + } + }, + "range": [ + 103, + 108 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 4, + "column": 18 + }, + "end": { + "line": 4, + "column": 19 + } + }, + "range": [ + 109, + 110 + ] + }, + { + "type": "PrivateIdentifier", + "value": "b", + "loc": { + "start": { + "line": 5, + "column": 8 + }, + "end": { + "line": 5, + "column": 10 + } + }, + "range": [ + 119, + 121 + ] + }, + { + "type": "Punctuator", + "value": ";", + "loc": { + "start": { + "line": 5, + "column": 10 + }, + "end": { + "line": 5, + "column": 11 + } + }, + "range": [ + 121, + 122 + ] + }, + { + "type": "Identifier", + "value": "f", + "loc": { + "start": { + "line": 6, + "column": 8 + }, + "end": { + "line": 6, + "column": 9 + } + }, + "range": [ + 131, + 132 + ] + }, + { + "type": "Punctuator", + "value": "(", + "loc": { + "start": { + "line": 6, + "column": 9 + }, + "end": { + "line": 6, + "column": 10 + } + }, + "range": [ + 132, + 133 + ] + }, + { + "type": "Identifier", + "value": "x", + "loc": { + "start": { + "line": 6, + "column": 10 + }, + "end": { + "line": 6, + "column": 11 + } + }, + "range": [ + 133, + 134 + ] + }, + { + "type": "Punctuator", + "value": ",", + "loc": { + "start": { + "line": 6, + "column": 11 + }, + "end": { + "line": 6, + "column": 12 + } + }, + "range": [ + 134, + 135 + ] + }, + { + "type": "Identifier", + "value": "y", + "loc": { + "start": { + "line": 6, + "column": 13 + }, + "end": { + "line": 6, + "column": 14 + } + }, + "range": [ + 136, + 137 + ] + }, + { + "type": "Punctuator", + "value": ")", + "loc": { + "start": { + "line": 6, + "column": 14 + }, + "end": { + "line": 6, + "column": 15 + } + }, + "range": [ + 137, + 138 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 6, + "column": 16 + }, + "end": { + "line": 6, + "column": 17 + } + }, + "range": [ + 139, + 140 + ] + }, + { + "type": "Identifier", + "value": "x", + "loc": { + "start": { + "line": 7, + "column": 12 + }, + "end": { + "line": 7, + "column": 13 + } + }, + "range": [ + 153, + 154 + ] + }, + { + "type": "Punctuator", + "value": ".", + "loc": { + "start": { + "line": 7, + "column": 13 + }, + "end": { + "line": 7, + "column": 14 + } + }, + "range": [ + 154, + 155 + ] + }, + { + "type": "PrivateIdentifier", + "value": "a", + "loc": { + "start": { + "line": 7, + "column": 14 + }, + "end": { + "line": 7, + "column": 16 + } + }, + "range": [ + 155, + 157 + ] + }, + { + "type": "Punctuator", + "value": "+", + "loc": { + "start": { + "line": 7, + "column": 17 + }, + "end": { + "line": 7, + "column": 18 + } + }, + "range": [ + 158, + 159 + ] + }, + { + "type": "Identifier", + "value": "y", + "loc": { + "start": { + "line": 7, + "column": 19 + }, + "end": { + "line": 7, + "column": 20 + } + }, + "range": [ + 160, + 161 + ] + }, + { + "type": "Punctuator", + "value": ".", + "loc": { + "start": { + "line": 7, + "column": 20 + }, + "end": { + "line": 7, + "column": 21 + } + }, + "range": [ + 161, + 162 + ] + }, + { + "type": "PrivateIdentifier", + "value": "b", + "loc": { + "start": { + "line": 7, + "column": 21 + }, + "end": { + "line": 7, + "column": 23 + } + }, + "range": [ + 162, + 164 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 8, + "column": 8 + }, + "end": { + "line": 8, + "column": 9 + } + }, + "range": [ + 173, + 174 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 9, + "column": 4 + }, + "end": { + "line": 9, + "column": 5 + } + }, + "range": [ + 179, + 180 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 10, + "column": 0 + }, + "end": { + "line": 10, + "column": 1 + } + }, + "range": [ + 181, + 182 + ] + } + ] +}; \ No newline at end of file diff --git a/tests/fixtures/ecma-version/13/class-fields/valid-member-private-nesting.src.js b/tests/fixtures/ecma-version/13/class-fields/valid-member-private-nesting.src.js new file mode 100644 index 00000000..d1cd08e0 --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/valid-member-private-nesting.src.js @@ -0,0 +1,10 @@ +class Outer { + // Inner classes can access the private fields of outer classes. + #a; + Inner = class { + #b; + f(x, y) { + x.#a + y.#b + } + } +} diff --git a/tests/fixtures/ecma-version/13/class-fields/valid-member-private.result.js b/tests/fixtures/ecma-version/13/class-fields/valid-member-private.result.js new file mode 100644 index 00000000..6dd762ab --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/valid-member-private.result.js @@ -0,0 +1,517 @@ +export default { + "type": "Program", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 6, + "column": 1 + } + }, + "range": [ + 0, + 51 + ], + "body": [ + { + "type": "ClassDeclaration", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 6, + "column": 1 + } + }, + "range": [ + 0, + 51 + ], + "id": { + "type": "Identifier", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "range": [ + 6, + 7 + ], + "name": "C" + }, + "superClass": null, + "body": { + "type": "ClassBody", + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 6, + "column": 1 + } + }, + "range": [ + 8, + 51 + ], + "body": [ + { + "type": "PropertyDefinition", + "loc": { + "start": { + "line": 2, + "column": 4 + }, + "end": { + "line": 2, + "column": 7 + } + }, + "range": [ + 14, + 17 + ], + "static": false, + "computed": false, + "key": { + "type": "PrivateIdentifier", + "loc": { + "start": { + "line": 2, + "column": 4 + }, + "end": { + "line": 2, + "column": 6 + } + }, + "range": [ + 14, + 16 + ], + "name": "a" + }, + "value": null + }, + { + "type": "MethodDefinition", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 5, + "column": 5 + } + }, + "range": [ + 22, + 49 + ], + "static": false, + "computed": false, + "key": { + "type": "Identifier", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 3, + "column": 5 + } + }, + "range": [ + 22, + 23 + ], + "name": "f" + }, + "kind": "method", + "value": { + "type": "FunctionExpression", + "loc": { + "start": { + "line": 3, + "column": 5 + }, + "end": { + "line": 5, + "column": 5 + } + }, + "range": [ + 23, + 49 + ], + "id": null, + "expression": false, + "generator": false, + "async": false, + "params": [], + "body": { + "type": "BlockStatement", + "loc": { + "start": { + "line": 3, + "column": 8 + }, + "end": { + "line": 5, + "column": 5 + } + }, + "range": [ + 26, + 49 + ], + "body": [ + { + "type": "ExpressionStatement", + "loc": { + "start": { + "line": 4, + "column": 8 + }, + "end": { + "line": 4, + "column": 15 + } + }, + "range": [ + 36, + 43 + ], + "expression": { + "type": "MemberExpression", + "loc": { + "start": { + "line": 4, + "column": 8 + }, + "end": { + "line": 4, + "column": 15 + } + }, + "range": [ + 36, + 43 + ], + "object": { + "type": "ThisExpression", + "loc": { + "start": { + "line": 4, + "column": 8 + }, + "end": { + "line": 4, + "column": 12 + } + }, + "range": [ + 36, + 40 + ] + }, + "property": { + "type": "PrivateIdentifier", + "loc": { + "start": { + "line": 4, + "column": 13 + }, + "end": { + "line": 4, + "column": 15 + } + }, + "range": [ + 41, + 43 + ], + "name": "a" + }, + "computed": false, + "optional": false + } + } + ] + } + } + } + ] + } + } + ], + "sourceType": "script", + "tokens": [ + { + "type": "Keyword", + "value": "class", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 5 + } + }, + "range": [ + 0, + 5 + ] + }, + { + "type": "Identifier", + "value": "C", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "range": [ + 6, + 7 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 9 + } + }, + "range": [ + 8, + 9 + ] + }, + { + "type": "PrivateIdentifier", + "value": "a", + "loc": { + "start": { + "line": 2, + "column": 4 + }, + "end": { + "line": 2, + "column": 6 + } + }, + "range": [ + 14, + 16 + ] + }, + { + "type": "Punctuator", + "value": ";", + "loc": { + "start": { + "line": 2, + "column": 6 + }, + "end": { + "line": 2, + "column": 7 + } + }, + "range": [ + 16, + 17 + ] + }, + { + "type": "Identifier", + "value": "f", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 3, + "column": 5 + } + }, + "range": [ + 22, + 23 + ] + }, + { + "type": "Punctuator", + "value": "(", + "loc": { + "start": { + "line": 3, + "column": 5 + }, + "end": { + "line": 3, + "column": 6 + } + }, + "range": [ + 23, + 24 + ] + }, + { + "type": "Punctuator", + "value": ")", + "loc": { + "start": { + "line": 3, + "column": 6 + }, + "end": { + "line": 3, + "column": 7 + } + }, + "range": [ + 24, + 25 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 3, + "column": 8 + }, + "end": { + "line": 3, + "column": 9 + } + }, + "range": [ + 26, + 27 + ] + }, + { + "type": "Keyword", + "value": "this", + "loc": { + "start": { + "line": 4, + "column": 8 + }, + "end": { + "line": 4, + "column": 12 + } + }, + "range": [ + 36, + 40 + ] + }, + { + "type": "Punctuator", + "value": ".", + "loc": { + "start": { + "line": 4, + "column": 12 + }, + "end": { + "line": 4, + "column": 13 + } + }, + "range": [ + 40, + 41 + ] + }, + { + "type": "PrivateIdentifier", + "value": "a", + "loc": { + "start": { + "line": 4, + "column": 13 + }, + "end": { + "line": 4, + "column": 15 + } + }, + "range": [ + 41, + 43 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 5, + "column": 4 + }, + "end": { + "line": 5, + "column": 5 + } + }, + "range": [ + 48, + 49 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 6, + "column": 0 + }, + "end": { + "line": 6, + "column": 1 + } + }, + "range": [ + 50, + 51 + ] + } + ] +}; \ No newline at end of file diff --git a/tests/fixtures/ecma-version/13/class-fields/valid-member-private.src.js b/tests/fixtures/ecma-version/13/class-fields/valid-member-private.src.js new file mode 100644 index 00000000..0ebd993f --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/valid-member-private.src.js @@ -0,0 +1,6 @@ +class C { + #a; + f() { + this.#a + } +} diff --git a/tests/fixtures/ecma-version/13/class-fields/valid-private-asi.result.js b/tests/fixtures/ecma-version/13/class-fields/valid-private-asi.result.js new file mode 100644 index 00000000..829e04f2 --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/valid-private-asi.result.js @@ -0,0 +1,371 @@ +export default { + "type": "Program", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 5, + "column": 1 + } + }, + "range": [ + 0, + 42 + ], + "body": [ + { + "type": "ClassDeclaration", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 5, + "column": 1 + } + }, + "range": [ + 0, + 42 + ], + "id": { + "type": "Identifier", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "range": [ + 6, + 7 + ], + "name": "C" + }, + "superClass": null, + "body": { + "type": "ClassBody", + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 5, + "column": 1 + } + }, + "range": [ + 8, + 42 + ], + "body": [ + { + "type": "PropertyDefinition", + "loc": { + "start": { + "line": 2, + "column": 4 + }, + "end": { + "line": 2, + "column": 8 + } + }, + "range": [ + 14, + 18 + ], + "static": false, + "computed": false, + "key": { + "type": "PrivateIdentifier", + "loc": { + "start": { + "line": 2, + "column": 4 + }, + "end": { + "line": 2, + "column": 8 + } + }, + "range": [ + 14, + 18 + ], + "name": "aaa" + }, + "value": null + }, + { + "type": "PropertyDefinition", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 3, + "column": 12 + } + }, + "range": [ + 23, + 31 + ], + "static": false, + "computed": false, + "key": { + "type": "PrivateIdentifier", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 3, + "column": 8 + } + }, + "range": [ + 23, + 27 + ], + "name": "bbb" + }, + "value": { + "type": "Literal", + "loc": { + "start": { + "line": 3, + "column": 11 + }, + "end": { + "line": 3, + "column": 12 + } + }, + "range": [ + 30, + 31 + ], + "value": 0, + "raw": "0" + } + }, + { + "type": "PropertyDefinition", + "loc": { + "start": { + "line": 4, + "column": 4 + }, + "end": { + "line": 4, + "column": 8 + } + }, + "range": [ + 36, + 40 + ], + "static": false, + "computed": false, + "key": { + "type": "PrivateIdentifier", + "loc": { + "start": { + "line": 4, + "column": 4 + }, + "end": { + "line": 4, + "column": 8 + } + }, + "range": [ + 36, + 40 + ], + "name": "ccc" + }, + "value": null + } + ] + } + } + ], + "sourceType": "script", + "tokens": [ + { + "type": "Keyword", + "value": "class", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 5 + } + }, + "range": [ + 0, + 5 + ] + }, + { + "type": "Identifier", + "value": "C", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "range": [ + 6, + 7 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 9 + } + }, + "range": [ + 8, + 9 + ] + }, + { + "type": "PrivateIdentifier", + "value": "aaa", + "loc": { + "start": { + "line": 2, + "column": 4 + }, + "end": { + "line": 2, + "column": 8 + } + }, + "range": [ + 14, + 18 + ] + }, + { + "type": "PrivateIdentifier", + "value": "bbb", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 3, + "column": 8 + } + }, + "range": [ + 23, + 27 + ] + }, + { + "type": "Punctuator", + "value": "=", + "loc": { + "start": { + "line": 3, + "column": 9 + }, + "end": { + "line": 3, + "column": 10 + } + }, + "range": [ + 28, + 29 + ] + }, + { + "type": "Numeric", + "value": "0", + "loc": { + "start": { + "line": 3, + "column": 11 + }, + "end": { + "line": 3, + "column": 12 + } + }, + "range": [ + 30, + 31 + ] + }, + { + "type": "PrivateIdentifier", + "value": "ccc", + "loc": { + "start": { + "line": 4, + "column": 4 + }, + "end": { + "line": 4, + "column": 8 + } + }, + "range": [ + 36, + 40 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 5, + "column": 0 + }, + "end": { + "line": 5, + "column": 1 + } + }, + "range": [ + 41, + 42 + ] + } + ] +}; \ No newline at end of file diff --git a/tests/fixtures/ecma-version/13/class-fields/valid-private-asi.src.js b/tests/fixtures/ecma-version/13/class-fields/valid-private-asi.src.js new file mode 100644 index 00000000..873abc17 --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/valid-private-asi.src.js @@ -0,0 +1,5 @@ +class C { + #aaa + #bbb = 0 + #ccc +} diff --git a/tests/fixtures/ecma-version/13/class-fields/valid-private.result.js b/tests/fixtures/ecma-version/13/class-fields/valid-private.result.js new file mode 100644 index 00000000..f3f5be9c --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/valid-private.result.js @@ -0,0 +1,223 @@ +export default { + "type": "Program", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 3, + "column": 1 + } + }, + "range": [ + 0, + 21 + ], + "body": [ + { + "type": "ClassDeclaration", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 3, + "column": 1 + } + }, + "range": [ + 0, + 21 + ], + "id": { + "type": "Identifier", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "range": [ + 6, + 7 + ], + "name": "C" + }, + "superClass": null, + "body": { + "type": "ClassBody", + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 3, + "column": 1 + } + }, + "range": [ + 8, + 21 + ], + "body": [ + { + "type": "PropertyDefinition", + "loc": { + "start": { + "line": 2, + "column": 4 + }, + "end": { + "line": 2, + "column": 9 + } + }, + "range": [ + 14, + 19 + ], + "static": false, + "computed": false, + "key": { + "type": "PrivateIdentifier", + "loc": { + "start": { + "line": 2, + "column": 4 + }, + "end": { + "line": 2, + "column": 8 + } + }, + "range": [ + 14, + 18 + ], + "name": "aaa" + }, + "value": null + } + ] + } + } + ], + "sourceType": "script", + "tokens": [ + { + "type": "Keyword", + "value": "class", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 5 + } + }, + "range": [ + 0, + 5 + ] + }, + { + "type": "Identifier", + "value": "C", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "range": [ + 6, + 7 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 9 + } + }, + "range": [ + 8, + 9 + ] + }, + { + "type": "PrivateIdentifier", + "value": "aaa", + "loc": { + "start": { + "line": 2, + "column": 4 + }, + "end": { + "line": 2, + "column": 8 + } + }, + "range": [ + 14, + 18 + ] + }, + { + "type": "Punctuator", + "value": ";", + "loc": { + "start": { + "line": 2, + "column": 8 + }, + "end": { + "line": 2, + "column": 9 + } + }, + "range": [ + 18, + 19 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 3, + "column": 0 + }, + "end": { + "line": 3, + "column": 1 + } + }, + "range": [ + 20, + 21 + ] + } + ] +}; \ No newline at end of file diff --git a/tests/fixtures/ecma-version/13/class-fields/valid-private.src.js b/tests/fixtures/ecma-version/13/class-fields/valid-private.src.js new file mode 100644 index 00000000..4351b5cc --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/valid-private.src.js @@ -0,0 +1,3 @@ +class C { + #aaa; +} diff --git a/tests/fixtures/ecma-version/13/class-fields/valid-prototype.result.js b/tests/fixtures/ecma-version/13/class-fields/valid-prototype.result.js new file mode 100644 index 00000000..768fea17 --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/valid-prototype.result.js @@ -0,0 +1,259 @@ +export default { + "type": "Program", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 3, + "column": 1 + } + }, + "range": [ + 0, + 29 + ], + "body": [ + { + "type": "ClassDeclaration", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 3, + "column": 1 + } + }, + "range": [ + 0, + 29 + ], + "id": { + "type": "Identifier", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "range": [ + 6, + 7 + ], + "name": "C" + }, + "superClass": null, + "body": { + "type": "ClassBody", + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 3, + "column": 1 + } + }, + "range": [ + 8, + 29 + ], + "body": [ + { + "type": "PropertyDefinition", + "loc": { + "start": { + "line": 2, + "column": 4 + }, + "end": { + "line": 2, + "column": 17 + } + }, + "range": [ + 14, + 27 + ], + "static": false, + "computed": false, + "key": { + "type": "Identifier", + "loc": { + "start": { + "line": 2, + "column": 4 + }, + "end": { + "line": 2, + "column": 13 + } + }, + "range": [ + 14, + 23 + ], + "name": "prototype" + }, + "value": { + "type": "Literal", + "loc": { + "start": { + "line": 2, + "column": 16 + }, + "end": { + "line": 2, + "column": 17 + } + }, + "range": [ + 26, + 27 + ], + "value": 0, + "raw": "0" + } + } + ] + } + } + ], + "sourceType": "script", + "tokens": [ + { + "type": "Keyword", + "value": "class", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 5 + } + }, + "range": [ + 0, + 5 + ] + }, + { + "type": "Identifier", + "value": "C", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "range": [ + 6, + 7 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 9 + } + }, + "range": [ + 8, + 9 + ] + }, + { + "type": "Identifier", + "value": "prototype", + "loc": { + "start": { + "line": 2, + "column": 4 + }, + "end": { + "line": 2, + "column": 13 + } + }, + "range": [ + 14, + 23 + ] + }, + { + "type": "Punctuator", + "value": "=", + "loc": { + "start": { + "line": 2, + "column": 14 + }, + "end": { + "line": 2, + "column": 15 + } + }, + "range": [ + 24, + 25 + ] + }, + { + "type": "Numeric", + "value": "0", + "loc": { + "start": { + "line": 2, + "column": 16 + }, + "end": { + "line": 2, + "column": 17 + } + }, + "range": [ + 26, + 27 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 3, + "column": 0 + }, + "end": { + "line": 3, + "column": 1 + } + }, + "range": [ + 28, + 29 + ] + } + ] +}; \ No newline at end of file diff --git a/tests/fixtures/ecma-version/13/class-fields/valid-prototype.src.js b/tests/fixtures/ecma-version/13/class-fields/valid-prototype.src.js new file mode 100644 index 00000000..c38df329 --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/valid-prototype.src.js @@ -0,0 +1,3 @@ +class C { + prototype = 0 +} diff --git a/tests/fixtures/ecma-version/13/class-fields/valid-public-asi.result.js b/tests/fixtures/ecma-version/13/class-fields/valid-public-asi.result.js new file mode 100644 index 00000000..2656721b --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/valid-public-asi.result.js @@ -0,0 +1,371 @@ +export default { + "type": "Program", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 5, + "column": 1 + } + }, + "range": [ + 0, + 39 + ], + "body": [ + { + "type": "ClassDeclaration", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 5, + "column": 1 + } + }, + "range": [ + 0, + 39 + ], + "id": { + "type": "Identifier", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "range": [ + 6, + 7 + ], + "name": "C" + }, + "superClass": null, + "body": { + "type": "ClassBody", + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 5, + "column": 1 + } + }, + "range": [ + 8, + 39 + ], + "body": [ + { + "type": "PropertyDefinition", + "loc": { + "start": { + "line": 2, + "column": 4 + }, + "end": { + "line": 2, + "column": 7 + } + }, + "range": [ + 14, + 17 + ], + "static": false, + "computed": false, + "key": { + "type": "Identifier", + "loc": { + "start": { + "line": 2, + "column": 4 + }, + "end": { + "line": 2, + "column": 7 + } + }, + "range": [ + 14, + 17 + ], + "name": "aaa" + }, + "value": null + }, + { + "type": "PropertyDefinition", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 3, + "column": 11 + } + }, + "range": [ + 22, + 29 + ], + "static": false, + "computed": false, + "key": { + "type": "Identifier", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 3, + "column": 7 + } + }, + "range": [ + 22, + 25 + ], + "name": "bbb" + }, + "value": { + "type": "Literal", + "loc": { + "start": { + "line": 3, + "column": 10 + }, + "end": { + "line": 3, + "column": 11 + } + }, + "range": [ + 28, + 29 + ], + "value": 0, + "raw": "0" + } + }, + { + "type": "PropertyDefinition", + "loc": { + "start": { + "line": 4, + "column": 4 + }, + "end": { + "line": 4, + "column": 7 + } + }, + "range": [ + 34, + 37 + ], + "static": false, + "computed": false, + "key": { + "type": "Identifier", + "loc": { + "start": { + "line": 4, + "column": 4 + }, + "end": { + "line": 4, + "column": 7 + } + }, + "range": [ + 34, + 37 + ], + "name": "ccc" + }, + "value": null + } + ] + } + } + ], + "sourceType": "script", + "tokens": [ + { + "type": "Keyword", + "value": "class", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 5 + } + }, + "range": [ + 0, + 5 + ] + }, + { + "type": "Identifier", + "value": "C", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "range": [ + 6, + 7 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 9 + } + }, + "range": [ + 8, + 9 + ] + }, + { + "type": "Identifier", + "value": "aaa", + "loc": { + "start": { + "line": 2, + "column": 4 + }, + "end": { + "line": 2, + "column": 7 + } + }, + "range": [ + 14, + 17 + ] + }, + { + "type": "Identifier", + "value": "bbb", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 3, + "column": 7 + } + }, + "range": [ + 22, + 25 + ] + }, + { + "type": "Punctuator", + "value": "=", + "loc": { + "start": { + "line": 3, + "column": 8 + }, + "end": { + "line": 3, + "column": 9 + } + }, + "range": [ + 26, + 27 + ] + }, + { + "type": "Numeric", + "value": "0", + "loc": { + "start": { + "line": 3, + "column": 10 + }, + "end": { + "line": 3, + "column": 11 + } + }, + "range": [ + 28, + 29 + ] + }, + { + "type": "Identifier", + "value": "ccc", + "loc": { + "start": { + "line": 4, + "column": 4 + }, + "end": { + "line": 4, + "column": 7 + } + }, + "range": [ + 34, + 37 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 5, + "column": 0 + }, + "end": { + "line": 5, + "column": 1 + } + }, + "range": [ + 38, + 39 + ] + } + ] +}; \ No newline at end of file diff --git a/tests/fixtures/ecma-version/13/class-fields/valid-public-asi.src.js b/tests/fixtures/ecma-version/13/class-fields/valid-public-asi.src.js new file mode 100644 index 00000000..bcada874 --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/valid-public-asi.src.js @@ -0,0 +1,5 @@ +class C { + aaa + bbb = 0 + ccc +} diff --git a/tests/fixtures/ecma-version/13/class-fields/valid-public.result.js b/tests/fixtures/ecma-version/13/class-fields/valid-public.result.js new file mode 100644 index 00000000..19b4f2aa --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/valid-public.result.js @@ -0,0 +1,223 @@ +export default { + "type": "Program", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 4, + "column": 1 + } + }, + "range": [ + 0, + 81 + ], + "body": [ + { + "type": "ClassDeclaration", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 4, + "column": 1 + } + }, + "range": [ + 0, + 81 + ], + "id": { + "type": "Identifier", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "range": [ + 6, + 7 + ], + "name": "C" + }, + "superClass": null, + "body": { + "type": "ClassBody", + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 4, + "column": 1 + } + }, + "range": [ + 8, + 81 + ], + "body": [ + { + "type": "PropertyDefinition", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 3, + "column": 8 + } + }, + "range": [ + 75, + 79 + ], + "static": false, + "computed": false, + "key": { + "type": "Identifier", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 3, + "column": 7 + } + }, + "range": [ + 75, + 78 + ], + "name": "aaa" + }, + "value": null + } + ] + } + } + ], + "sourceType": "script", + "tokens": [ + { + "type": "Keyword", + "value": "class", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 5 + } + }, + "range": [ + 0, + 5 + ] + }, + { + "type": "Identifier", + "value": "C", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "range": [ + 6, + 7 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 9 + } + }, + "range": [ + 8, + 9 + ] + }, + { + "type": "Identifier", + "value": "aaa", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 3, + "column": 7 + } + }, + "range": [ + 75, + 78 + ] + }, + { + "type": "Punctuator", + "value": ";", + "loc": { + "start": { + "line": 3, + "column": 7 + }, + "end": { + "line": 3, + "column": 8 + } + }, + "range": [ + 78, + 79 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 4, + "column": 0 + }, + "end": { + "line": 4, + "column": 1 + } + }, + "range": [ + 80, + 81 + ] + } + ] +}; \ No newline at end of file diff --git a/tests/fixtures/ecma-version/13/class-fields/valid-public.src.js b/tests/fixtures/ecma-version/13/class-fields/valid-public.src.js new file mode 100644 index 00000000..2838d1ed --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/valid-public.src.js @@ -0,0 +1,4 @@ +class C { + // Semicolon is in the range of PropertyDefinition node. + aaa; +} diff --git a/tests/fixtures/ecma-version/13/class-fields/valid-special-field-names-init.result.js b/tests/fixtures/ecma-version/13/class-fields/valid-special-field-names-init.result.js new file mode 100644 index 00000000..d0fb9081 --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/valid-special-field-names-init.result.js @@ -0,0 +1,704 @@ +export default { + "type": "Program", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 7, + "column": 1 + } + }, + "range": [ + 0, + 83 + ], + "body": [ + { + "type": "ClassDeclaration", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 7, + "column": 1 + } + }, + "range": [ + 0, + 83 + ], + "id": { + "type": "Identifier", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "range": [ + 6, + 7 + ], + "name": "C" + }, + "superClass": null, + "body": { + "type": "ClassBody", + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 7, + "column": 1 + } + }, + "range": [ + 8, + 83 + ], + "body": [ + { + "type": "PropertyDefinition", + "loc": { + "start": { + "line": 2, + "column": 4 + }, + "end": { + "line": 2, + "column": 11 + } + }, + "range": [ + 14, + 21 + ], + "static": false, + "computed": false, + "key": { + "type": "Literal", + "loc": { + "start": { + "line": 2, + "column": 4 + }, + "end": { + "line": 2, + "column": 7 + } + }, + "range": [ + 14, + 17 + ], + "value": 1000, + "raw": "1e3" + }, + "value": { + "type": "Literal", + "loc": { + "start": { + "line": 2, + "column": 10 + }, + "end": { + "line": 2, + "column": 11 + } + }, + "range": [ + 20, + 21 + ], + "value": 0, + "raw": "0" + } + }, + { + "type": "PropertyDefinition", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 3, + "column": 16 + } + }, + "range": [ + 26, + 38 + ], + "static": false, + "computed": false, + "key": { + "type": "Literal", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 3, + "column": 12 + } + }, + "range": [ + 26, + 34 + ], + "value": "double", + "raw": "\"double\"" + }, + "value": { + "type": "Literal", + "loc": { + "start": { + "line": 3, + "column": 15 + }, + "end": { + "line": 3, + "column": 16 + } + }, + "range": [ + 37, + 38 + ], + "value": 0, + "raw": "0" + } + }, + { + "type": "PropertyDefinition", + "loc": { + "start": { + "line": 4, + "column": 4 + }, + "end": { + "line": 4, + "column": 16 + } + }, + "range": [ + 43, + 55 + ], + "static": false, + "computed": false, + "key": { + "type": "Literal", + "loc": { + "start": { + "line": 4, + "column": 4 + }, + "end": { + "line": 4, + "column": 12 + } + }, + "range": [ + 43, + 51 + ], + "value": "single", + "raw": "'single'" + }, + "value": { + "type": "Literal", + "loc": { + "start": { + "line": 4, + "column": 15 + }, + "end": { + "line": 4, + "column": 16 + } + }, + "range": [ + 54, + 55 + ], + "value": 0, + "raw": "0" + } + }, + { + "type": "PropertyDefinition", + "loc": { + "start": { + "line": 5, + "column": 4 + }, + "end": { + "line": 5, + "column": 10 + } + }, + "range": [ + 60, + 66 + ], + "static": false, + "computed": false, + "key": { + "type": "Literal", + "loc": { + "start": { + "line": 5, + "column": 4 + }, + "end": { + "line": 5, + "column": 6 + } + }, + "range": [ + 60, + 62 + ], + "value": 1n, + "raw": "1n", + "bigint": "1" + }, + "value": { + "type": "Literal", + "loc": { + "start": { + "line": 5, + "column": 9 + }, + "end": { + "line": 5, + "column": 10 + } + }, + "range": [ + 65, + 66 + ], + "value": 0, + "raw": "0" + } + }, + { + "type": "PropertyDefinition", + "loc": { + "start": { + "line": 6, + "column": 4 + }, + "end": { + "line": 6, + "column": 14 + } + }, + "range": [ + 71, + 81 + ], + "static": false, + "computed": false, + "key": { + "type": "Identifier", + "loc": { + "start": { + "line": 6, + "column": 4 + }, + "end": { + "line": 6, + "column": 10 + } + }, + "range": [ + 71, + 77 + ], + "name": "A" + }, + "value": { + "type": "Literal", + "loc": { + "start": { + "line": 6, + "column": 13 + }, + "end": { + "line": 6, + "column": 14 + } + }, + "range": [ + 80, + 81 + ], + "value": 0, + "raw": "0" + } + } + ] + } + } + ], + "sourceType": "script", + "tokens": [ + { + "type": "Keyword", + "value": "class", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 5 + } + }, + "range": [ + 0, + 5 + ] + }, + { + "type": "Identifier", + "value": "C", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "range": [ + 6, + 7 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 9 + } + }, + "range": [ + 8, + 9 + ] + }, + { + "type": "Numeric", + "value": "1e3", + "loc": { + "start": { + "line": 2, + "column": 4 + }, + "end": { + "line": 2, + "column": 7 + } + }, + "range": [ + 14, + 17 + ] + }, + { + "type": "Punctuator", + "value": "=", + "loc": { + "start": { + "line": 2, + "column": 8 + }, + "end": { + "line": 2, + "column": 9 + } + }, + "range": [ + 18, + 19 + ] + }, + { + "type": "Numeric", + "value": "0", + "loc": { + "start": { + "line": 2, + "column": 10 + }, + "end": { + "line": 2, + "column": 11 + } + }, + "range": [ + 20, + 21 + ] + }, + { + "type": "String", + "value": "\"double\"", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 3, + "column": 12 + } + }, + "range": [ + 26, + 34 + ] + }, + { + "type": "Punctuator", + "value": "=", + "loc": { + "start": { + "line": 3, + "column": 13 + }, + "end": { + "line": 3, + "column": 14 + } + }, + "range": [ + 35, + 36 + ] + }, + { + "type": "Numeric", + "value": "0", + "loc": { + "start": { + "line": 3, + "column": 15 + }, + "end": { + "line": 3, + "column": 16 + } + }, + "range": [ + 37, + 38 + ] + }, + { + "type": "String", + "value": "'single'", + "loc": { + "start": { + "line": 4, + "column": 4 + }, + "end": { + "line": 4, + "column": 12 + } + }, + "range": [ + 43, + 51 + ] + }, + { + "type": "Punctuator", + "value": "=", + "loc": { + "start": { + "line": 4, + "column": 13 + }, + "end": { + "line": 4, + "column": 14 + } + }, + "range": [ + 52, + 53 + ] + }, + { + "type": "Numeric", + "value": "0", + "loc": { + "start": { + "line": 4, + "column": 15 + }, + "end": { + "line": 4, + "column": 16 + } + }, + "range": [ + 54, + 55 + ] + }, + { + "type": "Numeric", + "value": "1n", + "loc": { + "start": { + "line": 5, + "column": 4 + }, + "end": { + "line": 5, + "column": 6 + } + }, + "range": [ + 60, + 62 + ] + }, + { + "type": "Punctuator", + "value": "=", + "loc": { + "start": { + "line": 5, + "column": 7 + }, + "end": { + "line": 5, + "column": 8 + } + }, + "range": [ + 63, + 64 + ] + }, + { + "type": "Numeric", + "value": "0", + "loc": { + "start": { + "line": 5, + "column": 9 + }, + "end": { + "line": 5, + "column": 10 + } + }, + "range": [ + 65, + 66 + ] + }, + { + "type": "Identifier", + "value": "A", + "loc": { + "start": { + "line": 6, + "column": 4 + }, + "end": { + "line": 6, + "column": 10 + } + }, + "range": [ + 71, + 77 + ] + }, + { + "type": "Punctuator", + "value": "=", + "loc": { + "start": { + "line": 6, + "column": 11 + }, + "end": { + "line": 6, + "column": 12 + } + }, + "range": [ + 78, + 79 + ] + }, + { + "type": "Numeric", + "value": "0", + "loc": { + "start": { + "line": 6, + "column": 13 + }, + "end": { + "line": 6, + "column": 14 + } + }, + "range": [ + 80, + 81 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 7, + "column": 0 + }, + "end": { + "line": 7, + "column": 1 + } + }, + "range": [ + 82, + 83 + ] + } + ] +}; \ No newline at end of file diff --git a/tests/fixtures/ecma-version/13/class-fields/valid-special-field-names-init.src.js b/tests/fixtures/ecma-version/13/class-fields/valid-special-field-names-init.src.js new file mode 100644 index 00000000..1b21a82c --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/valid-special-field-names-init.src.js @@ -0,0 +1,7 @@ +class C { + 1e3 = 0 + "double" = 0 + 'single' = 0 + 1n = 0 + \u0041 = 0 +} diff --git a/tests/fixtures/ecma-version/13/class-fields/valid-special-field-names.result.js b/tests/fixtures/ecma-version/13/class-fields/valid-special-field-names.result.js new file mode 100644 index 00000000..e795e89c --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/valid-special-field-names.result.js @@ -0,0 +1,434 @@ +export default { + "type": "Program", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 7, + "column": 1 + } + }, + "range": [ + 0, + 63 + ], + "body": [ + { + "type": "ClassDeclaration", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 7, + "column": 1 + } + }, + "range": [ + 0, + 63 + ], + "id": { + "type": "Identifier", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "range": [ + 6, + 7 + ], + "name": "C" + }, + "superClass": null, + "body": { + "type": "ClassBody", + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 7, + "column": 1 + } + }, + "range": [ + 8, + 63 + ], + "body": [ + { + "type": "PropertyDefinition", + "loc": { + "start": { + "line": 2, + "column": 4 + }, + "end": { + "line": 2, + "column": 7 + } + }, + "range": [ + 14, + 17 + ], + "static": false, + "computed": false, + "key": { + "type": "Literal", + "loc": { + "start": { + "line": 2, + "column": 4 + }, + "end": { + "line": 2, + "column": 7 + } + }, + "range": [ + 14, + 17 + ], + "value": 1000, + "raw": "1e3" + }, + "value": null + }, + { + "type": "PropertyDefinition", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 3, + "column": 12 + } + }, + "range": [ + 22, + 30 + ], + "static": false, + "computed": false, + "key": { + "type": "Literal", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 3, + "column": 12 + } + }, + "range": [ + 22, + 30 + ], + "value": "double", + "raw": "\"double\"" + }, + "value": null + }, + { + "type": "PropertyDefinition", + "loc": { + "start": { + "line": 4, + "column": 4 + }, + "end": { + "line": 4, + "column": 12 + } + }, + "range": [ + 35, + 43 + ], + "static": false, + "computed": false, + "key": { + "type": "Literal", + "loc": { + "start": { + "line": 4, + "column": 4 + }, + "end": { + "line": 4, + "column": 12 + } + }, + "range": [ + 35, + 43 + ], + "value": "single", + "raw": "'single'" + }, + "value": null + }, + { + "type": "PropertyDefinition", + "loc": { + "start": { + "line": 5, + "column": 4 + }, + "end": { + "line": 5, + "column": 6 + } + }, + "range": [ + 48, + 50 + ], + "static": false, + "computed": false, + "key": { + "type": "Literal", + "loc": { + "start": { + "line": 5, + "column": 4 + }, + "end": { + "line": 5, + "column": 6 + } + }, + "range": [ + 48, + 50 + ], + "value": 1n, + "raw": "1n", + "bigint": "1" + }, + "value": null + }, + { + "type": "PropertyDefinition", + "loc": { + "start": { + "line": 6, + "column": 4 + }, + "end": { + "line": 6, + "column": 10 + } + }, + "range": [ + 55, + 61 + ], + "static": false, + "computed": false, + "key": { + "type": "Identifier", + "loc": { + "start": { + "line": 6, + "column": 4 + }, + "end": { + "line": 6, + "column": 10 + } + }, + "range": [ + 55, + 61 + ], + "name": "A" + }, + "value": null + } + ] + } + } + ], + "sourceType": "script", + "tokens": [ + { + "type": "Keyword", + "value": "class", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 5 + } + }, + "range": [ + 0, + 5 + ] + }, + { + "type": "Identifier", + "value": "C", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "range": [ + 6, + 7 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 9 + } + }, + "range": [ + 8, + 9 + ] + }, + { + "type": "Numeric", + "value": "1e3", + "loc": { + "start": { + "line": 2, + "column": 4 + }, + "end": { + "line": 2, + "column": 7 + } + }, + "range": [ + 14, + 17 + ] + }, + { + "type": "String", + "value": "\"double\"", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 3, + "column": 12 + } + }, + "range": [ + 22, + 30 + ] + }, + { + "type": "String", + "value": "'single'", + "loc": { + "start": { + "line": 4, + "column": 4 + }, + "end": { + "line": 4, + "column": 12 + } + }, + "range": [ + 35, + 43 + ] + }, + { + "type": "Numeric", + "value": "1n", + "loc": { + "start": { + "line": 5, + "column": 4 + }, + "end": { + "line": 5, + "column": 6 + } + }, + "range": [ + 48, + 50 + ] + }, + { + "type": "Identifier", + "value": "A", + "loc": { + "start": { + "line": 6, + "column": 4 + }, + "end": { + "line": 6, + "column": 10 + } + }, + "range": [ + 55, + 61 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 7, + "column": 0 + }, + "end": { + "line": 7, + "column": 1 + } + }, + "range": [ + 62, + 63 + ] + } + ] +}; \ No newline at end of file diff --git a/tests/fixtures/ecma-version/13/class-fields/valid-special-field-names.src.js b/tests/fixtures/ecma-version/13/class-fields/valid-special-field-names.src.js new file mode 100644 index 00000000..c6b427c3 --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/valid-special-field-names.src.js @@ -0,0 +1,7 @@ +class C { + 1e3 + "double" + 'single' + 1n + \u0041 +} diff --git a/tests/fixtures/ecma-version/13/class-fields/valid-star-asi.result.js b/tests/fixtures/ecma-version/13/class-fields/valid-star-asi.result.js new file mode 100644 index 00000000..29496308 --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/valid-star-asi.result.js @@ -0,0 +1,391 @@ +export default { + "type": "Program", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 5, + "column": 1 + } + }, + "range": [ + 0, + 71 + ], + "body": [ + { + "type": "ClassDeclaration", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 5, + "column": 1 + } + }, + "range": [ + 0, + 71 + ], + "id": { + "type": "Identifier", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "range": [ + 6, + 7 + ], + "name": "C" + }, + "superClass": null, + "body": { + "type": "ClassBody", + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 5, + "column": 1 + } + }, + "range": [ + 8, + 71 + ], + "body": [ + { + "type": "PropertyDefinition", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 3, + "column": 7 + } + }, + "range": [ + 55, + 58 + ], + "static": false, + "computed": false, + "key": { + "type": "Identifier", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 3, + "column": 7 + } + }, + "range": [ + 55, + 58 + ], + "name": "aaa" + }, + "value": null + }, + { + "type": "MethodDefinition", + "loc": { + "start": { + "line": 4, + "column": 4 + }, + "end": { + "line": 4, + "column": 10 + } + }, + "range": [ + 63, + 69 + ], + "static": false, + "computed": false, + "key": { + "type": "Identifier", + "loc": { + "start": { + "line": 4, + "column": 5 + }, + "end": { + "line": 4, + "column": 6 + } + }, + "range": [ + 64, + 65 + ], + "name": "f" + }, + "kind": "method", + "value": { + "type": "FunctionExpression", + "loc": { + "start": { + "line": 4, + "column": 6 + }, + "end": { + "line": 4, + "column": 10 + } + }, + "range": [ + 65, + 69 + ], + "id": null, + "expression": false, + "generator": true, + "async": false, + "params": [], + "body": { + "type": "BlockStatement", + "loc": { + "start": { + "line": 4, + "column": 8 + }, + "end": { + "line": 4, + "column": 10 + } + }, + "range": [ + 67, + 69 + ], + "body": [] + } + } + } + ] + } + } + ], + "sourceType": "script", + "tokens": [ + { + "type": "Keyword", + "value": "class", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 5 + } + }, + "range": [ + 0, + 5 + ] + }, + { + "type": "Identifier", + "value": "C", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "range": [ + 6, + 7 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 9 + } + }, + "range": [ + 8, + 9 + ] + }, + { + "type": "Identifier", + "value": "aaa", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 3, + "column": 7 + } + }, + "range": [ + 55, + 58 + ] + }, + { + "type": "Punctuator", + "value": "*", + "loc": { + "start": { + "line": 4, + "column": 4 + }, + "end": { + "line": 4, + "column": 5 + } + }, + "range": [ + 63, + 64 + ] + }, + { + "type": "Identifier", + "value": "f", + "loc": { + "start": { + "line": 4, + "column": 5 + }, + "end": { + "line": 4, + "column": 6 + } + }, + "range": [ + 64, + 65 + ] + }, + { + "type": "Punctuator", + "value": "(", + "loc": { + "start": { + "line": 4, + "column": 6 + }, + "end": { + "line": 4, + "column": 7 + } + }, + "range": [ + 65, + 66 + ] + }, + { + "type": "Punctuator", + "value": ")", + "loc": { + "start": { + "line": 4, + "column": 7 + }, + "end": { + "line": 4, + "column": 8 + } + }, + "range": [ + 66, + 67 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 4, + "column": 8 + }, + "end": { + "line": 4, + "column": 9 + } + }, + "range": [ + 67, + 68 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 4, + "column": 9 + }, + "end": { + "line": 4, + "column": 10 + } + }, + "range": [ + 68, + 69 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 5, + "column": 0 + }, + "end": { + "line": 5, + "column": 1 + } + }, + "range": [ + 70, + 71 + ] + } + ] +}; \ No newline at end of file diff --git a/tests/fixtures/ecma-version/13/class-fields/valid-star-asi.src.js b/tests/fixtures/ecma-version/13/class-fields/valid-star-asi.src.js new file mode 100644 index 00000000..27b2b8ef --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/valid-star-asi.src.js @@ -0,0 +1,5 @@ +class C { + // Line breaks create fields by ASI. + aaa + *f(){} +} diff --git a/tests/fixtures/ecma-version/13/class-fields/valid-star-no-asi.result.js b/tests/fixtures/ecma-version/13/class-fields/valid-star-no-asi.result.js new file mode 100644 index 00000000..f8ad6c33 --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/valid-star-no-asi.result.js @@ -0,0 +1,386 @@ +export default { + "type": "Program", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 5, + "column": 1 + } + }, + "range": [ + 0, + 57 + ], + "body": [ + { + "type": "ClassDeclaration", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 5, + "column": 1 + } + }, + "range": [ + 0, + 57 + ], + "id": { + "type": "Identifier", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "range": [ + 6, + 7 + ], + "name": "C" + }, + "superClass": null, + "body": { + "type": "ClassBody", + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 5, + "column": 1 + } + }, + "range": [ + 8, + 57 + ], + "body": [ + { + "type": "PropertyDefinition", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 4, + "column": 8 + } + }, + "range": [ + 39, + 55 + ], + "static": false, + "computed": false, + "key": { + "type": "Identifier", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 3, + "column": 7 + } + }, + "range": [ + 39, + 42 + ], + "name": "aaa" + }, + "value": { + "type": "BinaryExpression", + "loc": { + "start": { + "line": 3, + "column": 10 + }, + "end": { + "line": 4, + "column": 8 + } + }, + "range": [ + 45, + 55 + ], + "left": { + "type": "Literal", + "loc": { + "start": { + "line": 3, + "column": 10 + }, + "end": { + "line": 3, + "column": 11 + } + }, + "range": [ + 45, + 46 + ], + "value": 2, + "raw": "2" + }, + "operator": "*", + "right": { + "type": "CallExpression", + "loc": { + "start": { + "line": 4, + "column": 5 + }, + "end": { + "line": 4, + "column": 8 + } + }, + "range": [ + 52, + 55 + ], + "callee": { + "type": "Identifier", + "loc": { + "start": { + "line": 4, + "column": 5 + }, + "end": { + "line": 4, + "column": 6 + } + }, + "range": [ + 52, + 53 + ], + "name": "f" + }, + "arguments": [], + "optional": false + } + } + } + ] + } + } + ], + "sourceType": "script", + "tokens": [ + { + "type": "Keyword", + "value": "class", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 5 + } + }, + "range": [ + 0, + 5 + ] + }, + { + "type": "Identifier", + "value": "C", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "range": [ + 6, + 7 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 9 + } + }, + "range": [ + 8, + 9 + ] + }, + { + "type": "Identifier", + "value": "aaa", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 3, + "column": 7 + } + }, + "range": [ + 39, + 42 + ] + }, + { + "type": "Punctuator", + "value": "=", + "loc": { + "start": { + "line": 3, + "column": 8 + }, + "end": { + "line": 3, + "column": 9 + } + }, + "range": [ + 43, + 44 + ] + }, + { + "type": "Numeric", + "value": "2", + "loc": { + "start": { + "line": 3, + "column": 10 + }, + "end": { + "line": 3, + "column": 11 + } + }, + "range": [ + 45, + 46 + ] + }, + { + "type": "Punctuator", + "value": "*", + "loc": { + "start": { + "line": 4, + "column": 4 + }, + "end": { + "line": 4, + "column": 5 + } + }, + "range": [ + 51, + 52 + ] + }, + { + "type": "Identifier", + "value": "f", + "loc": { + "start": { + "line": 4, + "column": 5 + }, + "end": { + "line": 4, + "column": 6 + } + }, + "range": [ + 52, + 53 + ] + }, + { + "type": "Punctuator", + "value": "(", + "loc": { + "start": { + "line": 4, + "column": 6 + }, + "end": { + "line": 4, + "column": 7 + } + }, + "range": [ + 53, + 54 + ] + }, + { + "type": "Punctuator", + "value": ")", + "loc": { + "start": { + "line": 4, + "column": 7 + }, + "end": { + "line": 4, + "column": 8 + } + }, + "range": [ + 54, + 55 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 5, + "column": 0 + }, + "end": { + "line": 5, + "column": 1 + } + }, + "range": [ + 56, + 57 + ] + } + ] +}; \ No newline at end of file diff --git a/tests/fixtures/ecma-version/13/class-fields/valid-star-no-asi.src.js b/tests/fixtures/ecma-version/13/class-fields/valid-star-no-asi.src.js new file mode 100644 index 00000000..4eec00e2 --- /dev/null +++ b/tests/fixtures/ecma-version/13/class-fields/valid-star-no-asi.src.js @@ -0,0 +1,5 @@ +class C { + // This is `2 * f()` + aaa = 2 + *f() +} diff --git a/tests/fixtures/ecma-version/13/private-methods/invalid-conflict-names.result.js b/tests/fixtures/ecma-version/13/private-methods/invalid-conflict-names.result.js new file mode 100644 index 00000000..71125475 --- /dev/null +++ b/tests/fixtures/ecma-version/13/private-methods/invalid-conflict-names.result.js @@ -0,0 +1,6 @@ +export default { + "index": 25, + "lineNumber": 3, + "column": 5, + "message": "Identifier '#a' has already been declared" +}; \ No newline at end of file diff --git a/tests/fixtures/ecma-version/13/private-methods/invalid-conflict-names.src.js b/tests/fixtures/ecma-version/13/private-methods/invalid-conflict-names.src.js new file mode 100644 index 00000000..720d6100 --- /dev/null +++ b/tests/fixtures/ecma-version/13/private-methods/invalid-conflict-names.src.js @@ -0,0 +1,4 @@ +class C { + #a(){} + #a(){} +} diff --git a/tests/fixtures/ecma-version/13/private-methods/invalid-constructor.result.js b/tests/fixtures/ecma-version/13/private-methods/invalid-constructor.result.js new file mode 100644 index 00000000..c9c25ffb --- /dev/null +++ b/tests/fixtures/ecma-version/13/private-methods/invalid-constructor.result.js @@ -0,0 +1,6 @@ +export default { + "index": 14, + "lineNumber": 2, + "column": 5, + "message": "Classes can't have an element named '#constructor'" +}; \ No newline at end of file diff --git a/tests/fixtures/ecma-version/13/private-methods/invalid-constructor.src.js b/tests/fixtures/ecma-version/13/private-methods/invalid-constructor.src.js new file mode 100644 index 00000000..51e1df4a --- /dev/null +++ b/tests/fixtures/ecma-version/13/private-methods/invalid-constructor.src.js @@ -0,0 +1,3 @@ +class C { + #constructor() {} +} diff --git a/tests/fixtures/ecma-version/13/private-methods/valid-accessor.result.js b/tests/fixtures/ecma-version/13/private-methods/valid-accessor.result.js new file mode 100644 index 00000000..fac9f926 --- /dev/null +++ b/tests/fixtures/ecma-version/13/private-methods/valid-accessor.result.js @@ -0,0 +1,558 @@ +export default { + "type": "Program", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 4, + "column": 1 + } + }, + "range": [ + 0, + 48 + ], + "body": [ + { + "type": "ClassDeclaration", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 4, + "column": 1 + } + }, + "range": [ + 0, + 48 + ], + "id": { + "type": "Identifier", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "range": [ + 6, + 7 + ], + "name": "C" + }, + "superClass": null, + "body": { + "type": "ClassBody", + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 4, + "column": 1 + } + }, + "range": [ + 8, + 48 + ], + "body": [ + { + "type": "MethodDefinition", + "loc": { + "start": { + "line": 2, + "column": 4 + }, + "end": { + "line": 2, + "column": 17 + } + }, + "range": [ + 14, + 27 + ], + "static": false, + "computed": false, + "key": { + "type": "PrivateIdentifier", + "loc": { + "start": { + "line": 2, + "column": 8 + }, + "end": { + "line": 2, + "column": 12 + } + }, + "range": [ + 18, + 22 + ], + "name": "aaa" + }, + "kind": "get", + "value": { + "type": "FunctionExpression", + "loc": { + "start": { + "line": 2, + "column": 12 + }, + "end": { + "line": 2, + "column": 17 + } + }, + "range": [ + 22, + 27 + ], + "id": null, + "expression": false, + "generator": false, + "async": false, + "params": [], + "body": { + "type": "BlockStatement", + "loc": { + "start": { + "line": 2, + "column": 15 + }, + "end": { + "line": 2, + "column": 17 + } + }, + "range": [ + 25, + 27 + ], + "body": [] + } + } + }, + { + "type": "MethodDefinition", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 3, + "column": 18 + } + }, + "range": [ + 32, + 46 + ], + "static": false, + "computed": false, + "key": { + "type": "PrivateIdentifier", + "loc": { + "start": { + "line": 3, + "column": 8 + }, + "end": { + "line": 3, + "column": 12 + } + }, + "range": [ + 36, + 40 + ], + "name": "aaa" + }, + "kind": "set", + "value": { + "type": "FunctionExpression", + "loc": { + "start": { + "line": 3, + "column": 12 + }, + "end": { + "line": 3, + "column": 18 + } + }, + "range": [ + 40, + 46 + ], + "id": null, + "expression": false, + "generator": false, + "async": false, + "params": [ + { + "type": "Identifier", + "loc": { + "start": { + "line": 3, + "column": 13 + }, + "end": { + "line": 3, + "column": 14 + } + }, + "range": [ + 41, + 42 + ], + "name": "x" + } + ], + "body": { + "type": "BlockStatement", + "loc": { + "start": { + "line": 3, + "column": 16 + }, + "end": { + "line": 3, + "column": 18 + } + }, + "range": [ + 44, + 46 + ], + "body": [] + } + } + } + ] + } + } + ], + "sourceType": "script", + "tokens": [ + { + "type": "Keyword", + "value": "class", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 5 + } + }, + "range": [ + 0, + 5 + ] + }, + { + "type": "Identifier", + "value": "C", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "range": [ + 6, + 7 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 9 + } + }, + "range": [ + 8, + 9 + ] + }, + { + "type": "Identifier", + "value": "get", + "loc": { + "start": { + "line": 2, + "column": 4 + }, + "end": { + "line": 2, + "column": 7 + } + }, + "range": [ + 14, + 17 + ] + }, + { + "type": "PrivateIdentifier", + "value": "aaa", + "loc": { + "start": { + "line": 2, + "column": 8 + }, + "end": { + "line": 2, + "column": 12 + } + }, + "range": [ + 18, + 22 + ] + }, + { + "type": "Punctuator", + "value": "(", + "loc": { + "start": { + "line": 2, + "column": 12 + }, + "end": { + "line": 2, + "column": 13 + } + }, + "range": [ + 22, + 23 + ] + }, + { + "type": "Punctuator", + "value": ")", + "loc": { + "start": { + "line": 2, + "column": 13 + }, + "end": { + "line": 2, + "column": 14 + } + }, + "range": [ + 23, + 24 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 2, + "column": 15 + }, + "end": { + "line": 2, + "column": 16 + } + }, + "range": [ + 25, + 26 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 2, + "column": 16 + }, + "end": { + "line": 2, + "column": 17 + } + }, + "range": [ + 26, + 27 + ] + }, + { + "type": "Identifier", + "value": "set", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 3, + "column": 7 + } + }, + "range": [ + 32, + 35 + ] + }, + { + "type": "PrivateIdentifier", + "value": "aaa", + "loc": { + "start": { + "line": 3, + "column": 8 + }, + "end": { + "line": 3, + "column": 12 + } + }, + "range": [ + 36, + 40 + ] + }, + { + "type": "Punctuator", + "value": "(", + "loc": { + "start": { + "line": 3, + "column": 12 + }, + "end": { + "line": 3, + "column": 13 + } + }, + "range": [ + 40, + 41 + ] + }, + { + "type": "Identifier", + "value": "x", + "loc": { + "start": { + "line": 3, + "column": 13 + }, + "end": { + "line": 3, + "column": 14 + } + }, + "range": [ + 41, + 42 + ] + }, + { + "type": "Punctuator", + "value": ")", + "loc": { + "start": { + "line": 3, + "column": 14 + }, + "end": { + "line": 3, + "column": 15 + } + }, + "range": [ + 42, + 43 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 3, + "column": 16 + }, + "end": { + "line": 3, + "column": 17 + } + }, + "range": [ + 44, + 45 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 3, + "column": 17 + }, + "end": { + "line": 3, + "column": 18 + } + }, + "range": [ + 45, + 46 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 4, + "column": 0 + }, + "end": { + "line": 4, + "column": 1 + } + }, + "range": [ + 47, + 48 + ] + } + ] +}; \ No newline at end of file diff --git a/tests/fixtures/ecma-version/13/private-methods/valid-accessor.src.js b/tests/fixtures/ecma-version/13/private-methods/valid-accessor.src.js new file mode 100644 index 00000000..5960dc5f --- /dev/null +++ b/tests/fixtures/ecma-version/13/private-methods/valid-accessor.src.js @@ -0,0 +1,4 @@ +class C { + get #aaa() {} + set #aaa(x) {} +} diff --git a/tests/fixtures/ecma-version/13/private-methods/valid-async-asi.result.js b/tests/fixtures/ecma-version/13/private-methods/valid-async-asi.result.js new file mode 100644 index 00000000..263381c7 --- /dev/null +++ b/tests/fixtures/ecma-version/13/private-methods/valid-async-asi.result.js @@ -0,0 +1,615 @@ +export default { + "type": "Program", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 8, + "column": 1 + } + }, + "range": [ + 0, + 136 + ], + "body": [ + { + "type": "ClassDeclaration", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 8, + "column": 1 + } + }, + "range": [ + 0, + 136 + ], + "id": { + "type": "Identifier", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "range": [ + 6, + 7 + ], + "name": "C" + }, + "superClass": null, + "body": { + "type": "ClassBody", + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 8, + "column": 1 + } + }, + "range": [ + 8, + 136 + ], + "body": [ + { + "type": "PropertyDefinition", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 3, + "column": 9 + } + }, + "range": [ + 75, + 80 + ], + "static": false, + "computed": false, + "key": { + "type": "Identifier", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 3, + "column": 9 + } + }, + "range": [ + 75, + 80 + ], + "name": "async" + }, + "value": null + }, + { + "type": "MethodDefinition", + "loc": { + "start": { + "line": 4, + "column": 4 + }, + "end": { + "line": 4, + "column": 16 + } + }, + "range": [ + 85, + 97 + ], + "static": false, + "computed": false, + "key": { + "type": "PrivateIdentifier", + "loc": { + "start": { + "line": 4, + "column": 4 + }, + "end": { + "line": 4, + "column": 11 + } + }, + "range": [ + 85, + 92 + ], + "name": "method" + }, + "kind": "method", + "value": { + "type": "FunctionExpression", + "loc": { + "start": { + "line": 4, + "column": 11 + }, + "end": { + "line": 4, + "column": 16 + } + }, + "range": [ + 92, + 97 + ], + "id": null, + "expression": false, + "generator": false, + "async": false, + "params": [], + "body": { + "type": "BlockStatement", + "loc": { + "start": { + "line": 4, + "column": 14 + }, + "end": { + "line": 4, + "column": 16 + } + }, + "range": [ + 95, + 97 + ], + "body": [] + } + } + }, + { + "type": "PropertyDefinition", + "loc": { + "start": { + "line": 6, + "column": 4 + }, + "end": { + "line": 6, + "column": 9 + } + }, + "range": [ + 107, + 112 + ], + "static": false, + "computed": false, + "key": { + "type": "Identifier", + "loc": { + "start": { + "line": 6, + "column": 4 + }, + "end": { + "line": 6, + "column": 9 + } + }, + "range": [ + 107, + 112 + ], + "name": "async" + }, + "value": null + }, + { + "type": "MethodDefinition", + "loc": { + "start": { + "line": 7, + "column": 4 + }, + "end": { + "line": 7, + "column": 21 + } + }, + "range": [ + 117, + 134 + ], + "static": false, + "computed": false, + "key": { + "type": "PrivateIdentifier", + "loc": { + "start": { + "line": 7, + "column": 6 + }, + "end": { + "line": 7, + "column": 16 + } + }, + "range": [ + 119, + 129 + ], + "name": "generator" + }, + "kind": "method", + "value": { + "type": "FunctionExpression", + "loc": { + "start": { + "line": 7, + "column": 16 + }, + "end": { + "line": 7, + "column": 21 + } + }, + "range": [ + 129, + 134 + ], + "id": null, + "expression": false, + "generator": true, + "async": false, + "params": [], + "body": { + "type": "BlockStatement", + "loc": { + "start": { + "line": 7, + "column": 19 + }, + "end": { + "line": 7, + "column": 21 + } + }, + "range": [ + 132, + 134 + ], + "body": [] + } + } + } + ] + } + } + ], + "sourceType": "script", + "tokens": [ + { + "type": "Keyword", + "value": "class", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 5 + } + }, + "range": [ + 0, + 5 + ] + }, + { + "type": "Identifier", + "value": "C", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "range": [ + 6, + 7 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 9 + } + }, + "range": [ + 8, + 9 + ] + }, + { + "type": "Identifier", + "value": "async", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 3, + "column": 9 + } + }, + "range": [ + 75, + 80 + ] + }, + { + "type": "PrivateIdentifier", + "value": "method", + "loc": { + "start": { + "line": 4, + "column": 4 + }, + "end": { + "line": 4, + "column": 11 + } + }, + "range": [ + 85, + 92 + ] + }, + { + "type": "Punctuator", + "value": "(", + "loc": { + "start": { + "line": 4, + "column": 11 + }, + "end": { + "line": 4, + "column": 12 + } + }, + "range": [ + 92, + 93 + ] + }, + { + "type": "Punctuator", + "value": ")", + "loc": { + "start": { + "line": 4, + "column": 12 + }, + "end": { + "line": 4, + "column": 13 + } + }, + "range": [ + 93, + 94 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 4, + "column": 14 + }, + "end": { + "line": 4, + "column": 15 + } + }, + "range": [ + 95, + 96 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 4, + "column": 15 + }, + "end": { + "line": 4, + "column": 16 + } + }, + "range": [ + 96, + 97 + ] + }, + { + "type": "Identifier", + "value": "async", + "loc": { + "start": { + "line": 6, + "column": 4 + }, + "end": { + "line": 6, + "column": 9 + } + }, + "range": [ + 107, + 112 + ] + }, + { + "type": "Punctuator", + "value": "*", + "loc": { + "start": { + "line": 7, + "column": 4 + }, + "end": { + "line": 7, + "column": 5 + } + }, + "range": [ + 117, + 118 + ] + }, + { + "type": "PrivateIdentifier", + "value": "generator", + "loc": { + "start": { + "line": 7, + "column": 6 + }, + "end": { + "line": 7, + "column": 16 + } + }, + "range": [ + 119, + 129 + ] + }, + { + "type": "Punctuator", + "value": "(", + "loc": { + "start": { + "line": 7, + "column": 16 + }, + "end": { + "line": 7, + "column": 17 + } + }, + "range": [ + 129, + 130 + ] + }, + { + "type": "Punctuator", + "value": ")", + "loc": { + "start": { + "line": 7, + "column": 17 + }, + "end": { + "line": 7, + "column": 18 + } + }, + "range": [ + 130, + 131 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 7, + "column": 19 + }, + "end": { + "line": 7, + "column": 20 + } + }, + "range": [ + 132, + 133 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 7, + "column": 20 + }, + "end": { + "line": 7, + "column": 21 + } + }, + "range": [ + 133, + 134 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 8, + "column": 0 + }, + "end": { + "line": 8, + "column": 1 + } + }, + "range": [ + 135, + 136 + ] + } + ] +}; \ No newline at end of file diff --git a/tests/fixtures/ecma-version/13/private-methods/valid-async-asi.src.js b/tests/fixtures/ecma-version/13/private-methods/valid-async-asi.src.js new file mode 100644 index 00000000..9db6c94b --- /dev/null +++ b/tests/fixtures/ecma-version/13/private-methods/valid-async-asi.src.js @@ -0,0 +1,8 @@ +class C { + // Line breaks preceded by `async` create fields by ASI. + async + #method() {} + + async + * #generator() {} +} diff --git a/tests/fixtures/ecma-version/13/private-methods/valid-contextual-keywords-no-asi.result.js b/tests/fixtures/ecma-version/13/private-methods/valid-contextual-keywords-no-asi.result.js new file mode 100644 index 00000000..2e6fdcee --- /dev/null +++ b/tests/fixtures/ecma-version/13/private-methods/valid-contextual-keywords-no-asi.result.js @@ -0,0 +1,762 @@ +export default { + "type": "Program", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 11, + "column": 1 + } + }, + "range": [ + 0, + 142 + ], + "body": [ + { + "type": "ClassDeclaration", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 11, + "column": 1 + } + }, + "range": [ + 0, + 142 + ], + "id": { + "type": "Identifier", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "range": [ + 6, + 7 + ], + "name": "C" + }, + "superClass": null, + "body": { + "type": "ClassBody", + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 11, + "column": 1 + } + }, + "range": [ + 8, + 142 + ], + "body": [ + { + "type": "MethodDefinition", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 4, + "column": 15 + } + }, + "range": [ + 59, + 78 + ], + "static": false, + "computed": false, + "key": { + "type": "PrivateIdentifier", + "loc": { + "start": { + "line": 4, + "column": 4 + }, + "end": { + "line": 4, + "column": 11 + } + }, + "range": [ + 67, + 74 + ], + "name": "getter" + }, + "kind": "get", + "value": { + "type": "FunctionExpression", + "loc": { + "start": { + "line": 4, + "column": 11 + }, + "end": { + "line": 4, + "column": 15 + } + }, + "range": [ + 74, + 78 + ], + "id": null, + "expression": false, + "generator": false, + "async": false, + "params": [], + "body": { + "type": "BlockStatement", + "loc": { + "start": { + "line": 4, + "column": 13 + }, + "end": { + "line": 4, + "column": 15 + } + }, + "range": [ + 76, + 78 + ], + "body": [] + } + } + }, + { + "type": "MethodDefinition", + "loc": { + "start": { + "line": 6, + "column": 4 + }, + "end": { + "line": 7, + "column": 16 + } + }, + "range": [ + 84, + 104 + ], + "static": false, + "computed": false, + "key": { + "type": "PrivateIdentifier", + "loc": { + "start": { + "line": 7, + "column": 4 + }, + "end": { + "line": 7, + "column": 11 + } + }, + "range": [ + 92, + 99 + ], + "name": "setter" + }, + "kind": "set", + "value": { + "type": "FunctionExpression", + "loc": { + "start": { + "line": 7, + "column": 11 + }, + "end": { + "line": 7, + "column": 16 + } + }, + "range": [ + 99, + 104 + ], + "id": null, + "expression": false, + "generator": false, + "async": false, + "params": [ + { + "type": "Identifier", + "loc": { + "start": { + "line": 7, + "column": 12 + }, + "end": { + "line": 7, + "column": 13 + } + }, + "range": [ + 100, + 101 + ], + "name": "x" + } + ], + "body": { + "type": "BlockStatement", + "loc": { + "start": { + "line": 7, + "column": 14 + }, + "end": { + "line": 7, + "column": 16 + } + }, + "range": [ + 102, + 104 + ], + "body": [] + } + } + }, + { + "type": "MethodDefinition", + "loc": { + "start": { + "line": 9, + "column": 4 + }, + "end": { + "line": 10, + "column": 23 + } + }, + "range": [ + 110, + 140 + ], + "static": false, + "computed": false, + "key": { + "type": "PrivateIdentifier", + "loc": { + "start": { + "line": 10, + "column": 4 + }, + "end": { + "line": 10, + "column": 19 + } + }, + "range": [ + 121, + 136 + ], + "name": "asyncGenerator" + }, + "kind": "method", + "value": { + "type": "FunctionExpression", + "loc": { + "start": { + "line": 10, + "column": 19 + }, + "end": { + "line": 10, + "column": 23 + } + }, + "range": [ + 136, + 140 + ], + "id": null, + "expression": false, + "generator": true, + "async": true, + "params": [], + "body": { + "type": "BlockStatement", + "loc": { + "start": { + "line": 10, + "column": 21 + }, + "end": { + "line": 10, + "column": 23 + } + }, + "range": [ + 138, + 140 + ], + "body": [] + } + } + } + ] + } + } + ], + "sourceType": "script", + "tokens": [ + { + "type": "Keyword", + "value": "class", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 5 + } + }, + "range": [ + 0, + 5 + ] + }, + { + "type": "Identifier", + "value": "C", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "range": [ + 6, + 7 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 9 + } + }, + "range": [ + 8, + 9 + ] + }, + { + "type": "Identifier", + "value": "get", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 3, + "column": 7 + } + }, + "range": [ + 59, + 62 + ] + }, + { + "type": "PrivateIdentifier", + "value": "getter", + "loc": { + "start": { + "line": 4, + "column": 4 + }, + "end": { + "line": 4, + "column": 11 + } + }, + "range": [ + 67, + 74 + ] + }, + { + "type": "Punctuator", + "value": "(", + "loc": { + "start": { + "line": 4, + "column": 11 + }, + "end": { + "line": 4, + "column": 12 + } + }, + "range": [ + 74, + 75 + ] + }, + { + "type": "Punctuator", + "value": ")", + "loc": { + "start": { + "line": 4, + "column": 12 + }, + "end": { + "line": 4, + "column": 13 + } + }, + "range": [ + 75, + 76 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 4, + "column": 13 + }, + "end": { + "line": 4, + "column": 14 + } + }, + "range": [ + 76, + 77 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 4, + "column": 14 + }, + "end": { + "line": 4, + "column": 15 + } + }, + "range": [ + 77, + 78 + ] + }, + { + "type": "Identifier", + "value": "set", + "loc": { + "start": { + "line": 6, + "column": 4 + }, + "end": { + "line": 6, + "column": 7 + } + }, + "range": [ + 84, + 87 + ] + }, + { + "type": "PrivateIdentifier", + "value": "setter", + "loc": { + "start": { + "line": 7, + "column": 4 + }, + "end": { + "line": 7, + "column": 11 + } + }, + "range": [ + 92, + 99 + ] + }, + { + "type": "Punctuator", + "value": "(", + "loc": { + "start": { + "line": 7, + "column": 11 + }, + "end": { + "line": 7, + "column": 12 + } + }, + "range": [ + 99, + 100 + ] + }, + { + "type": "Identifier", + "value": "x", + "loc": { + "start": { + "line": 7, + "column": 12 + }, + "end": { + "line": 7, + "column": 13 + } + }, + "range": [ + 100, + 101 + ] + }, + { + "type": "Punctuator", + "value": ")", + "loc": { + "start": { + "line": 7, + "column": 13 + }, + "end": { + "line": 7, + "column": 14 + } + }, + "range": [ + 101, + 102 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 7, + "column": 14 + }, + "end": { + "line": 7, + "column": 15 + } + }, + "range": [ + 102, + 103 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 7, + "column": 15 + }, + "end": { + "line": 7, + "column": 16 + } + }, + "range": [ + 103, + 104 + ] + }, + { + "type": "Identifier", + "value": "async", + "loc": { + "start": { + "line": 9, + "column": 4 + }, + "end": { + "line": 9, + "column": 9 + } + }, + "range": [ + 110, + 115 + ] + }, + { + "type": "Punctuator", + "value": "*", + "loc": { + "start": { + "line": 9, + "column": 9 + }, + "end": { + "line": 9, + "column": 10 + } + }, + "range": [ + 115, + 116 + ] + }, + { + "type": "PrivateIdentifier", + "value": "asyncGenerator", + "loc": { + "start": { + "line": 10, + "column": 4 + }, + "end": { + "line": 10, + "column": 19 + } + }, + "range": [ + 121, + 136 + ] + }, + { + "type": "Punctuator", + "value": "(", + "loc": { + "start": { + "line": 10, + "column": 19 + }, + "end": { + "line": 10, + "column": 20 + } + }, + "range": [ + 136, + 137 + ] + }, + { + "type": "Punctuator", + "value": ")", + "loc": { + "start": { + "line": 10, + "column": 20 + }, + "end": { + "line": 10, + "column": 21 + } + }, + "range": [ + 137, + 138 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 10, + "column": 21 + }, + "end": { + "line": 10, + "column": 22 + } + }, + "range": [ + 138, + 139 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 10, + "column": 22 + }, + "end": { + "line": 10, + "column": 23 + } + }, + "range": [ + 139, + 140 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 11, + "column": 0 + }, + "end": { + "line": 11, + "column": 1 + } + }, + "range": [ + 141, + 142 + ] + } + ] +}; \ No newline at end of file diff --git a/tests/fixtures/ecma-version/13/private-methods/valid-contextual-keywords-no-asi.src.js b/tests/fixtures/ecma-version/13/private-methods/valid-contextual-keywords-no-asi.src.js new file mode 100644 index 00000000..bf8227b1 --- /dev/null +++ b/tests/fixtures/ecma-version/13/private-methods/valid-contextual-keywords-no-asi.src.js @@ -0,0 +1,11 @@ +class C { + // Line breaks don't make fields by ASI. + get + #getter(){} + + set + #setter(x){} + + async* + #asyncGenerator(){} +} diff --git a/tests/fixtures/ecma-version/13/private-methods/valid-methods.result.js b/tests/fixtures/ecma-version/13/private-methods/valid-methods.result.js new file mode 100644 index 00000000..ae5afd90 --- /dev/null +++ b/tests/fixtures/ecma-version/13/private-methods/valid-methods.result.js @@ -0,0 +1,893 @@ +export default { + "type": "Program", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 6, + "column": 1 + } + }, + "range": [ + 0, + 104 + ], + "body": [ + { + "type": "ClassDeclaration", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 6, + "column": 1 + } + }, + "range": [ + 0, + 104 + ], + "id": { + "type": "Identifier", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "range": [ + 6, + 7 + ], + "name": "C" + }, + "superClass": null, + "body": { + "type": "ClassBody", + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 6, + "column": 1 + } + }, + "range": [ + 8, + 104 + ], + "body": [ + { + "type": "MethodDefinition", + "loc": { + "start": { + "line": 2, + "column": 4 + }, + "end": { + "line": 2, + "column": 16 + } + }, + "range": [ + 14, + 26 + ], + "static": false, + "computed": false, + "key": { + "type": "PrivateIdentifier", + "loc": { + "start": { + "line": 2, + "column": 4 + }, + "end": { + "line": 2, + "column": 11 + } + }, + "range": [ + 14, + 21 + ], + "name": "normal" + }, + "kind": "method", + "value": { + "type": "FunctionExpression", + "loc": { + "start": { + "line": 2, + "column": 11 + }, + "end": { + "line": 2, + "column": 16 + } + }, + "range": [ + 21, + 26 + ], + "id": null, + "expression": false, + "generator": false, + "async": false, + "params": [], + "body": { + "type": "BlockStatement", + "loc": { + "start": { + "line": 2, + "column": 14 + }, + "end": { + "line": 2, + "column": 16 + } + }, + "range": [ + 24, + 26 + ], + "body": [] + } + } + }, + { + "type": "MethodDefinition", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 3, + "column": 21 + } + }, + "range": [ + 31, + 48 + ], + "static": false, + "computed": false, + "key": { + "type": "PrivateIdentifier", + "loc": { + "start": { + "line": 3, + "column": 10 + }, + "end": { + "line": 3, + "column": 16 + } + }, + "range": [ + 37, + 43 + ], + "name": "async" + }, + "kind": "method", + "value": { + "type": "FunctionExpression", + "loc": { + "start": { + "line": 3, + "column": 16 + }, + "end": { + "line": 3, + "column": 21 + } + }, + "range": [ + 43, + 48 + ], + "id": null, + "expression": false, + "generator": false, + "async": true, + "params": [], + "body": { + "type": "BlockStatement", + "loc": { + "start": { + "line": 3, + "column": 19 + }, + "end": { + "line": 3, + "column": 21 + } + }, + "range": [ + 46, + 48 + ], + "body": [] + } + } + }, + { + "type": "MethodDefinition", + "loc": { + "start": { + "line": 4, + "column": 4 + }, + "end": { + "line": 4, + "column": 21 + } + }, + "range": [ + 53, + 70 + ], + "static": false, + "computed": false, + "key": { + "type": "PrivateIdentifier", + "loc": { + "start": { + "line": 4, + "column": 6 + }, + "end": { + "line": 4, + "column": 16 + } + }, + "range": [ + 55, + 65 + ], + "name": "generator" + }, + "kind": "method", + "value": { + "type": "FunctionExpression", + "loc": { + "start": { + "line": 4, + "column": 16 + }, + "end": { + "line": 4, + "column": 21 + } + }, + "range": [ + 65, + 70 + ], + "id": null, + "expression": false, + "generator": true, + "async": false, + "params": [], + "body": { + "type": "BlockStatement", + "loc": { + "start": { + "line": 4, + "column": 19 + }, + "end": { + "line": 4, + "column": 21 + } + }, + "range": [ + 68, + 70 + ], + "body": [] + } + } + }, + { + "type": "MethodDefinition", + "loc": { + "start": { + "line": 5, + "column": 4 + }, + "end": { + "line": 5, + "column": 31 + } + }, + "range": [ + 75, + 102 + ], + "static": false, + "computed": false, + "key": { + "type": "PrivateIdentifier", + "loc": { + "start": { + "line": 5, + "column": 11 + }, + "end": { + "line": 5, + "column": 26 + } + }, + "range": [ + 82, + 97 + ], + "name": "asyncGenerator" + }, + "kind": "method", + "value": { + "type": "FunctionExpression", + "loc": { + "start": { + "line": 5, + "column": 26 + }, + "end": { + "line": 5, + "column": 31 + } + }, + "range": [ + 97, + 102 + ], + "id": null, + "expression": false, + "generator": true, + "async": true, + "params": [], + "body": { + "type": "BlockStatement", + "loc": { + "start": { + "line": 5, + "column": 29 + }, + "end": { + "line": 5, + "column": 31 + } + }, + "range": [ + 100, + 102 + ], + "body": [] + } + } + } + ] + } + } + ], + "sourceType": "script", + "tokens": [ + { + "type": "Keyword", + "value": "class", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 5 + } + }, + "range": [ + 0, + 5 + ] + }, + { + "type": "Identifier", + "value": "C", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "range": [ + 6, + 7 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 9 + } + }, + "range": [ + 8, + 9 + ] + }, + { + "type": "PrivateIdentifier", + "value": "normal", + "loc": { + "start": { + "line": 2, + "column": 4 + }, + "end": { + "line": 2, + "column": 11 + } + }, + "range": [ + 14, + 21 + ] + }, + { + "type": "Punctuator", + "value": "(", + "loc": { + "start": { + "line": 2, + "column": 11 + }, + "end": { + "line": 2, + "column": 12 + } + }, + "range": [ + 21, + 22 + ] + }, + { + "type": "Punctuator", + "value": ")", + "loc": { + "start": { + "line": 2, + "column": 12 + }, + "end": { + "line": 2, + "column": 13 + } + }, + "range": [ + 22, + 23 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 2, + "column": 14 + }, + "end": { + "line": 2, + "column": 15 + } + }, + "range": [ + 24, + 25 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 2, + "column": 15 + }, + "end": { + "line": 2, + "column": 16 + } + }, + "range": [ + 25, + 26 + ] + }, + { + "type": "Identifier", + "value": "async", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 3, + "column": 9 + } + }, + "range": [ + 31, + 36 + ] + }, + { + "type": "PrivateIdentifier", + "value": "async", + "loc": { + "start": { + "line": 3, + "column": 10 + }, + "end": { + "line": 3, + "column": 16 + } + }, + "range": [ + 37, + 43 + ] + }, + { + "type": "Punctuator", + "value": "(", + "loc": { + "start": { + "line": 3, + "column": 16 + }, + "end": { + "line": 3, + "column": 17 + } + }, + "range": [ + 43, + 44 + ] + }, + { + "type": "Punctuator", + "value": ")", + "loc": { + "start": { + "line": 3, + "column": 17 + }, + "end": { + "line": 3, + "column": 18 + } + }, + "range": [ + 44, + 45 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 3, + "column": 19 + }, + "end": { + "line": 3, + "column": 20 + } + }, + "range": [ + 46, + 47 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 3, + "column": 20 + }, + "end": { + "line": 3, + "column": 21 + } + }, + "range": [ + 47, + 48 + ] + }, + { + "type": "Punctuator", + "value": "*", + "loc": { + "start": { + "line": 4, + "column": 4 + }, + "end": { + "line": 4, + "column": 5 + } + }, + "range": [ + 53, + 54 + ] + }, + { + "type": "PrivateIdentifier", + "value": "generator", + "loc": { + "start": { + "line": 4, + "column": 6 + }, + "end": { + "line": 4, + "column": 16 + } + }, + "range": [ + 55, + 65 + ] + }, + { + "type": "Punctuator", + "value": "(", + "loc": { + "start": { + "line": 4, + "column": 16 + }, + "end": { + "line": 4, + "column": 17 + } + }, + "range": [ + 65, + 66 + ] + }, + { + "type": "Punctuator", + "value": ")", + "loc": { + "start": { + "line": 4, + "column": 17 + }, + "end": { + "line": 4, + "column": 18 + } + }, + "range": [ + 66, + 67 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 4, + "column": 19 + }, + "end": { + "line": 4, + "column": 20 + } + }, + "range": [ + 68, + 69 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 4, + "column": 20 + }, + "end": { + "line": 4, + "column": 21 + } + }, + "range": [ + 69, + 70 + ] + }, + { + "type": "Identifier", + "value": "async", + "loc": { + "start": { + "line": 5, + "column": 4 + }, + "end": { + "line": 5, + "column": 9 + } + }, + "range": [ + 75, + 80 + ] + }, + { + "type": "Punctuator", + "value": "*", + "loc": { + "start": { + "line": 5, + "column": 9 + }, + "end": { + "line": 5, + "column": 10 + } + }, + "range": [ + 80, + 81 + ] + }, + { + "type": "PrivateIdentifier", + "value": "asyncGenerator", + "loc": { + "start": { + "line": 5, + "column": 11 + }, + "end": { + "line": 5, + "column": 26 + } + }, + "range": [ + 82, + 97 + ] + }, + { + "type": "Punctuator", + "value": "(", + "loc": { + "start": { + "line": 5, + "column": 26 + }, + "end": { + "line": 5, + "column": 27 + } + }, + "range": [ + 97, + 98 + ] + }, + { + "type": "Punctuator", + "value": ")", + "loc": { + "start": { + "line": 5, + "column": 27 + }, + "end": { + "line": 5, + "column": 28 + } + }, + "range": [ + 98, + 99 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 5, + "column": 29 + }, + "end": { + "line": 5, + "column": 30 + } + }, + "range": [ + 100, + 101 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 5, + "column": 30 + }, + "end": { + "line": 5, + "column": 31 + } + }, + "range": [ + 101, + 102 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 6, + "column": 0 + }, + "end": { + "line": 6, + "column": 1 + } + }, + "range": [ + 103, + 104 + ] + } + ] +}; \ No newline at end of file diff --git a/tests/fixtures/ecma-version/13/private-methods/valid-methods.src.js b/tests/fixtures/ecma-version/13/private-methods/valid-methods.src.js new file mode 100644 index 00000000..c1a99bca --- /dev/null +++ b/tests/fixtures/ecma-version/13/private-methods/valid-methods.src.js @@ -0,0 +1,6 @@ +class C { + #normal() {} + async #async() {} + * #generator() {} + async* #asyncGenerator() {} +} diff --git a/tests/fixtures/ecma-version/13/static-class-features/invalid-conflict-names.result.js b/tests/fixtures/ecma-version/13/static-class-features/invalid-conflict-names.result.js new file mode 100644 index 00000000..17688abc --- /dev/null +++ b/tests/fixtures/ecma-version/13/static-class-features/invalid-conflict-names.result.js @@ -0,0 +1,6 @@ +export default { + "index": 210, + "lineNumber": 5, + "column": 16, + "message": "Identifier '#a' has already been declared" +}; \ No newline at end of file diff --git a/tests/fixtures/ecma-version/13/static-class-features/invalid-conflict-names.src.js b/tests/fixtures/ecma-version/13/static-class-features/invalid-conflict-names.src.js new file mode 100644 index 00000000..d5a9090b --- /dev/null +++ b/tests/fixtures/ecma-version/13/static-class-features/invalid-conflict-names.src.js @@ -0,0 +1,6 @@ +class C { + // getter/setter pair conflicts if `static` attributes are different. + // (static members and instance members are on the same namespace about naming conflicts.) + get #a() {} + static set #a(x) {} +} diff --git a/tests/fixtures/ecma-version/13/static-class-features/invalid-private-field-constructor.result.js b/tests/fixtures/ecma-version/13/static-class-features/invalid-private-field-constructor.result.js new file mode 100644 index 00000000..5320beb0 --- /dev/null +++ b/tests/fixtures/ecma-version/13/static-class-features/invalid-private-field-constructor.result.js @@ -0,0 +1,6 @@ +export default { + "index": 21, + "lineNumber": 2, + "column": 12, + "message": "Classes can't have an element named '#constructor'" +}; \ No newline at end of file diff --git a/tests/fixtures/ecma-version/13/static-class-features/invalid-private-field-constructor.src.js b/tests/fixtures/ecma-version/13/static-class-features/invalid-private-field-constructor.src.js new file mode 100644 index 00000000..77132340 --- /dev/null +++ b/tests/fixtures/ecma-version/13/static-class-features/invalid-private-field-constructor.src.js @@ -0,0 +1,3 @@ +class C { + static #constructor = () => {} +} diff --git a/tests/fixtures/ecma-version/13/static-class-features/invalid-private-getter-constructor.result.js b/tests/fixtures/ecma-version/13/static-class-features/invalid-private-getter-constructor.result.js new file mode 100644 index 00000000..fcb083c2 --- /dev/null +++ b/tests/fixtures/ecma-version/13/static-class-features/invalid-private-getter-constructor.result.js @@ -0,0 +1,6 @@ +export default { + "index": 25, + "lineNumber": 2, + "column": 16, + "message": "Classes can't have an element named '#constructor'" +}; \ No newline at end of file diff --git a/tests/fixtures/ecma-version/13/static-class-features/invalid-private-getter-constructor.src.js b/tests/fixtures/ecma-version/13/static-class-features/invalid-private-getter-constructor.src.js new file mode 100644 index 00000000..7e89b4da --- /dev/null +++ b/tests/fixtures/ecma-version/13/static-class-features/invalid-private-getter-constructor.src.js @@ -0,0 +1,3 @@ +class C { + static get #constructor() {} +} diff --git a/tests/fixtures/ecma-version/13/static-class-features/invalid-private-method-constructor.result.js b/tests/fixtures/ecma-version/13/static-class-features/invalid-private-method-constructor.result.js new file mode 100644 index 00000000..5320beb0 --- /dev/null +++ b/tests/fixtures/ecma-version/13/static-class-features/invalid-private-method-constructor.result.js @@ -0,0 +1,6 @@ +export default { + "index": 21, + "lineNumber": 2, + "column": 12, + "message": "Classes can't have an element named '#constructor'" +}; \ No newline at end of file diff --git a/tests/fixtures/ecma-version/13/static-class-features/invalid-private-method-constructor.src.js b/tests/fixtures/ecma-version/13/static-class-features/invalid-private-method-constructor.src.js new file mode 100644 index 00000000..59124f3e --- /dev/null +++ b/tests/fixtures/ecma-version/13/static-class-features/invalid-private-method-constructor.src.js @@ -0,0 +1,3 @@ +class C { + static #constructor() {} +} diff --git a/tests/fixtures/ecma-version/13/static-class-features/invalid-private-setter-constructor.result.js b/tests/fixtures/ecma-version/13/static-class-features/invalid-private-setter-constructor.result.js new file mode 100644 index 00000000..fcb083c2 --- /dev/null +++ b/tests/fixtures/ecma-version/13/static-class-features/invalid-private-setter-constructor.result.js @@ -0,0 +1,6 @@ +export default { + "index": 25, + "lineNumber": 2, + "column": 16, + "message": "Classes can't have an element named '#constructor'" +}; \ No newline at end of file diff --git a/tests/fixtures/ecma-version/13/static-class-features/invalid-private-setter-constructor.src.js b/tests/fixtures/ecma-version/13/static-class-features/invalid-private-setter-constructor.src.js new file mode 100644 index 00000000..25d7a530 --- /dev/null +++ b/tests/fixtures/ecma-version/13/static-class-features/invalid-private-setter-constructor.src.js @@ -0,0 +1,3 @@ +class C { + static set #constructor(x) {} +} diff --git a/tests/fixtures/ecma-version/13/static-class-features/invalid-public-field-constructor.result.js b/tests/fixtures/ecma-version/13/static-class-features/invalid-public-field-constructor.result.js new file mode 100644 index 00000000..6f1ac47e --- /dev/null +++ b/tests/fixtures/ecma-version/13/static-class-features/invalid-public-field-constructor.result.js @@ -0,0 +1,6 @@ +export default { + "index": 21, + "lineNumber": 2, + "column": 12, + "message": "Classes can't have a field named 'constructor'" +}; \ No newline at end of file diff --git a/tests/fixtures/ecma-version/13/static-class-features/invalid-public-field-constructor.src.js b/tests/fixtures/ecma-version/13/static-class-features/invalid-public-field-constructor.src.js new file mode 100644 index 00000000..cbd8d3c9 --- /dev/null +++ b/tests/fixtures/ecma-version/13/static-class-features/invalid-public-field-constructor.src.js @@ -0,0 +1,3 @@ +class C { + static constructor = () => {} +} diff --git a/tests/fixtures/ecma-version/13/static-class-features/invalid-public-field-prototype.result.js b/tests/fixtures/ecma-version/13/static-class-features/invalid-public-field-prototype.result.js new file mode 100644 index 00000000..831bed4c --- /dev/null +++ b/tests/fixtures/ecma-version/13/static-class-features/invalid-public-field-prototype.result.js @@ -0,0 +1,6 @@ +export default { + "index": 21, + "lineNumber": 2, + "column": 12, + "message": "Classes can't have a static field named 'prototype'" +}; \ No newline at end of file diff --git a/tests/fixtures/ecma-version/13/static-class-features/invalid-public-field-prototype.src.js b/tests/fixtures/ecma-version/13/static-class-features/invalid-public-field-prototype.src.js new file mode 100644 index 00000000..53bbb5df --- /dev/null +++ b/tests/fixtures/ecma-version/13/static-class-features/invalid-public-field-prototype.src.js @@ -0,0 +1,3 @@ +class C { + static prototype = {} +} diff --git a/tests/fixtures/ecma-version/13/static-class-features/valid-async-asi.result.js b/tests/fixtures/ecma-version/13/static-class-features/valid-async-asi.result.js new file mode 100644 index 00000000..843841d4 --- /dev/null +++ b/tests/fixtures/ecma-version/13/static-class-features/valid-async-asi.result.js @@ -0,0 +1,1153 @@ +export default { + "type": "Program", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 18, + "column": 1 + } + }, + "range": [ + 0, + 247 + ], + "body": [ + { + "type": "ClassDeclaration", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 18, + "column": 1 + } + }, + "range": [ + 0, + 247 + ], + "id": { + "type": "Identifier", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "range": [ + 6, + 7 + ], + "name": "C" + }, + "superClass": null, + "body": { + "type": "ClassBody", + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 18, + "column": 1 + } + }, + "range": [ + 8, + 247 + ], + "body": [ + { + "type": "PropertyDefinition", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 4, + "column": 9 + } + }, + "range": [ + 75, + 91 + ], + "static": true, + "computed": false, + "key": { + "type": "Identifier", + "loc": { + "start": { + "line": 4, + "column": 4 + }, + "end": { + "line": 4, + "column": 9 + } + }, + "range": [ + 86, + 91 + ], + "name": "async" + }, + "value": null + }, + { + "type": "MethodDefinition", + "loc": { + "start": { + "line": 5, + "column": 4 + }, + "end": { + "line": 5, + "column": 16 + } + }, + "range": [ + 96, + 108 + ], + "static": false, + "computed": false, + "key": { + "type": "PrivateIdentifier", + "loc": { + "start": { + "line": 5, + "column": 4 + }, + "end": { + "line": 5, + "column": 11 + } + }, + "range": [ + 96, + 103 + ], + "name": "method" + }, + "kind": "method", + "value": { + "type": "FunctionExpression", + "loc": { + "start": { + "line": 5, + "column": 11 + }, + "end": { + "line": 5, + "column": 16 + } + }, + "range": [ + 103, + 108 + ], + "id": null, + "expression": false, + "generator": false, + "async": false, + "params": [], + "body": { + "type": "BlockStatement", + "loc": { + "start": { + "line": 5, + "column": 14 + }, + "end": { + "line": 5, + "column": 16 + } + }, + "range": [ + 106, + 108 + ], + "body": [] + } + } + }, + { + "type": "PropertyDefinition", + "loc": { + "start": { + "line": 7, + "column": 4 + }, + "end": { + "line": 8, + "column": 9 + } + }, + "range": [ + 118, + 134 + ], + "static": true, + "computed": false, + "key": { + "type": "Identifier", + "loc": { + "start": { + "line": 8, + "column": 4 + }, + "end": { + "line": 8, + "column": 9 + } + }, + "range": [ + 129, + 134 + ], + "name": "async" + }, + "value": null + }, + { + "type": "MethodDefinition", + "loc": { + "start": { + "line": 9, + "column": 4 + }, + "end": { + "line": 9, + "column": 21 + } + }, + "range": [ + 139, + 156 + ], + "static": false, + "computed": false, + "key": { + "type": "PrivateIdentifier", + "loc": { + "start": { + "line": 9, + "column": 6 + }, + "end": { + "line": 9, + "column": 16 + } + }, + "range": [ + 141, + 151 + ], + "name": "generator" + }, + "kind": "method", + "value": { + "type": "FunctionExpression", + "loc": { + "start": { + "line": 9, + "column": 16 + }, + "end": { + "line": 9, + "column": 21 + } + }, + "range": [ + 151, + 156 + ], + "id": null, + "expression": false, + "generator": true, + "async": false, + "params": [], + "body": { + "type": "BlockStatement", + "loc": { + "start": { + "line": 9, + "column": 19 + }, + "end": { + "line": 9, + "column": 21 + } + }, + "range": [ + 154, + 156 + ], + "body": [] + } + } + }, + { + "type": "PropertyDefinition", + "loc": { + "start": { + "line": 11, + "column": 4 + }, + "end": { + "line": 12, + "column": 9 + } + }, + "range": [ + 166, + 182 + ], + "static": true, + "computed": false, + "key": { + "type": "Identifier", + "loc": { + "start": { + "line": 12, + "column": 4 + }, + "end": { + "line": 12, + "column": 9 + } + }, + "range": [ + 177, + 182 + ], + "name": "async" + }, + "value": null + }, + { + "type": "MethodDefinition", + "loc": { + "start": { + "line": 13, + "column": 4 + }, + "end": { + "line": 13, + "column": 15 + } + }, + "range": [ + 187, + 198 + ], + "static": false, + "computed": false, + "key": { + "type": "Identifier", + "loc": { + "start": { + "line": 13, + "column": 4 + }, + "end": { + "line": 13, + "column": 10 + } + }, + "range": [ + 187, + 193 + ], + "name": "method" + }, + "kind": "method", + "value": { + "type": "FunctionExpression", + "loc": { + "start": { + "line": 13, + "column": 10 + }, + "end": { + "line": 13, + "column": 15 + } + }, + "range": [ + 193, + 198 + ], + "id": null, + "expression": false, + "generator": false, + "async": false, + "params": [], + "body": { + "type": "BlockStatement", + "loc": { + "start": { + "line": 13, + "column": 13 + }, + "end": { + "line": 13, + "column": 15 + } + }, + "range": [ + 196, + 198 + ], + "body": [] + } + } + }, + { + "type": "PropertyDefinition", + "loc": { + "start": { + "line": 15, + "column": 4 + }, + "end": { + "line": 16, + "column": 9 + } + }, + "range": [ + 208, + 224 + ], + "static": true, + "computed": false, + "key": { + "type": "Identifier", + "loc": { + "start": { + "line": 16, + "column": 4 + }, + "end": { + "line": 16, + "column": 9 + } + }, + "range": [ + 219, + 224 + ], + "name": "async" + }, + "value": null + }, + { + "type": "MethodDefinition", + "loc": { + "start": { + "line": 17, + "column": 4 + }, + "end": { + "line": 17, + "column": 20 + } + }, + "range": [ + 229, + 245 + ], + "static": false, + "computed": false, + "key": { + "type": "Identifier", + "loc": { + "start": { + "line": 17, + "column": 6 + }, + "end": { + "line": 17, + "column": 15 + } + }, + "range": [ + 231, + 240 + ], + "name": "generator" + }, + "kind": "method", + "value": { + "type": "FunctionExpression", + "loc": { + "start": { + "line": 17, + "column": 15 + }, + "end": { + "line": 17, + "column": 20 + } + }, + "range": [ + 240, + 245 + ], + "id": null, + "expression": false, + "generator": true, + "async": false, + "params": [], + "body": { + "type": "BlockStatement", + "loc": { + "start": { + "line": 17, + "column": 18 + }, + "end": { + "line": 17, + "column": 20 + } + }, + "range": [ + 243, + 245 + ], + "body": [] + } + } + } + ] + } + } + ], + "sourceType": "script", + "tokens": [ + { + "type": "Keyword", + "value": "class", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 5 + } + }, + "range": [ + 0, + 5 + ] + }, + { + "type": "Identifier", + "value": "C", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "range": [ + 6, + 7 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 9 + } + }, + "range": [ + 8, + 9 + ] + }, + { + "type": "Keyword", + "value": "static", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 3, + "column": 10 + } + }, + "range": [ + 75, + 81 + ] + }, + { + "type": "Identifier", + "value": "async", + "loc": { + "start": { + "line": 4, + "column": 4 + }, + "end": { + "line": 4, + "column": 9 + } + }, + "range": [ + 86, + 91 + ] + }, + { + "type": "PrivateIdentifier", + "value": "method", + "loc": { + "start": { + "line": 5, + "column": 4 + }, + "end": { + "line": 5, + "column": 11 + } + }, + "range": [ + 96, + 103 + ] + }, + { + "type": "Punctuator", + "value": "(", + "loc": { + "start": { + "line": 5, + "column": 11 + }, + "end": { + "line": 5, + "column": 12 + } + }, + "range": [ + 103, + 104 + ] + }, + { + "type": "Punctuator", + "value": ")", + "loc": { + "start": { + "line": 5, + "column": 12 + }, + "end": { + "line": 5, + "column": 13 + } + }, + "range": [ + 104, + 105 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 5, + "column": 14 + }, + "end": { + "line": 5, + "column": 15 + } + }, + "range": [ + 106, + 107 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 5, + "column": 15 + }, + "end": { + "line": 5, + "column": 16 + } + }, + "range": [ + 107, + 108 + ] + }, + { + "type": "Keyword", + "value": "static", + "loc": { + "start": { + "line": 7, + "column": 4 + }, + "end": { + "line": 7, + "column": 10 + } + }, + "range": [ + 118, + 124 + ] + }, + { + "type": "Identifier", + "value": "async", + "loc": { + "start": { + "line": 8, + "column": 4 + }, + "end": { + "line": 8, + "column": 9 + } + }, + "range": [ + 129, + 134 + ] + }, + { + "type": "Punctuator", + "value": "*", + "loc": { + "start": { + "line": 9, + "column": 4 + }, + "end": { + "line": 9, + "column": 5 + } + }, + "range": [ + 139, + 140 + ] + }, + { + "type": "PrivateIdentifier", + "value": "generator", + "loc": { + "start": { + "line": 9, + "column": 6 + }, + "end": { + "line": 9, + "column": 16 + } + }, + "range": [ + 141, + 151 + ] + }, + { + "type": "Punctuator", + "value": "(", + "loc": { + "start": { + "line": 9, + "column": 16 + }, + "end": { + "line": 9, + "column": 17 + } + }, + "range": [ + 151, + 152 + ] + }, + { + "type": "Punctuator", + "value": ")", + "loc": { + "start": { + "line": 9, + "column": 17 + }, + "end": { + "line": 9, + "column": 18 + } + }, + "range": [ + 152, + 153 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 9, + "column": 19 + }, + "end": { + "line": 9, + "column": 20 + } + }, + "range": [ + 154, + 155 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 9, + "column": 20 + }, + "end": { + "line": 9, + "column": 21 + } + }, + "range": [ + 155, + 156 + ] + }, + { + "type": "Keyword", + "value": "static", + "loc": { + "start": { + "line": 11, + "column": 4 + }, + "end": { + "line": 11, + "column": 10 + } + }, + "range": [ + 166, + 172 + ] + }, + { + "type": "Identifier", + "value": "async", + "loc": { + "start": { + "line": 12, + "column": 4 + }, + "end": { + "line": 12, + "column": 9 + } + }, + "range": [ + 177, + 182 + ] + }, + { + "type": "Identifier", + "value": "method", + "loc": { + "start": { + "line": 13, + "column": 4 + }, + "end": { + "line": 13, + "column": 10 + } + }, + "range": [ + 187, + 193 + ] + }, + { + "type": "Punctuator", + "value": "(", + "loc": { + "start": { + "line": 13, + "column": 10 + }, + "end": { + "line": 13, + "column": 11 + } + }, + "range": [ + 193, + 194 + ] + }, + { + "type": "Punctuator", + "value": ")", + "loc": { + "start": { + "line": 13, + "column": 11 + }, + "end": { + "line": 13, + "column": 12 + } + }, + "range": [ + 194, + 195 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 13, + "column": 13 + }, + "end": { + "line": 13, + "column": 14 + } + }, + "range": [ + 196, + 197 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 13, + "column": 14 + }, + "end": { + "line": 13, + "column": 15 + } + }, + "range": [ + 197, + 198 + ] + }, + { + "type": "Keyword", + "value": "static", + "loc": { + "start": { + "line": 15, + "column": 4 + }, + "end": { + "line": 15, + "column": 10 + } + }, + "range": [ + 208, + 214 + ] + }, + { + "type": "Identifier", + "value": "async", + "loc": { + "start": { + "line": 16, + "column": 4 + }, + "end": { + "line": 16, + "column": 9 + } + }, + "range": [ + 219, + 224 + ] + }, + { + "type": "Punctuator", + "value": "*", + "loc": { + "start": { + "line": 17, + "column": 4 + }, + "end": { + "line": 17, + "column": 5 + } + }, + "range": [ + 229, + 230 + ] + }, + { + "type": "Identifier", + "value": "generator", + "loc": { + "start": { + "line": 17, + "column": 6 + }, + "end": { + "line": 17, + "column": 15 + } + }, + "range": [ + 231, + 240 + ] + }, + { + "type": "Punctuator", + "value": "(", + "loc": { + "start": { + "line": 17, + "column": 15 + }, + "end": { + "line": 17, + "column": 16 + } + }, + "range": [ + 240, + 241 + ] + }, + { + "type": "Punctuator", + "value": ")", + "loc": { + "start": { + "line": 17, + "column": 16 + }, + "end": { + "line": 17, + "column": 17 + } + }, + "range": [ + 241, + 242 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 17, + "column": 18 + }, + "end": { + "line": 17, + "column": 19 + } + }, + "range": [ + 243, + 244 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 17, + "column": 19 + }, + "end": { + "line": 17, + "column": 20 + } + }, + "range": [ + 244, + 245 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 18, + "column": 0 + }, + "end": { + "line": 18, + "column": 1 + } + }, + "range": [ + 246, + 247 + ] + } + ] +}; \ No newline at end of file diff --git a/tests/fixtures/ecma-version/13/static-class-features/valid-async-asi.src.js b/tests/fixtures/ecma-version/13/static-class-features/valid-async-asi.src.js new file mode 100644 index 00000000..b1f91eed --- /dev/null +++ b/tests/fixtures/ecma-version/13/static-class-features/valid-async-asi.src.js @@ -0,0 +1,18 @@ +class C { + // Line breaks preceded by `async` create fields by ASI. + static + async + #method() {} + + static + async + * #generator() {} + + static + async + method() {} + + static + async + * generator() {} +} diff --git a/tests/fixtures/ecma-version/13/static-class-features/valid-contextual-keywords-no-asi.result.js b/tests/fixtures/ecma-version/13/static-class-features/valid-contextual-keywords-no-asi.result.js new file mode 100644 index 00000000..874bf3d2 --- /dev/null +++ b/tests/fixtures/ecma-version/13/static-class-features/valid-contextual-keywords-no-asi.result.js @@ -0,0 +1,1819 @@ +export default { + "type": "Program", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 30, + "column": 1 + } + }, + "range": [ + 0, + 351 + ], + "body": [ + { + "type": "ClassDeclaration", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 30, + "column": 1 + } + }, + "range": [ + 0, + 351 + ], + "id": { + "type": "Identifier", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "range": [ + 6, + 7 + ], + "name": "C" + }, + "superClass": null, + "body": { + "type": "ClassBody", + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 30, + "column": 1 + } + }, + "range": [ + 8, + 351 + ], + "body": [ + { + "type": "MethodDefinition", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 4, + "column": 11 + } + }, + "range": [ + 59, + 77 + ], + "static": true, + "computed": false, + "key": { + "type": "Identifier", + "loc": { + "start": { + "line": 4, + "column": 4 + }, + "end": { + "line": 4, + "column": 7 + } + }, + "range": [ + 70, + 73 + ], + "name": "get" + }, + "kind": "method", + "value": { + "type": "FunctionExpression", + "loc": { + "start": { + "line": 4, + "column": 7 + }, + "end": { + "line": 4, + "column": 11 + } + }, + "range": [ + 73, + 77 + ], + "id": null, + "expression": false, + "generator": false, + "async": false, + "params": [], + "body": { + "type": "BlockStatement", + "loc": { + "start": { + "line": 4, + "column": 9 + }, + "end": { + "line": 4, + "column": 11 + } + }, + "range": [ + 75, + 77 + ], + "body": [] + } + } + }, + { + "type": "MethodDefinition", + "loc": { + "start": { + "line": 6, + "column": 4 + }, + "end": { + "line": 7, + "column": 12 + } + }, + "range": [ + 83, + 102 + ], + "static": true, + "computed": false, + "key": { + "type": "Identifier", + "loc": { + "start": { + "line": 7, + "column": 4 + }, + "end": { + "line": 7, + "column": 7 + } + }, + "range": [ + 94, + 97 + ], + "name": "set" + }, + "kind": "method", + "value": { + "type": "FunctionExpression", + "loc": { + "start": { + "line": 7, + "column": 7 + }, + "end": { + "line": 7, + "column": 12 + } + }, + "range": [ + 97, + 102 + ], + "id": null, + "expression": false, + "generator": false, + "async": false, + "params": [ + { + "type": "Identifier", + "loc": { + "start": { + "line": 7, + "column": 8 + }, + "end": { + "line": 7, + "column": 9 + } + }, + "range": [ + 98, + 99 + ], + "name": "x" + } + ], + "body": { + "type": "BlockStatement", + "loc": { + "start": { + "line": 7, + "column": 10 + }, + "end": { + "line": 7, + "column": 12 + } + }, + "range": [ + 100, + 102 + ], + "body": [] + } + } + }, + { + "type": "MethodDefinition", + "loc": { + "start": { + "line": 9, + "column": 4 + }, + "end": { + "line": 10, + "column": 13 + } + }, + "range": [ + 108, + 128 + ], + "static": true, + "computed": false, + "key": { + "type": "Identifier", + "loc": { + "start": { + "line": 10, + "column": 4 + }, + "end": { + "line": 10, + "column": 9 + } + }, + "range": [ + 119, + 124 + ], + "name": "async" + }, + "kind": "method", + "value": { + "type": "FunctionExpression", + "loc": { + "start": { + "line": 10, + "column": 9 + }, + "end": { + "line": 10, + "column": 13 + } + }, + "range": [ + 124, + 128 + ], + "id": null, + "expression": false, + "generator": false, + "async": false, + "params": [], + "body": { + "type": "BlockStatement", + "loc": { + "start": { + "line": 10, + "column": 11 + }, + "end": { + "line": 10, + "column": 13 + } + }, + "range": [ + 126, + 128 + ], + "body": [] + } + } + }, + { + "type": "MethodDefinition", + "loc": { + "start": { + "line": 12, + "column": 4 + }, + "end": { + "line": 14, + "column": 20 + } + }, + "range": [ + 134, + 169 + ], + "static": true, + "computed": false, + "key": { + "type": "Identifier", + "loc": { + "start": { + "line": 14, + "column": 4 + }, + "end": { + "line": 14, + "column": 16 + } + }, + "range": [ + 153, + 165 + ], + "name": "staticGetter" + }, + "kind": "get", + "value": { + "type": "FunctionExpression", + "loc": { + "start": { + "line": 14, + "column": 16 + }, + "end": { + "line": 14, + "column": 20 + } + }, + "range": [ + 165, + 169 + ], + "id": null, + "expression": false, + "generator": false, + "async": false, + "params": [], + "body": { + "type": "BlockStatement", + "loc": { + "start": { + "line": 14, + "column": 18 + }, + "end": { + "line": 14, + "column": 20 + } + }, + "range": [ + 167, + 169 + ], + "body": [] + } + } + }, + { + "type": "MethodDefinition", + "loc": { + "start": { + "line": 16, + "column": 4 + }, + "end": { + "line": 18, + "column": 21 + } + }, + "range": [ + 175, + 211 + ], + "static": true, + "computed": false, + "key": { + "type": "Identifier", + "loc": { + "start": { + "line": 18, + "column": 4 + }, + "end": { + "line": 18, + "column": 16 + } + }, + "range": [ + 194, + 206 + ], + "name": "staticGetter" + }, + "kind": "set", + "value": { + "type": "FunctionExpression", + "loc": { + "start": { + "line": 18, + "column": 16 + }, + "end": { + "line": 18, + "column": 21 + } + }, + "range": [ + 206, + 211 + ], + "id": null, + "expression": false, + "generator": false, + "async": false, + "params": [ + { + "type": "Identifier", + "loc": { + "start": { + "line": 18, + "column": 17 + }, + "end": { + "line": 18, + "column": 18 + } + }, + "range": [ + 207, + 208 + ], + "name": "x" + } + ], + "body": { + "type": "BlockStatement", + "loc": { + "start": { + "line": 18, + "column": 19 + }, + "end": { + "line": 18, + "column": 21 + } + }, + "range": [ + 209, + 211 + ], + "body": [] + } + } + }, + { + "type": "MethodDefinition", + "loc": { + "start": { + "line": 20, + "column": 4 + }, + "end": { + "line": 22, + "column": 23 + } + }, + "range": [ + 217, + 253 + ], + "static": true, + "computed": false, + "key": { + "type": "Identifier", + "loc": { + "start": { + "line": 22, + "column": 4 + }, + "end": { + "line": 22, + "column": 19 + } + }, + "range": [ + 234, + 249 + ], + "name": "staticGenerator" + }, + "kind": "method", + "value": { + "type": "FunctionExpression", + "loc": { + "start": { + "line": 22, + "column": 19 + }, + "end": { + "line": 22, + "column": 23 + } + }, + "range": [ + 249, + 253 + ], + "id": null, + "expression": false, + "generator": true, + "async": false, + "params": [], + "body": { + "type": "BlockStatement", + "loc": { + "start": { + "line": 22, + "column": 21 + }, + "end": { + "line": 22, + "column": 23 + } + }, + "range": [ + 251, + 253 + ], + "body": [] + } + } + }, + { + "type": "MethodDefinition", + "loc": { + "start": { + "line": 24, + "column": 4 + }, + "end": { + "line": 25, + "column": 31 + } + }, + "range": [ + 259, + 297 + ], + "static": true, + "computed": false, + "key": { + "type": "Identifier", + "loc": { + "start": { + "line": 25, + "column": 10 + }, + "end": { + "line": 25, + "column": 27 + } + }, + "range": [ + 276, + 293 + ], + "name": "staticAsyncMethod" + }, + "kind": "method", + "value": { + "type": "FunctionExpression", + "loc": { + "start": { + "line": 25, + "column": 27 + }, + "end": { + "line": 25, + "column": 31 + } + }, + "range": [ + 293, + 297 + ], + "id": null, + "expression": false, + "generator": false, + "async": true, + "params": [], + "body": { + "type": "BlockStatement", + "loc": { + "start": { + "line": 25, + "column": 29 + }, + "end": { + "line": 25, + "column": 31 + } + }, + "range": [ + 295, + 297 + ], + "body": [] + } + } + }, + { + "type": "MethodDefinition", + "loc": { + "start": { + "line": 27, + "column": 4 + }, + "end": { + "line": 29, + "column": 28 + } + }, + "range": [ + 303, + 349 + ], + "static": true, + "computed": false, + "key": { + "type": "Identifier", + "loc": { + "start": { + "line": 29, + "column": 4 + }, + "end": { + "line": 29, + "column": 24 + } + }, + "range": [ + 325, + 345 + ], + "name": "staticAsyncGenerator" + }, + "kind": "method", + "value": { + "type": "FunctionExpression", + "loc": { + "start": { + "line": 29, + "column": 24 + }, + "end": { + "line": 29, + "column": 28 + } + }, + "range": [ + 345, + 349 + ], + "id": null, + "expression": false, + "generator": true, + "async": true, + "params": [], + "body": { + "type": "BlockStatement", + "loc": { + "start": { + "line": 29, + "column": 26 + }, + "end": { + "line": 29, + "column": 28 + } + }, + "range": [ + 347, + 349 + ], + "body": [] + } + } + } + ] + } + } + ], + "sourceType": "script", + "tokens": [ + { + "type": "Keyword", + "value": "class", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 5 + } + }, + "range": [ + 0, + 5 + ] + }, + { + "type": "Identifier", + "value": "C", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "range": [ + 6, + 7 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 9 + } + }, + "range": [ + 8, + 9 + ] + }, + { + "type": "Keyword", + "value": "static", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 3, + "column": 10 + } + }, + "range": [ + 59, + 65 + ] + }, + { + "type": "Identifier", + "value": "get", + "loc": { + "start": { + "line": 4, + "column": 4 + }, + "end": { + "line": 4, + "column": 7 + } + }, + "range": [ + 70, + 73 + ] + }, + { + "type": "Punctuator", + "value": "(", + "loc": { + "start": { + "line": 4, + "column": 7 + }, + "end": { + "line": 4, + "column": 8 + } + }, + "range": [ + 73, + 74 + ] + }, + { + "type": "Punctuator", + "value": ")", + "loc": { + "start": { + "line": 4, + "column": 8 + }, + "end": { + "line": 4, + "column": 9 + } + }, + "range": [ + 74, + 75 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 4, + "column": 9 + }, + "end": { + "line": 4, + "column": 10 + } + }, + "range": [ + 75, + 76 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 4, + "column": 10 + }, + "end": { + "line": 4, + "column": 11 + } + }, + "range": [ + 76, + 77 + ] + }, + { + "type": "Keyword", + "value": "static", + "loc": { + "start": { + "line": 6, + "column": 4 + }, + "end": { + "line": 6, + "column": 10 + } + }, + "range": [ + 83, + 89 + ] + }, + { + "type": "Identifier", + "value": "set", + "loc": { + "start": { + "line": 7, + "column": 4 + }, + "end": { + "line": 7, + "column": 7 + } + }, + "range": [ + 94, + 97 + ] + }, + { + "type": "Punctuator", + "value": "(", + "loc": { + "start": { + "line": 7, + "column": 7 + }, + "end": { + "line": 7, + "column": 8 + } + }, + "range": [ + 97, + 98 + ] + }, + { + "type": "Identifier", + "value": "x", + "loc": { + "start": { + "line": 7, + "column": 8 + }, + "end": { + "line": 7, + "column": 9 + } + }, + "range": [ + 98, + 99 + ] + }, + { + "type": "Punctuator", + "value": ")", + "loc": { + "start": { + "line": 7, + "column": 9 + }, + "end": { + "line": 7, + "column": 10 + } + }, + "range": [ + 99, + 100 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 7, + "column": 10 + }, + "end": { + "line": 7, + "column": 11 + } + }, + "range": [ + 100, + 101 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 7, + "column": 11 + }, + "end": { + "line": 7, + "column": 12 + } + }, + "range": [ + 101, + 102 + ] + }, + { + "type": "Keyword", + "value": "static", + "loc": { + "start": { + "line": 9, + "column": 4 + }, + "end": { + "line": 9, + "column": 10 + } + }, + "range": [ + 108, + 114 + ] + }, + { + "type": "Identifier", + "value": "async", + "loc": { + "start": { + "line": 10, + "column": 4 + }, + "end": { + "line": 10, + "column": 9 + } + }, + "range": [ + 119, + 124 + ] + }, + { + "type": "Punctuator", + "value": "(", + "loc": { + "start": { + "line": 10, + "column": 9 + }, + "end": { + "line": 10, + "column": 10 + } + }, + "range": [ + 124, + 125 + ] + }, + { + "type": "Punctuator", + "value": ")", + "loc": { + "start": { + "line": 10, + "column": 10 + }, + "end": { + "line": 10, + "column": 11 + } + }, + "range": [ + 125, + 126 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 10, + "column": 11 + }, + "end": { + "line": 10, + "column": 12 + } + }, + "range": [ + 126, + 127 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 10, + "column": 12 + }, + "end": { + "line": 10, + "column": 13 + } + }, + "range": [ + 127, + 128 + ] + }, + { + "type": "Keyword", + "value": "static", + "loc": { + "start": { + "line": 12, + "column": 4 + }, + "end": { + "line": 12, + "column": 10 + } + }, + "range": [ + 134, + 140 + ] + }, + { + "type": "Identifier", + "value": "get", + "loc": { + "start": { + "line": 13, + "column": 4 + }, + "end": { + "line": 13, + "column": 7 + } + }, + "range": [ + 145, + 148 + ] + }, + { + "type": "Identifier", + "value": "staticGetter", + "loc": { + "start": { + "line": 14, + "column": 4 + }, + "end": { + "line": 14, + "column": 16 + } + }, + "range": [ + 153, + 165 + ] + }, + { + "type": "Punctuator", + "value": "(", + "loc": { + "start": { + "line": 14, + "column": 16 + }, + "end": { + "line": 14, + "column": 17 + } + }, + "range": [ + 165, + 166 + ] + }, + { + "type": "Punctuator", + "value": ")", + "loc": { + "start": { + "line": 14, + "column": 17 + }, + "end": { + "line": 14, + "column": 18 + } + }, + "range": [ + 166, + 167 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 14, + "column": 18 + }, + "end": { + "line": 14, + "column": 19 + } + }, + "range": [ + 167, + 168 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 14, + "column": 19 + }, + "end": { + "line": 14, + "column": 20 + } + }, + "range": [ + 168, + 169 + ] + }, + { + "type": "Keyword", + "value": "static", + "loc": { + "start": { + "line": 16, + "column": 4 + }, + "end": { + "line": 16, + "column": 10 + } + }, + "range": [ + 175, + 181 + ] + }, + { + "type": "Identifier", + "value": "set", + "loc": { + "start": { + "line": 17, + "column": 4 + }, + "end": { + "line": 17, + "column": 7 + } + }, + "range": [ + 186, + 189 + ] + }, + { + "type": "Identifier", + "value": "staticGetter", + "loc": { + "start": { + "line": 18, + "column": 4 + }, + "end": { + "line": 18, + "column": 16 + } + }, + "range": [ + 194, + 206 + ] + }, + { + "type": "Punctuator", + "value": "(", + "loc": { + "start": { + "line": 18, + "column": 16 + }, + "end": { + "line": 18, + "column": 17 + } + }, + "range": [ + 206, + 207 + ] + }, + { + "type": "Identifier", + "value": "x", + "loc": { + "start": { + "line": 18, + "column": 17 + }, + "end": { + "line": 18, + "column": 18 + } + }, + "range": [ + 207, + 208 + ] + }, + { + "type": "Punctuator", + "value": ")", + "loc": { + "start": { + "line": 18, + "column": 18 + }, + "end": { + "line": 18, + "column": 19 + } + }, + "range": [ + 208, + 209 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 18, + "column": 19 + }, + "end": { + "line": 18, + "column": 20 + } + }, + "range": [ + 209, + 210 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 18, + "column": 20 + }, + "end": { + "line": 18, + "column": 21 + } + }, + "range": [ + 210, + 211 + ] + }, + { + "type": "Keyword", + "value": "static", + "loc": { + "start": { + "line": 20, + "column": 4 + }, + "end": { + "line": 20, + "column": 10 + } + }, + "range": [ + 217, + 223 + ] + }, + { + "type": "Punctuator", + "value": "*", + "loc": { + "start": { + "line": 21, + "column": 4 + }, + "end": { + "line": 21, + "column": 5 + } + }, + "range": [ + 228, + 229 + ] + }, + { + "type": "Identifier", + "value": "staticGenerator", + "loc": { + "start": { + "line": 22, + "column": 4 + }, + "end": { + "line": 22, + "column": 19 + } + }, + "range": [ + 234, + 249 + ] + }, + { + "type": "Punctuator", + "value": "(", + "loc": { + "start": { + "line": 22, + "column": 19 + }, + "end": { + "line": 22, + "column": 20 + } + }, + "range": [ + 249, + 250 + ] + }, + { + "type": "Punctuator", + "value": ")", + "loc": { + "start": { + "line": 22, + "column": 20 + }, + "end": { + "line": 22, + "column": 21 + } + }, + "range": [ + 250, + 251 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 22, + "column": 21 + }, + "end": { + "line": 22, + "column": 22 + } + }, + "range": [ + 251, + 252 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 22, + "column": 22 + }, + "end": { + "line": 22, + "column": 23 + } + }, + "range": [ + 252, + 253 + ] + }, + { + "type": "Keyword", + "value": "static", + "loc": { + "start": { + "line": 24, + "column": 4 + }, + "end": { + "line": 24, + "column": 10 + } + }, + "range": [ + 259, + 265 + ] + }, + { + "type": "Identifier", + "value": "async", + "loc": { + "start": { + "line": 25, + "column": 4 + }, + "end": { + "line": 25, + "column": 9 + } + }, + "range": [ + 270, + 275 + ] + }, + { + "type": "Identifier", + "value": "staticAsyncMethod", + "loc": { + "start": { + "line": 25, + "column": 10 + }, + "end": { + "line": 25, + "column": 27 + } + }, + "range": [ + 276, + 293 + ] + }, + { + "type": "Punctuator", + "value": "(", + "loc": { + "start": { + "line": 25, + "column": 27 + }, + "end": { + "line": 25, + "column": 28 + } + }, + "range": [ + 293, + 294 + ] + }, + { + "type": "Punctuator", + "value": ")", + "loc": { + "start": { + "line": 25, + "column": 28 + }, + "end": { + "line": 25, + "column": 29 + } + }, + "range": [ + 294, + 295 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 25, + "column": 29 + }, + "end": { + "line": 25, + "column": 30 + } + }, + "range": [ + 295, + 296 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 25, + "column": 30 + }, + "end": { + "line": 25, + "column": 31 + } + }, + "range": [ + 296, + 297 + ] + }, + { + "type": "Keyword", + "value": "static", + "loc": { + "start": { + "line": 27, + "column": 4 + }, + "end": { + "line": 27, + "column": 10 + } + }, + "range": [ + 303, + 309 + ] + }, + { + "type": "Identifier", + "value": "async", + "loc": { + "start": { + "line": 28, + "column": 4 + }, + "end": { + "line": 28, + "column": 9 + } + }, + "range": [ + 314, + 319 + ] + }, + { + "type": "Punctuator", + "value": "*", + "loc": { + "start": { + "line": 28, + "column": 9 + }, + "end": { + "line": 28, + "column": 10 + } + }, + "range": [ + 319, + 320 + ] + }, + { + "type": "Identifier", + "value": "staticAsyncGenerator", + "loc": { + "start": { + "line": 29, + "column": 4 + }, + "end": { + "line": 29, + "column": 24 + } + }, + "range": [ + 325, + 345 + ] + }, + { + "type": "Punctuator", + "value": "(", + "loc": { + "start": { + "line": 29, + "column": 24 + }, + "end": { + "line": 29, + "column": 25 + } + }, + "range": [ + 345, + 346 + ] + }, + { + "type": "Punctuator", + "value": ")", + "loc": { + "start": { + "line": 29, + "column": 25 + }, + "end": { + "line": 29, + "column": 26 + } + }, + "range": [ + 346, + 347 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 29, + "column": 26 + }, + "end": { + "line": 29, + "column": 27 + } + }, + "range": [ + 347, + 348 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 29, + "column": 27 + }, + "end": { + "line": 29, + "column": 28 + } + }, + "range": [ + 348, + 349 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 30, + "column": 0 + }, + "end": { + "line": 30, + "column": 1 + } + }, + "range": [ + 350, + 351 + ] + } + ] +}; \ No newline at end of file diff --git a/tests/fixtures/ecma-version/13/static-class-features/valid-contextual-keywords-no-asi.src.js b/tests/fixtures/ecma-version/13/static-class-features/valid-contextual-keywords-no-asi.src.js new file mode 100644 index 00000000..0e70bbf5 --- /dev/null +++ b/tests/fixtures/ecma-version/13/static-class-features/valid-contextual-keywords-no-asi.src.js @@ -0,0 +1,30 @@ +class C { + // Line breaks don't make fields by ASI. + static + get(){} + + static + set(x){} + + static + async(){} + + static + get + staticGetter(){} + + static + set + staticGetter(x){} + + static + * + staticGenerator(){} + + static + async staticAsyncMethod(){} + + static + async* + staticAsyncGenerator(){} +} diff --git a/tests/fixtures/ecma-version/13/static-class-features/valid-private-accessors.result.js b/tests/fixtures/ecma-version/13/static-class-features/valid-private-accessors.result.js new file mode 100644 index 00000000..2d01ed55 --- /dev/null +++ b/tests/fixtures/ecma-version/13/static-class-features/valid-private-accessors.result.js @@ -0,0 +1,630 @@ +export default { + "type": "Program", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 4, + "column": 1 + } + }, + "range": [ + 0, + 62 + ], + "body": [ + { + "type": "ClassDeclaration", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 4, + "column": 1 + } + }, + "range": [ + 0, + 62 + ], + "id": { + "type": "Identifier", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "range": [ + 6, + 7 + ], + "name": "C" + }, + "superClass": null, + "body": { + "type": "ClassBody", + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 4, + "column": 1 + } + }, + "range": [ + 8, + 62 + ], + "body": [ + { + "type": "MethodDefinition", + "loc": { + "start": { + "line": 2, + "column": 4 + }, + "end": { + "line": 2, + "column": 23 + } + }, + "range": [ + 14, + 33 + ], + "static": true, + "computed": false, + "key": { + "type": "PrivateIdentifier", + "loc": { + "start": { + "line": 2, + "column": 15 + }, + "end": { + "line": 2, + "column": 19 + } + }, + "range": [ + 25, + 29 + ], + "name": "aaa" + }, + "kind": "get", + "value": { + "type": "FunctionExpression", + "loc": { + "start": { + "line": 2, + "column": 19 + }, + "end": { + "line": 2, + "column": 23 + } + }, + "range": [ + 29, + 33 + ], + "id": null, + "expression": false, + "generator": false, + "async": false, + "params": [], + "body": { + "type": "BlockStatement", + "loc": { + "start": { + "line": 2, + "column": 21 + }, + "end": { + "line": 2, + "column": 23 + } + }, + "range": [ + 31, + 33 + ], + "body": [] + } + } + }, + { + "type": "MethodDefinition", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 3, + "column": 24 + } + }, + "range": [ + 39, + 59 + ], + "static": true, + "computed": false, + "key": { + "type": "PrivateIdentifier", + "loc": { + "start": { + "line": 3, + "column": 15 + }, + "end": { + "line": 3, + "column": 19 + } + }, + "range": [ + 50, + 54 + ], + "name": "aaa" + }, + "kind": "set", + "value": { + "type": "FunctionExpression", + "loc": { + "start": { + "line": 3, + "column": 19 + }, + "end": { + "line": 3, + "column": 24 + } + }, + "range": [ + 54, + 59 + ], + "id": null, + "expression": false, + "generator": false, + "async": false, + "params": [ + { + "type": "Identifier", + "loc": { + "start": { + "line": 3, + "column": 20 + }, + "end": { + "line": 3, + "column": 21 + } + }, + "range": [ + 55, + 56 + ], + "name": "x" + } + ], + "body": { + "type": "BlockStatement", + "loc": { + "start": { + "line": 3, + "column": 22 + }, + "end": { + "line": 3, + "column": 24 + } + }, + "range": [ + 57, + 59 + ], + "body": [] + } + } + } + ] + } + } + ], + "sourceType": "script", + "tokens": [ + { + "type": "Keyword", + "value": "class", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 5 + } + }, + "range": [ + 0, + 5 + ] + }, + { + "type": "Identifier", + "value": "C", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "range": [ + 6, + 7 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 9 + } + }, + "range": [ + 8, + 9 + ] + }, + { + "type": "Keyword", + "value": "static", + "loc": { + "start": { + "line": 2, + "column": 4 + }, + "end": { + "line": 2, + "column": 10 + } + }, + "range": [ + 14, + 20 + ] + }, + { + "type": "Identifier", + "value": "get", + "loc": { + "start": { + "line": 2, + "column": 11 + }, + "end": { + "line": 2, + "column": 14 + } + }, + "range": [ + 21, + 24 + ] + }, + { + "type": "PrivateIdentifier", + "value": "aaa", + "loc": { + "start": { + "line": 2, + "column": 15 + }, + "end": { + "line": 2, + "column": 19 + } + }, + "range": [ + 25, + 29 + ] + }, + { + "type": "Punctuator", + "value": "(", + "loc": { + "start": { + "line": 2, + "column": 19 + }, + "end": { + "line": 2, + "column": 20 + } + }, + "range": [ + 29, + 30 + ] + }, + { + "type": "Punctuator", + "value": ")", + "loc": { + "start": { + "line": 2, + "column": 20 + }, + "end": { + "line": 2, + "column": 21 + } + }, + "range": [ + 30, + 31 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 2, + "column": 21 + }, + "end": { + "line": 2, + "column": 22 + } + }, + "range": [ + 31, + 32 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 2, + "column": 22 + }, + "end": { + "line": 2, + "column": 23 + } + }, + "range": [ + 32, + 33 + ] + }, + { + "type": "Punctuator", + "value": ";", + "loc": { + "start": { + "line": 2, + "column": 23 + }, + "end": { + "line": 2, + "column": 24 + } + }, + "range": [ + 33, + 34 + ] + }, + { + "type": "Keyword", + "value": "static", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 3, + "column": 10 + } + }, + "range": [ + 39, + 45 + ] + }, + { + "type": "Identifier", + "value": "set", + "loc": { + "start": { + "line": 3, + "column": 11 + }, + "end": { + "line": 3, + "column": 14 + } + }, + "range": [ + 46, + 49 + ] + }, + { + "type": "PrivateIdentifier", + "value": "aaa", + "loc": { + "start": { + "line": 3, + "column": 15 + }, + "end": { + "line": 3, + "column": 19 + } + }, + "range": [ + 50, + 54 + ] + }, + { + "type": "Punctuator", + "value": "(", + "loc": { + "start": { + "line": 3, + "column": 19 + }, + "end": { + "line": 3, + "column": 20 + } + }, + "range": [ + 54, + 55 + ] + }, + { + "type": "Identifier", + "value": "x", + "loc": { + "start": { + "line": 3, + "column": 20 + }, + "end": { + "line": 3, + "column": 21 + } + }, + "range": [ + 55, + 56 + ] + }, + { + "type": "Punctuator", + "value": ")", + "loc": { + "start": { + "line": 3, + "column": 21 + }, + "end": { + "line": 3, + "column": 22 + } + }, + "range": [ + 56, + 57 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 3, + "column": 22 + }, + "end": { + "line": 3, + "column": 23 + } + }, + "range": [ + 57, + 58 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 3, + "column": 23 + }, + "end": { + "line": 3, + "column": 24 + } + }, + "range": [ + 58, + 59 + ] + }, + { + "type": "Punctuator", + "value": ";", + "loc": { + "start": { + "line": 3, + "column": 24 + }, + "end": { + "line": 3, + "column": 25 + } + }, + "range": [ + 59, + 60 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 4, + "column": 0 + }, + "end": { + "line": 4, + "column": 1 + } + }, + "range": [ + 61, + 62 + ] + } + ] +}; \ No newline at end of file diff --git a/tests/fixtures/ecma-version/13/static-class-features/valid-private-accessors.src.js b/tests/fixtures/ecma-version/13/static-class-features/valid-private-accessors.src.js new file mode 100644 index 00000000..917efe58 --- /dev/null +++ b/tests/fixtures/ecma-version/13/static-class-features/valid-private-accessors.src.js @@ -0,0 +1,4 @@ +class C { + static get #aaa(){}; + static set #aaa(x){}; +} diff --git a/tests/fixtures/ecma-version/13/static-class-features/valid-private-fields.result.js b/tests/fixtures/ecma-version/13/static-class-features/valid-private-fields.result.js new file mode 100644 index 00000000..1f747b02 --- /dev/null +++ b/tests/fixtures/ecma-version/13/static-class-features/valid-private-fields.result.js @@ -0,0 +1,387 @@ +export default { + "type": "Program", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 4, + "column": 1 + } + }, + "range": [ + 0, + 49 + ], + "body": [ + { + "type": "ClassDeclaration", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 4, + "column": 1 + } + }, + "range": [ + 0, + 49 + ], + "id": { + "type": "Identifier", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "range": [ + 6, + 7 + ], + "name": "C" + }, + "superClass": null, + "body": { + "type": "ClassBody", + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 4, + "column": 1 + } + }, + "range": [ + 8, + 49 + ], + "body": [ + { + "type": "PropertyDefinition", + "loc": { + "start": { + "line": 2, + "column": 4 + }, + "end": { + "line": 2, + "column": 16 + } + }, + "range": [ + 14, + 26 + ], + "static": true, + "computed": false, + "key": { + "type": "PrivateIdentifier", + "loc": { + "start": { + "line": 2, + "column": 11 + }, + "end": { + "line": 2, + "column": 15 + } + }, + "range": [ + 21, + 25 + ], + "name": "aaa" + }, + "value": null + }, + { + "type": "PropertyDefinition", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 3, + "column": 20 + } + }, + "range": [ + 31, + 47 + ], + "static": true, + "computed": false, + "key": { + "type": "PrivateIdentifier", + "loc": { + "start": { + "line": 3, + "column": 11 + }, + "end": { + "line": 3, + "column": 15 + } + }, + "range": [ + 38, + 42 + ], + "name": "bbb" + }, + "value": { + "type": "Literal", + "loc": { + "start": { + "line": 3, + "column": 18 + }, + "end": { + "line": 3, + "column": 19 + } + }, + "range": [ + 45, + 46 + ], + "value": 0, + "raw": "0" + } + } + ] + } + } + ], + "sourceType": "script", + "tokens": [ + { + "type": "Keyword", + "value": "class", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 5 + } + }, + "range": [ + 0, + 5 + ] + }, + { + "type": "Identifier", + "value": "C", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "range": [ + 6, + 7 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 9 + } + }, + "range": [ + 8, + 9 + ] + }, + { + "type": "Keyword", + "value": "static", + "loc": { + "start": { + "line": 2, + "column": 4 + }, + "end": { + "line": 2, + "column": 10 + } + }, + "range": [ + 14, + 20 + ] + }, + { + "type": "PrivateIdentifier", + "value": "aaa", + "loc": { + "start": { + "line": 2, + "column": 11 + }, + "end": { + "line": 2, + "column": 15 + } + }, + "range": [ + 21, + 25 + ] + }, + { + "type": "Punctuator", + "value": ";", + "loc": { + "start": { + "line": 2, + "column": 15 + }, + "end": { + "line": 2, + "column": 16 + } + }, + "range": [ + 25, + 26 + ] + }, + { + "type": "Keyword", + "value": "static", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 3, + "column": 10 + } + }, + "range": [ + 31, + 37 + ] + }, + { + "type": "PrivateIdentifier", + "value": "bbb", + "loc": { + "start": { + "line": 3, + "column": 11 + }, + "end": { + "line": 3, + "column": 15 + } + }, + "range": [ + 38, + 42 + ] + }, + { + "type": "Punctuator", + "value": "=", + "loc": { + "start": { + "line": 3, + "column": 16 + }, + "end": { + "line": 3, + "column": 17 + } + }, + "range": [ + 43, + 44 + ] + }, + { + "type": "Numeric", + "value": "0", + "loc": { + "start": { + "line": 3, + "column": 18 + }, + "end": { + "line": 3, + "column": 19 + } + }, + "range": [ + 45, + 46 + ] + }, + { + "type": "Punctuator", + "value": ";", + "loc": { + "start": { + "line": 3, + "column": 19 + }, + "end": { + "line": 3, + "column": 20 + } + }, + "range": [ + 46, + 47 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 4, + "column": 0 + }, + "end": { + "line": 4, + "column": 1 + } + }, + "range": [ + 48, + 49 + ] + } + ] +}; \ No newline at end of file diff --git a/tests/fixtures/ecma-version/13/static-class-features/valid-private-fields.src.js b/tests/fixtures/ecma-version/13/static-class-features/valid-private-fields.src.js new file mode 100644 index 00000000..07be5668 --- /dev/null +++ b/tests/fixtures/ecma-version/13/static-class-features/valid-private-fields.src.js @@ -0,0 +1,4 @@ +class C { + static #aaa; + static #bbb = 0; +} diff --git a/tests/fixtures/ecma-version/13/static-class-features/valid-private-methods.result.js b/tests/fixtures/ecma-version/13/static-class-features/valid-private-methods.result.js new file mode 100644 index 00000000..8064b579 --- /dev/null +++ b/tests/fixtures/ecma-version/13/static-class-features/valid-private-methods.result.js @@ -0,0 +1,965 @@ +export default { + "type": "Program", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 6, + "column": 1 + } + }, + "range": [ + 0, + 128 + ], + "body": [ + { + "type": "ClassDeclaration", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 6, + "column": 1 + } + }, + "range": [ + 0, + 128 + ], + "id": { + "type": "Identifier", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "range": [ + 6, + 7 + ], + "name": "C" + }, + "superClass": null, + "body": { + "type": "ClassBody", + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 6, + "column": 1 + } + }, + "range": [ + 8, + 128 + ], + "body": [ + { + "type": "MethodDefinition", + "loc": { + "start": { + "line": 2, + "column": 4 + }, + "end": { + "line": 2, + "column": 22 + } + }, + "range": [ + 14, + 32 + ], + "static": true, + "computed": false, + "key": { + "type": "PrivateIdentifier", + "loc": { + "start": { + "line": 2, + "column": 11 + }, + "end": { + "line": 2, + "column": 18 + } + }, + "range": [ + 21, + 28 + ], + "name": "method" + }, + "kind": "method", + "value": { + "type": "FunctionExpression", + "loc": { + "start": { + "line": 2, + "column": 18 + }, + "end": { + "line": 2, + "column": 22 + } + }, + "range": [ + 28, + 32 + ], + "id": null, + "expression": false, + "generator": false, + "async": false, + "params": [], + "body": { + "type": "BlockStatement", + "loc": { + "start": { + "line": 2, + "column": 20 + }, + "end": { + "line": 2, + "column": 22 + } + }, + "range": [ + 30, + 32 + ], + "body": [] + } + } + }, + { + "type": "MethodDefinition", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 3, + "column": 27 + } + }, + "range": [ + 37, + 60 + ], + "static": true, + "computed": false, + "key": { + "type": "PrivateIdentifier", + "loc": { + "start": { + "line": 3, + "column": 13 + }, + "end": { + "line": 3, + "column": 23 + } + }, + "range": [ + 46, + 56 + ], + "name": "generator" + }, + "kind": "method", + "value": { + "type": "FunctionExpression", + "loc": { + "start": { + "line": 3, + "column": 23 + }, + "end": { + "line": 3, + "column": 27 + } + }, + "range": [ + 56, + 60 + ], + "id": null, + "expression": false, + "generator": true, + "async": false, + "params": [], + "body": { + "type": "BlockStatement", + "loc": { + "start": { + "line": 3, + "column": 25 + }, + "end": { + "line": 3, + "column": 27 + } + }, + "range": [ + 58, + 60 + ], + "body": [] + } + } + }, + { + "type": "MethodDefinition", + "loc": { + "start": { + "line": 4, + "column": 4 + }, + "end": { + "line": 4, + "column": 27 + } + }, + "range": [ + 65, + 88 + ], + "static": true, + "computed": false, + "key": { + "type": "PrivateIdentifier", + "loc": { + "start": { + "line": 4, + "column": 17 + }, + "end": { + "line": 4, + "column": 23 + } + }, + "range": [ + 78, + 84 + ], + "name": "async" + }, + "kind": "method", + "value": { + "type": "FunctionExpression", + "loc": { + "start": { + "line": 4, + "column": 23 + }, + "end": { + "line": 4, + "column": 27 + } + }, + "range": [ + 84, + 88 + ], + "id": null, + "expression": false, + "generator": false, + "async": true, + "params": [], + "body": { + "type": "BlockStatement", + "loc": { + "start": { + "line": 4, + "column": 25 + }, + "end": { + "line": 4, + "column": 27 + } + }, + "range": [ + 86, + 88 + ], + "body": [] + } + } + }, + { + "type": "MethodDefinition", + "loc": { + "start": { + "line": 5, + "column": 4 + }, + "end": { + "line": 5, + "column": 37 + } + }, + "range": [ + 93, + 126 + ], + "static": true, + "computed": false, + "key": { + "type": "PrivateIdentifier", + "loc": { + "start": { + "line": 5, + "column": 18 + }, + "end": { + "line": 5, + "column": 33 + } + }, + "range": [ + 107, + 122 + ], + "name": "asyncGenerator" + }, + "kind": "method", + "value": { + "type": "FunctionExpression", + "loc": { + "start": { + "line": 5, + "column": 33 + }, + "end": { + "line": 5, + "column": 37 + } + }, + "range": [ + 122, + 126 + ], + "id": null, + "expression": false, + "generator": true, + "async": true, + "params": [], + "body": { + "type": "BlockStatement", + "loc": { + "start": { + "line": 5, + "column": 35 + }, + "end": { + "line": 5, + "column": 37 + } + }, + "range": [ + 124, + 126 + ], + "body": [] + } + } + } + ] + } + } + ], + "sourceType": "script", + "tokens": [ + { + "type": "Keyword", + "value": "class", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 5 + } + }, + "range": [ + 0, + 5 + ] + }, + { + "type": "Identifier", + "value": "C", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "range": [ + 6, + 7 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 9 + } + }, + "range": [ + 8, + 9 + ] + }, + { + "type": "Keyword", + "value": "static", + "loc": { + "start": { + "line": 2, + "column": 4 + }, + "end": { + "line": 2, + "column": 10 + } + }, + "range": [ + 14, + 20 + ] + }, + { + "type": "PrivateIdentifier", + "value": "method", + "loc": { + "start": { + "line": 2, + "column": 11 + }, + "end": { + "line": 2, + "column": 18 + } + }, + "range": [ + 21, + 28 + ] + }, + { + "type": "Punctuator", + "value": "(", + "loc": { + "start": { + "line": 2, + "column": 18 + }, + "end": { + "line": 2, + "column": 19 + } + }, + "range": [ + 28, + 29 + ] + }, + { + "type": "Punctuator", + "value": ")", + "loc": { + "start": { + "line": 2, + "column": 19 + }, + "end": { + "line": 2, + "column": 20 + } + }, + "range": [ + 29, + 30 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 2, + "column": 20 + }, + "end": { + "line": 2, + "column": 21 + } + }, + "range": [ + 30, + 31 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 2, + "column": 21 + }, + "end": { + "line": 2, + "column": 22 + } + }, + "range": [ + 31, + 32 + ] + }, + { + "type": "Keyword", + "value": "static", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 3, + "column": 10 + } + }, + "range": [ + 37, + 43 + ] + }, + { + "type": "Punctuator", + "value": "*", + "loc": { + "start": { + "line": 3, + "column": 11 + }, + "end": { + "line": 3, + "column": 12 + } + }, + "range": [ + 44, + 45 + ] + }, + { + "type": "PrivateIdentifier", + "value": "generator", + "loc": { + "start": { + "line": 3, + "column": 13 + }, + "end": { + "line": 3, + "column": 23 + } + }, + "range": [ + 46, + 56 + ] + }, + { + "type": "Punctuator", + "value": "(", + "loc": { + "start": { + "line": 3, + "column": 23 + }, + "end": { + "line": 3, + "column": 24 + } + }, + "range": [ + 56, + 57 + ] + }, + { + "type": "Punctuator", + "value": ")", + "loc": { + "start": { + "line": 3, + "column": 24 + }, + "end": { + "line": 3, + "column": 25 + } + }, + "range": [ + 57, + 58 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 3, + "column": 25 + }, + "end": { + "line": 3, + "column": 26 + } + }, + "range": [ + 58, + 59 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 3, + "column": 26 + }, + "end": { + "line": 3, + "column": 27 + } + }, + "range": [ + 59, + 60 + ] + }, + { + "type": "Keyword", + "value": "static", + "loc": { + "start": { + "line": 4, + "column": 4 + }, + "end": { + "line": 4, + "column": 10 + } + }, + "range": [ + 65, + 71 + ] + }, + { + "type": "Identifier", + "value": "async", + "loc": { + "start": { + "line": 4, + "column": 11 + }, + "end": { + "line": 4, + "column": 16 + } + }, + "range": [ + 72, + 77 + ] + }, + { + "type": "PrivateIdentifier", + "value": "async", + "loc": { + "start": { + "line": 4, + "column": 17 + }, + "end": { + "line": 4, + "column": 23 + } + }, + "range": [ + 78, + 84 + ] + }, + { + "type": "Punctuator", + "value": "(", + "loc": { + "start": { + "line": 4, + "column": 23 + }, + "end": { + "line": 4, + "column": 24 + } + }, + "range": [ + 84, + 85 + ] + }, + { + "type": "Punctuator", + "value": ")", + "loc": { + "start": { + "line": 4, + "column": 24 + }, + "end": { + "line": 4, + "column": 25 + } + }, + "range": [ + 85, + 86 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 4, + "column": 25 + }, + "end": { + "line": 4, + "column": 26 + } + }, + "range": [ + 86, + 87 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 4, + "column": 26 + }, + "end": { + "line": 4, + "column": 27 + } + }, + "range": [ + 87, + 88 + ] + }, + { + "type": "Keyword", + "value": "static", + "loc": { + "start": { + "line": 5, + "column": 4 + }, + "end": { + "line": 5, + "column": 10 + } + }, + "range": [ + 93, + 99 + ] + }, + { + "type": "Identifier", + "value": "async", + "loc": { + "start": { + "line": 5, + "column": 11 + }, + "end": { + "line": 5, + "column": 16 + } + }, + "range": [ + 100, + 105 + ] + }, + { + "type": "Punctuator", + "value": "*", + "loc": { + "start": { + "line": 5, + "column": 16 + }, + "end": { + "line": 5, + "column": 17 + } + }, + "range": [ + 105, + 106 + ] + }, + { + "type": "PrivateIdentifier", + "value": "asyncGenerator", + "loc": { + "start": { + "line": 5, + "column": 18 + }, + "end": { + "line": 5, + "column": 33 + } + }, + "range": [ + 107, + 122 + ] + }, + { + "type": "Punctuator", + "value": "(", + "loc": { + "start": { + "line": 5, + "column": 33 + }, + "end": { + "line": 5, + "column": 34 + } + }, + "range": [ + 122, + 123 + ] + }, + { + "type": "Punctuator", + "value": ")", + "loc": { + "start": { + "line": 5, + "column": 34 + }, + "end": { + "line": 5, + "column": 35 + } + }, + "range": [ + 123, + 124 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 5, + "column": 35 + }, + "end": { + "line": 5, + "column": 36 + } + }, + "range": [ + 124, + 125 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 5, + "column": 36 + }, + "end": { + "line": 5, + "column": 37 + } + }, + "range": [ + 125, + 126 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 6, + "column": 0 + }, + "end": { + "line": 6, + "column": 1 + } + }, + "range": [ + 127, + 128 + ] + } + ] +}; \ No newline at end of file diff --git a/tests/fixtures/ecma-version/13/static-class-features/valid-private-methods.src.js b/tests/fixtures/ecma-version/13/static-class-features/valid-private-methods.src.js new file mode 100644 index 00000000..8cfe5f40 --- /dev/null +++ b/tests/fixtures/ecma-version/13/static-class-features/valid-private-methods.src.js @@ -0,0 +1,6 @@ +class C { + static #method(){} + static * #generator(){} + static async #async(){} + static async* #asyncGenerator(){} +} diff --git a/tests/fixtures/ecma-version/13/static-class-features/valid-public-fields.result.js b/tests/fixtures/ecma-version/13/static-class-features/valid-public-fields.result.js new file mode 100644 index 00000000..9aebd4ce --- /dev/null +++ b/tests/fixtures/ecma-version/13/static-class-features/valid-public-fields.result.js @@ -0,0 +1,387 @@ +export default { + "type": "Program", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 4, + "column": 1 + } + }, + "range": [ + 0, + 47 + ], + "body": [ + { + "type": "ClassDeclaration", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 4, + "column": 1 + } + }, + "range": [ + 0, + 47 + ], + "id": { + "type": "Identifier", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "range": [ + 6, + 7 + ], + "name": "C" + }, + "superClass": null, + "body": { + "type": "ClassBody", + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 4, + "column": 1 + } + }, + "range": [ + 8, + 47 + ], + "body": [ + { + "type": "PropertyDefinition", + "loc": { + "start": { + "line": 2, + "column": 4 + }, + "end": { + "line": 2, + "column": 15 + } + }, + "range": [ + 14, + 25 + ], + "static": true, + "computed": false, + "key": { + "type": "Identifier", + "loc": { + "start": { + "line": 2, + "column": 11 + }, + "end": { + "line": 2, + "column": 14 + } + }, + "range": [ + 21, + 24 + ], + "name": "aaa" + }, + "value": null + }, + { + "type": "PropertyDefinition", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 3, + "column": 19 + } + }, + "range": [ + 30, + 45 + ], + "static": true, + "computed": false, + "key": { + "type": "Identifier", + "loc": { + "start": { + "line": 3, + "column": 11 + }, + "end": { + "line": 3, + "column": 14 + } + }, + "range": [ + 37, + 40 + ], + "name": "bbb" + }, + "value": { + "type": "Literal", + "loc": { + "start": { + "line": 3, + "column": 17 + }, + "end": { + "line": 3, + "column": 18 + } + }, + "range": [ + 43, + 44 + ], + "value": 0, + "raw": "0" + } + } + ] + } + } + ], + "sourceType": "script", + "tokens": [ + { + "type": "Keyword", + "value": "class", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 5 + } + }, + "range": [ + 0, + 5 + ] + }, + { + "type": "Identifier", + "value": "C", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "range": [ + 6, + 7 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 9 + } + }, + "range": [ + 8, + 9 + ] + }, + { + "type": "Keyword", + "value": "static", + "loc": { + "start": { + "line": 2, + "column": 4 + }, + "end": { + "line": 2, + "column": 10 + } + }, + "range": [ + 14, + 20 + ] + }, + { + "type": "Identifier", + "value": "aaa", + "loc": { + "start": { + "line": 2, + "column": 11 + }, + "end": { + "line": 2, + "column": 14 + } + }, + "range": [ + 21, + 24 + ] + }, + { + "type": "Punctuator", + "value": ";", + "loc": { + "start": { + "line": 2, + "column": 14 + }, + "end": { + "line": 2, + "column": 15 + } + }, + "range": [ + 24, + 25 + ] + }, + { + "type": "Keyword", + "value": "static", + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 3, + "column": 10 + } + }, + "range": [ + 30, + 36 + ] + }, + { + "type": "Identifier", + "value": "bbb", + "loc": { + "start": { + "line": 3, + "column": 11 + }, + "end": { + "line": 3, + "column": 14 + } + }, + "range": [ + 37, + 40 + ] + }, + { + "type": "Punctuator", + "value": "=", + "loc": { + "start": { + "line": 3, + "column": 15 + }, + "end": { + "line": 3, + "column": 16 + } + }, + "range": [ + 41, + 42 + ] + }, + { + "type": "Numeric", + "value": "0", + "loc": { + "start": { + "line": 3, + "column": 17 + }, + "end": { + "line": 3, + "column": 18 + } + }, + "range": [ + 43, + 44 + ] + }, + { + "type": "Punctuator", + "value": ";", + "loc": { + "start": { + "line": 3, + "column": 18 + }, + "end": { + "line": 3, + "column": 19 + } + }, + "range": [ + 44, + 45 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 4, + "column": 0 + }, + "end": { + "line": 4, + "column": 1 + } + }, + "range": [ + 46, + 47 + ] + } + ] +}; \ No newline at end of file diff --git a/tests/fixtures/ecma-version/13/static-class-features/valid-public-fields.src.js b/tests/fixtures/ecma-version/13/static-class-features/valid-public-fields.src.js new file mode 100644 index 00000000..fd1cf0e1 --- /dev/null +++ b/tests/fixtures/ecma-version/13/static-class-features/valid-public-fields.src.js @@ -0,0 +1,4 @@ +class C { + static aaa; + static bbb = 0; +} diff --git a/tests/lib/supported-ecmaversions.js b/tests/lib/supported-ecmaversions.js index 8f66cf15..328e208b 100644 --- a/tests/lib/supported-ecmaversions.js +++ b/tests/lib/supported-ecmaversions.js @@ -17,7 +17,7 @@ import * as espree from "../../espree.js"; describe("latestEcmaVersion", () => { it("should return the latest supported ecmaVersion", () => { - assert.strictEqual(espree.latestEcmaVersion, 12); + assert.strictEqual(espree.latestEcmaVersion, 13); }); }); @@ -25,7 +25,7 @@ describe("supportedEcmaVersions", () => { it("should return an array of all supported versions", () => { assert.deepStrictEqual( espree.supportedEcmaVersions, - [3, 5, 6, 7, 8, 9, 10, 11, 12] + [3, 5, 6, 7, 8, 9, 10, 11, 12, 13] ); }); });