From cd9da7ede9e82f5d735c411435bede3b7dc68452 Mon Sep 17 00:00:00 2001 From: Toru Nagashima Date: Tue, 5 Jun 2018 02:48:25 +0900 Subject: [PATCH] Update: upgrade acorn to support two ES2019 syntax (#380) * Update: upgrade acorn to support two ES2019 syntax * update generated test results since Node.js doesn't support the syntax * fix typo --- README.md | 21 +- espree.js | 1 + package.json | 2 +- .../10/json-superset/invalid-lf.result.js | 6 + .../10/json-superset/invalid-lf.src.js | 2 + .../10/json-superset/valid-2028.result.js | 168 +++++++ .../10/json-superset/valid-2028.src.js | 1 + .../10/json-superset/valid-2029.result.js | 168 +++++++ .../10/json-superset/valid-2029.src.js | 1 + .../invalid-01.result.js | 6 + .../optional-catch-binding/invalid-01.src.js | 3 + .../invalid-02.result.js | 6 + .../optional-catch-binding/invalid-02.src.js | 3 + .../optional-catch-binding/valid-01.result.js | 202 +++++++++ .../10/optional-catch-binding/valid-01.src.js | 1 + .../optional-catch-binding/valid-02.result.js | 418 ++++++++++++++++++ .../10/optional-catch-binding/valid-02.src.js | 5 + 17 files changed, 1009 insertions(+), 5 deletions(-) create mode 100644 tests/fixtures/ecma-version/10/json-superset/invalid-lf.result.js create mode 100644 tests/fixtures/ecma-version/10/json-superset/invalid-lf.src.js create mode 100644 tests/fixtures/ecma-version/10/json-superset/valid-2028.result.js create mode 100644 tests/fixtures/ecma-version/10/json-superset/valid-2028.src.js create mode 100644 tests/fixtures/ecma-version/10/json-superset/valid-2029.result.js create mode 100644 tests/fixtures/ecma-version/10/json-superset/valid-2029.src.js create mode 100644 tests/fixtures/ecma-version/10/optional-catch-binding/invalid-01.result.js create mode 100644 tests/fixtures/ecma-version/10/optional-catch-binding/invalid-01.src.js create mode 100644 tests/fixtures/ecma-version/10/optional-catch-binding/invalid-02.result.js create mode 100644 tests/fixtures/ecma-version/10/optional-catch-binding/invalid-02.src.js create mode 100644 tests/fixtures/ecma-version/10/optional-catch-binding/valid-01.result.js create mode 100644 tests/fixtures/ecma-version/10/optional-catch-binding/valid-01.src.js create mode 100644 tests/fixtures/ecma-version/10/optional-catch-binding/valid-02.result.js create mode 100644 tests/fixtures/ecma-version/10/optional-catch-binding/valid-02.src.js diff --git a/README.md b/README.md index 4ff5be15..37a60949 100644 --- a/README.md +++ b/README.md @@ -46,8 +46,8 @@ var ast = espree.parse(code, { // create a top-level tokens array containing all tokens tokens: false, - // Set to 3, 5 (default), 6, 7, 8, or 9 to specify the version of ECMAScript syntax you want to use. - // You can also set to 2015 (same as 6), 2016 (same as 7), 2017 (same as 8), or 2018 (same as 9) to use the year-based naming. + // Set to 3, 5 (default), 6, 7, 8, 9, or 10 to specify the version of ECMAScript syntax you want to use. + // You can also set to 2015 (same as 6), 2016 (same as 7), 2017 (same as 8), 2018 (same as 9), or 2019 (same as 10) to use the year-based naming. ecmaVersion: 5, // specify which type of script you're parsing ("script" or "module") @@ -143,11 +143,24 @@ There are two ECMAScript 2017 syntax changes: `async` functions, and trailing co ### What ECMAScript 2018 features do you support? -Because ECMAScript 2018 is still under development, we are implementing features as they are finalized. Currently, Espree supports: +There are seven ECMAScript 2018 syntax changes: * Invalid escape sequences in tagged template literals * Rest/spread properties -* Async Iteration +* Async iteration +* RegExp `s` flag +* RegExp named capture groups +* RegExp lookhehind assersions +* RegExp unicode property escapes + +Espree supports all of them. + +### What ECMAScript 2019 features do you support? + +Because ECMAScript 2019 is still under development, we are implementing features as they are finalized. Currently, Espree supports: + +* Optional `catch` binding +* JSON superset (`\u2028` and `\u2029` in string literals) ### How do you determine which experimental features to support? diff --git a/espree.js b/espree.js index 4fd28924..e50fc566 100644 --- a/espree.js +++ b/espree.js @@ -122,6 +122,7 @@ function normalizeEcmaVersion(ecmaVersion) { case 7: case 8: case 9: + case 10: return version; default: diff --git a/package.json b/package.json index 95e0c46a..c0677b4f 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ }, "license": "BSD-2-Clause", "dependencies": { - "acorn": "^5.5.1", + "acorn": "^5.6.0", "acorn-jsx": "^4.1.1" }, "devDependencies": { diff --git a/tests/fixtures/ecma-version/10/json-superset/invalid-lf.result.js b/tests/fixtures/ecma-version/10/json-superset/invalid-lf.result.js new file mode 100644 index 00000000..5dac2e91 --- /dev/null +++ b/tests/fixtures/ecma-version/10/json-superset/invalid-lf.result.js @@ -0,0 +1,6 @@ +module.exports = { + "index": 8, + "lineNumber": 1, + "column": 9, + "message": "Unterminated string constant" +}; \ No newline at end of file diff --git a/tests/fixtures/ecma-version/10/json-superset/invalid-lf.src.js b/tests/fixtures/ecma-version/10/json-superset/invalid-lf.src.js new file mode 100644 index 00000000..e4c4bc20 --- /dev/null +++ b/tests/fixtures/ecma-version/10/json-superset/invalid-lf.src.js @@ -0,0 +1,2 @@ +var s = " +" diff --git a/tests/fixtures/ecma-version/10/json-superset/valid-2028.result.js b/tests/fixtures/ecma-version/10/json-superset/valid-2028.result.js new file mode 100644 index 00000000..9779f4b0 --- /dev/null +++ b/tests/fixtures/ecma-version/10/json-superset/valid-2028.result.js @@ -0,0 +1,168 @@ +module.exports = { + "type": "Program", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 11 + } + }, + "range": [ + 0, + 11 + ], + "body": [ + { + "type": "VariableDeclaration", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 11 + } + }, + "range": [ + 0, + 11 + ], + "declarations": [ + { + "type": "VariableDeclarator", + "loc": { + "start": { + "line": 1, + "column": 4 + }, + "end": { + "line": 1, + "column": 11 + } + }, + "range": [ + 4, + 11 + ], + "id": { + "type": "Identifier", + "loc": { + "start": { + "line": 1, + "column": 4 + }, + "end": { + "line": 1, + "column": 5 + } + }, + "range": [ + 4, + 5 + ], + "name": "s" + }, + "init": { + "type": "Literal", + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 11 + } + }, + "range": [ + 8, + 11 + ], + "value": "\u2028", + "raw": "\"\u2028\"" + } + } + ], + "kind": "var" + } + ], + "sourceType": "script", + "tokens": [ + { + "type": "Keyword", + "value": "var", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 3 + } + }, + "range": [ + 0, + 3 + ] + }, + { + "type": "Identifier", + "value": "s", + "loc": { + "start": { + "line": 1, + "column": 4 + }, + "end": { + "line": 1, + "column": 5 + } + }, + "range": [ + 4, + 5 + ] + }, + { + "type": "Punctuator", + "value": "=", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "range": [ + 6, + 7 + ] + }, + { + "type": "String", + "value": "\"\u2028\"", + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 11 + } + }, + "range": [ + 8, + 11 + ] + } + ] +}; diff --git a/tests/fixtures/ecma-version/10/json-superset/valid-2028.src.js b/tests/fixtures/ecma-version/10/json-superset/valid-2028.src.js new file mode 100644 index 00000000..0cd3f0c4 --- /dev/null +++ b/tests/fixtures/ecma-version/10/json-superset/valid-2028.src.js @@ -0,0 +1 @@ +var s = "
" diff --git a/tests/fixtures/ecma-version/10/json-superset/valid-2029.result.js b/tests/fixtures/ecma-version/10/json-superset/valid-2029.result.js new file mode 100644 index 00000000..5436ec63 --- /dev/null +++ b/tests/fixtures/ecma-version/10/json-superset/valid-2029.result.js @@ -0,0 +1,168 @@ +module.exports = { + "type": "Program", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 11 + } + }, + "range": [ + 0, + 11 + ], + "body": [ + { + "type": "VariableDeclaration", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 11 + } + }, + "range": [ + 0, + 11 + ], + "declarations": [ + { + "type": "VariableDeclarator", + "loc": { + "start": { + "line": 1, + "column": 4 + }, + "end": { + "line": 1, + "column": 11 + } + }, + "range": [ + 4, + 11 + ], + "id": { + "type": "Identifier", + "loc": { + "start": { + "line": 1, + "column": 4 + }, + "end": { + "line": 1, + "column": 5 + } + }, + "range": [ + 4, + 5 + ], + "name": "s" + }, + "init": { + "type": "Literal", + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 11 + } + }, + "range": [ + 8, + 11 + ], + "value": "\u2029", + "raw": "\"\u2029\"" + } + } + ], + "kind": "var" + } + ], + "sourceType": "script", + "tokens": [ + { + "type": "Keyword", + "value": "var", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 3 + } + }, + "range": [ + 0, + 3 + ] + }, + { + "type": "Identifier", + "value": "s", + "loc": { + "start": { + "line": 1, + "column": 4 + }, + "end": { + "line": 1, + "column": 5 + } + }, + "range": [ + 4, + 5 + ] + }, + { + "type": "Punctuator", + "value": "=", + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "range": [ + 6, + 7 + ] + }, + { + "type": "String", + "value": "\"\u2029\"", + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 11 + } + }, + "range": [ + 8, + 11 + ] + } + ] +}; diff --git a/tests/fixtures/ecma-version/10/json-superset/valid-2029.src.js b/tests/fixtures/ecma-version/10/json-superset/valid-2029.src.js new file mode 100644 index 00000000..e9c70fe8 --- /dev/null +++ b/tests/fixtures/ecma-version/10/json-superset/valid-2029.src.js @@ -0,0 +1 @@ +var s = "
" diff --git a/tests/fixtures/ecma-version/10/optional-catch-binding/invalid-01.result.js b/tests/fixtures/ecma-version/10/optional-catch-binding/invalid-01.result.js new file mode 100644 index 00000000..be3e8789 --- /dev/null +++ b/tests/fixtures/ecma-version/10/optional-catch-binding/invalid-01.result.js @@ -0,0 +1,6 @@ +module.exports = { + "index": 24, + "lineNumber": 3, + "column": 9, + "message": "Unexpected token bar" +}; \ No newline at end of file diff --git a/tests/fixtures/ecma-version/10/optional-catch-binding/invalid-01.src.js b/tests/fixtures/ecma-version/10/optional-catch-binding/invalid-01.src.js new file mode 100644 index 00000000..651ac67b --- /dev/null +++ b/tests/fixtures/ecma-version/10/optional-catch-binding/invalid-01.src.js @@ -0,0 +1,3 @@ +try { + foo() +} catch bar(); diff --git a/tests/fixtures/ecma-version/10/optional-catch-binding/invalid-02.result.js b/tests/fixtures/ecma-version/10/optional-catch-binding/invalid-02.result.js new file mode 100644 index 00000000..847ba8bc --- /dev/null +++ b/tests/fixtures/ecma-version/10/optional-catch-binding/invalid-02.result.js @@ -0,0 +1,6 @@ +module.exports = { + "index": 25, + "lineNumber": 3, + "column": 10, + "message": "Unexpected token )" +}; \ No newline at end of file diff --git a/tests/fixtures/ecma-version/10/optional-catch-binding/invalid-02.src.js b/tests/fixtures/ecma-version/10/optional-catch-binding/invalid-02.src.js new file mode 100644 index 00000000..c6db8598 --- /dev/null +++ b/tests/fixtures/ecma-version/10/optional-catch-binding/invalid-02.src.js @@ -0,0 +1,3 @@ +try { + foo() +} catch () {} diff --git a/tests/fixtures/ecma-version/10/optional-catch-binding/valid-01.result.js b/tests/fixtures/ecma-version/10/optional-catch-binding/valid-01.result.js new file mode 100644 index 00000000..c557cb70 --- /dev/null +++ b/tests/fixtures/ecma-version/10/optional-catch-binding/valid-01.result.js @@ -0,0 +1,202 @@ +module.exports = { + "type": "Program", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 15 + } + }, + "range": [ + 0, + 15 + ], + "body": [ + { + "type": "TryStatement", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 15 + } + }, + "range": [ + 0, + 15 + ], + "block": { + "type": "BlockStatement", + "loc": { + "start": { + "line": 1, + "column": 4 + }, + "end": { + "line": 1, + "column": 6 + } + }, + "range": [ + 4, + 6 + ], + "body": [] + }, + "handler": { + "type": "CatchClause", + "loc": { + "start": { + "line": 1, + "column": 7 + }, + "end": { + "line": 1, + "column": 15 + } + }, + "range": [ + 7, + 15 + ], + "param": null, + "body": { + "type": "BlockStatement", + "loc": { + "start": { + "line": 1, + "column": 13 + }, + "end": { + "line": 1, + "column": 15 + } + }, + "range": [ + 13, + 15 + ], + "body": [] + } + }, + "finalizer": null + } + ], + "sourceType": "script", + "tokens": [ + { + "type": "Keyword", + "value": "try", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 3 + } + }, + "range": [ + 0, + 3 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 1, + "column": 4 + }, + "end": { + "line": 1, + "column": 5 + } + }, + "range": [ + 4, + 5 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 1, + "column": 5 + }, + "end": { + "line": 1, + "column": 6 + } + }, + "range": [ + 5, + 6 + ] + }, + { + "type": "Keyword", + "value": "catch", + "loc": { + "start": { + "line": 1, + "column": 7 + }, + "end": { + "line": 1, + "column": 12 + } + }, + "range": [ + 7, + 12 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 1, + "column": 13 + }, + "end": { + "line": 1, + "column": 14 + } + }, + "range": [ + 13, + 14 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 1, + "column": 14 + }, + "end": { + "line": 1, + "column": 15 + } + }, + "range": [ + 14, + 15 + ] + } + ] +}; \ No newline at end of file diff --git a/tests/fixtures/ecma-version/10/optional-catch-binding/valid-01.src.js b/tests/fixtures/ecma-version/10/optional-catch-binding/valid-01.src.js new file mode 100644 index 00000000..0c6986fd --- /dev/null +++ b/tests/fixtures/ecma-version/10/optional-catch-binding/valid-01.src.js @@ -0,0 +1 @@ +try {} catch {} diff --git a/tests/fixtures/ecma-version/10/optional-catch-binding/valid-02.result.js b/tests/fixtures/ecma-version/10/optional-catch-binding/valid-02.result.js new file mode 100644 index 00000000..7439b68e --- /dev/null +++ b/tests/fixtures/ecma-version/10/optional-catch-binding/valid-02.result.js @@ -0,0 +1,418 @@ +module.exports = { + "type": "Program", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 5, + "column": 1 + } + }, + "range": [ + 0, + 37 + ], + "body": [ + { + "type": "TryStatement", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 5, + "column": 1 + } + }, + "range": [ + 0, + 37 + ], + "block": { + "type": "BlockStatement", + "loc": { + "start": { + "line": 1, + "column": 4 + }, + "end": { + "line": 3, + "column": 1 + } + }, + "range": [ + 4, + 17 + ], + "body": [ + { + "type": "ExpressionStatement", + "loc": { + "start": { + "line": 2, + "column": 4 + }, + "end": { + "line": 2, + "column": 9 + } + }, + "range": [ + 10, + 15 + ], + "expression": { + "type": "CallExpression", + "loc": { + "start": { + "line": 2, + "column": 4 + }, + "end": { + "line": 2, + "column": 9 + } + }, + "range": [ + 10, + 15 + ], + "callee": { + "type": "Identifier", + "loc": { + "start": { + "line": 2, + "column": 4 + }, + "end": { + "line": 2, + "column": 7 + } + }, + "range": [ + 10, + 13 + ], + "name": "foo" + }, + "arguments": [] + } + } + ] + }, + "handler": { + "type": "CatchClause", + "loc": { + "start": { + "line": 3, + "column": 2 + }, + "end": { + "line": 5, + "column": 1 + } + }, + "range": [ + 18, + 37 + ], + "param": null, + "body": { + "type": "BlockStatement", + "loc": { + "start": { + "line": 3, + "column": 8 + }, + "end": { + "line": 5, + "column": 1 + } + }, + "range": [ + 24, + 37 + ], + "body": [ + { + "type": "ExpressionStatement", + "loc": { + "start": { + "line": 4, + "column": 4 + }, + "end": { + "line": 4, + "column": 9 + } + }, + "range": [ + 30, + 35 + ], + "expression": { + "type": "CallExpression", + "loc": { + "start": { + "line": 4, + "column": 4 + }, + "end": { + "line": 4, + "column": 9 + } + }, + "range": [ + 30, + 35 + ], + "callee": { + "type": "Identifier", + "loc": { + "start": { + "line": 4, + "column": 4 + }, + "end": { + "line": 4, + "column": 7 + } + }, + "range": [ + 30, + 33 + ], + "name": "bar" + }, + "arguments": [] + } + } + ] + } + }, + "finalizer": null + } + ], + "sourceType": "script", + "tokens": [ + { + "type": "Keyword", + "value": "try", + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 3 + } + }, + "range": [ + 0, + 3 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 1, + "column": 4 + }, + "end": { + "line": 1, + "column": 5 + } + }, + "range": [ + 4, + 5 + ] + }, + { + "type": "Identifier", + "value": "foo", + "loc": { + "start": { + "line": 2, + "column": 4 + }, + "end": { + "line": 2, + "column": 7 + } + }, + "range": [ + 10, + 13 + ] + }, + { + "type": "Punctuator", + "value": "(", + "loc": { + "start": { + "line": 2, + "column": 7 + }, + "end": { + "line": 2, + "column": 8 + } + }, + "range": [ + 13, + 14 + ] + }, + { + "type": "Punctuator", + "value": ")", + "loc": { + "start": { + "line": 2, + "column": 8 + }, + "end": { + "line": 2, + "column": 9 + } + }, + "range": [ + 14, + 15 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 3, + "column": 0 + }, + "end": { + "line": 3, + "column": 1 + } + }, + "range": [ + 16, + 17 + ] + }, + { + "type": "Keyword", + "value": "catch", + "loc": { + "start": { + "line": 3, + "column": 2 + }, + "end": { + "line": 3, + "column": 7 + } + }, + "range": [ + 18, + 23 + ] + }, + { + "type": "Punctuator", + "value": "{", + "loc": { + "start": { + "line": 3, + "column": 8 + }, + "end": { + "line": 3, + "column": 9 + } + }, + "range": [ + 24, + 25 + ] + }, + { + "type": "Identifier", + "value": "bar", + "loc": { + "start": { + "line": 4, + "column": 4 + }, + "end": { + "line": 4, + "column": 7 + } + }, + "range": [ + 30, + 33 + ] + }, + { + "type": "Punctuator", + "value": "(", + "loc": { + "start": { + "line": 4, + "column": 7 + }, + "end": { + "line": 4, + "column": 8 + } + }, + "range": [ + 33, + 34 + ] + }, + { + "type": "Punctuator", + "value": ")", + "loc": { + "start": { + "line": 4, + "column": 8 + }, + "end": { + "line": 4, + "column": 9 + } + }, + "range": [ + 34, + 35 + ] + }, + { + "type": "Punctuator", + "value": "}", + "loc": { + "start": { + "line": 5, + "column": 0 + }, + "end": { + "line": 5, + "column": 1 + } + }, + "range": [ + 36, + 37 + ] + } + ] +}; \ No newline at end of file diff --git a/tests/fixtures/ecma-version/10/optional-catch-binding/valid-02.src.js b/tests/fixtures/ecma-version/10/optional-catch-binding/valid-02.src.js new file mode 100644 index 00000000..872b8ef6 --- /dev/null +++ b/tests/fixtures/ecma-version/10/optional-catch-binding/valid-02.src.js @@ -0,0 +1,5 @@ +try { + foo() +} catch { + bar() +}