Disallow escape sequences in contextual keywords (#9618)
* Disallow escape sequences in async * Disallow escape sequences in get, set and async in class * invalid escape tests * Update whitelist * tests for async in parens * Add test for invalid newline between params and arrow * Move canInsertSemilcolon() into shouldPArseAsyncArrow
This commit is contained in:
1
packages/babel-parser/test/fixtures/core/object/invalid-escape-get/input.js
vendored
Normal file
1
packages/babel-parser/test/fixtures/core/object/invalid-escape-get/input.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
({ ge\u0074 x() {} })
|
||||
3
packages/babel-parser/test/fixtures/core/object/invalid-escape-get/options.json
vendored
Normal file
3
packages/babel-parser/test/fixtures/core/object/invalid-escape-get/options.json
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"throws": "Unexpected token, expected \",\" (1:12)"
|
||||
}
|
||||
1
packages/babel-parser/test/fixtures/core/valid-escape/async/input.js
vendored
Normal file
1
packages/babel-parser/test/fixtures/core/valid-escape/async/input.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
(\u0061sync ())
|
||||
87
packages/babel-parser/test/fixtures/core/valid-escape/async/output.json
vendored
Normal file
87
packages/babel-parser/test/fixtures/core/valid-escape/async/output.json
vendored
Normal file
@@ -0,0 +1,87 @@
|
||||
{
|
||||
"type": "File",
|
||||
"start": 0,
|
||||
"end": 15,
|
||||
"loc": {
|
||||
"start": {
|
||||
"line": 1,
|
||||
"column": 0
|
||||
},
|
||||
"end": {
|
||||
"line": 1,
|
||||
"column": 15
|
||||
}
|
||||
},
|
||||
"program": {
|
||||
"type": "Program",
|
||||
"start": 0,
|
||||
"end": 15,
|
||||
"loc": {
|
||||
"start": {
|
||||
"line": 1,
|
||||
"column": 0
|
||||
},
|
||||
"end": {
|
||||
"line": 1,
|
||||
"column": 15
|
||||
}
|
||||
},
|
||||
"sourceType": "script",
|
||||
"interpreter": null,
|
||||
"body": [
|
||||
{
|
||||
"type": "ExpressionStatement",
|
||||
"start": 0,
|
||||
"end": 15,
|
||||
"loc": {
|
||||
"start": {
|
||||
"line": 1,
|
||||
"column": 0
|
||||
},
|
||||
"end": {
|
||||
"line": 1,
|
||||
"column": 15
|
||||
}
|
||||
},
|
||||
"expression": {
|
||||
"type": "CallExpression",
|
||||
"start": 1,
|
||||
"end": 14,
|
||||
"loc": {
|
||||
"start": {
|
||||
"line": 1,
|
||||
"column": 1
|
||||
},
|
||||
"end": {
|
||||
"line": 1,
|
||||
"column": 14
|
||||
}
|
||||
},
|
||||
"callee": {
|
||||
"type": "Identifier",
|
||||
"start": 1,
|
||||
"end": 11,
|
||||
"loc": {
|
||||
"start": {
|
||||
"line": 1,
|
||||
"column": 1
|
||||
},
|
||||
"end": {
|
||||
"line": 1,
|
||||
"column": 11
|
||||
},
|
||||
"identifierName": "async"
|
||||
},
|
||||
"name": "async"
|
||||
},
|
||||
"arguments": [],
|
||||
"extra": {
|
||||
"parenthesized": true,
|
||||
"parenStart": 0
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"directives": []
|
||||
}
|
||||
}
|
||||
1
packages/babel-parser/test/fixtures/es2015/class/invalid-escape-get/input.js
vendored
Normal file
1
packages/babel-parser/test/fixtures/es2015/class/invalid-escape-get/input.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
class X { ge\u0074 x() {} }
|
||||
3
packages/babel-parser/test/fixtures/es2015/class/invalid-escape-get/options.json
vendored
Normal file
3
packages/babel-parser/test/fixtures/es2015/class/invalid-escape-get/options.json
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"throws": "Unexpected token (1:19)"
|
||||
}
|
||||
1
packages/babel-parser/test/fixtures/es2015/class/invalid-escape-set/input.js
vendored
Normal file
1
packages/babel-parser/test/fixtures/es2015/class/invalid-escape-set/input.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
class X { se\u0074 x(value) {} }
|
||||
3
packages/babel-parser/test/fixtures/es2015/class/invalid-escape-set/options.json
vendored
Normal file
3
packages/babel-parser/test/fixtures/es2015/class/invalid-escape-set/options.json
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"throws": "Unexpected token (1:19)"
|
||||
}
|
||||
1
packages/babel-parser/test/fixtures/es2015/class/invalid-escape-static/input.js
vendored
Normal file
1
packages/babel-parser/test/fixtures/es2015/class/invalid-escape-static/input.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
class X { st\u0061tic y() {} }
|
||||
3
packages/babel-parser/test/fixtures/es2015/class/invalid-escape-static/options.json
vendored
Normal file
3
packages/babel-parser/test/fixtures/es2015/class/invalid-escape-static/options.json
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"throws": "Unexpected token (1:22)"
|
||||
}
|
||||
1
packages/babel-parser/test/fixtures/es2015/for-of/invalid-escape-of/input.js
vendored
Normal file
1
packages/babel-parser/test/fixtures/es2015/for-of/invalid-escape-of/input.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
for (x \u006ff y) {}
|
||||
3
packages/babel-parser/test/fixtures/es2015/for-of/invalid-escape-of/options.json
vendored
Normal file
3
packages/babel-parser/test/fixtures/es2015/for-of/invalid-escape-of/options.json
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"throws": "Unexpected token, expected \";\" (1:7)"
|
||||
}
|
||||
1
packages/babel-parser/test/fixtures/es2015/generators/invalid-escape-yield/input.js
vendored
Normal file
1
packages/babel-parser/test/fixtures/es2015/generators/invalid-escape-yield/input.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
(function* () { y\u0069eld 10 })
|
||||
3
packages/babel-parser/test/fixtures/es2015/generators/invalid-escape-yield/options.json
vendored
Normal file
3
packages/babel-parser/test/fixtures/es2015/generators/invalid-escape-yield/options.json
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"throws": "Can not use 'yield' as identifier inside a generator (1:16)"
|
||||
}
|
||||
1
packages/babel-parser/test/fixtures/es2015/let/invalid-escape/input.js
vendored
Normal file
1
packages/babel-parser/test/fixtures/es2015/let/invalid-escape/input.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
le\u0074 x = 5
|
||||
3
packages/babel-parser/test/fixtures/es2015/let/invalid-escape/options.json
vendored
Normal file
3
packages/babel-parser/test/fixtures/es2015/let/invalid-escape/options.json
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"throws": "Unexpected token, expected \";\" (1:9)"
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
function f() { new.ta\u0072get; }
|
||||
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"throws": "The only valid meta property for new is new.target (1:19)"
|
||||
}
|
||||
1
packages/babel-parser/test/fixtures/es2015/modules/invalid-escape-export-as/input.js
vendored
Normal file
1
packages/babel-parser/test/fixtures/es2015/modules/invalid-escape-export-as/input.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
export { X \u0061s Y }
|
||||
4
packages/babel-parser/test/fixtures/es2015/modules/invalid-escape-export-as/options.json
vendored
Normal file
4
packages/babel-parser/test/fixtures/es2015/modules/invalid-escape-export-as/options.json
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"sourceType": "module",
|
||||
"throws": "Unexpected token, expected \",\" (1:11)"
|
||||
}
|
||||
1
packages/babel-parser/test/fixtures/es2015/modules/invalid-escape-import-from/input.js
vendored
Normal file
1
packages/babel-parser/test/fixtures/es2015/modules/invalid-escape-import-from/input.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
import X fro\u006d 'x'
|
||||
4
packages/babel-parser/test/fixtures/es2015/modules/invalid-escape-import-from/options.json
vendored
Normal file
4
packages/babel-parser/test/fixtures/es2015/modules/invalid-escape-import-from/options.json
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"sourceType": "module",
|
||||
"throws": "Unexpected token (1:9)"
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
class X { \u0061sync x() { await x } }
|
||||
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"throws": "Unexpected token (1:21)"
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
({ \u0061sync x() { await x } })
|
||||
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"throws": "Unexpected token, expected \",\" (1:14)"
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
class X { static \u0061sync x() { await x } }
|
||||
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"throws": "Unexpected token (1:28)"
|
||||
}
|
||||
1
packages/babel-parser/test/fixtures/es2017/async-functions/invalid-escape-await/input.js
vendored
Normal file
1
packages/babel-parser/test/fixtures/es2017/async-functions/invalid-escape-await/input.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
(async function() { aw\u0061it x })
|
||||
3
packages/babel-parser/test/fixtures/es2017/async-functions/invalid-escape-await/options.json
vendored
Normal file
3
packages/babel-parser/test/fixtures/es2017/async-functions/invalid-escape-await/options.json
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"throws": "Can not use 'await' as identifier inside an async function (1:20)"
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
export \u0061sync function y() { await x }
|
||||
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"throws": "Unexpected token, expected \"{\" (1:7)"
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
export default \u0061sync function y() { await x }
|
||||
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"throws": "Unexpected token, expected \";\" (1:26)"
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
(\u0061sync x => { await x })
|
||||
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"throws": "Unexpected token, expected \",\" (1:12)"
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
\u0061sync x => { await x }
|
||||
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"throws": "Unexpected token, expected \";\" (1:11)"
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
(\u0061sync function() { await x })
|
||||
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"throws": "Unexpected token, expected \",\" (1:12)"
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
\u0061sync function() { await x }
|
||||
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"throws": "Unexpected token, expected \";\" (1:11)"
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
async (x)
|
||||
=> {}
|
||||
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"throws": "Unexpected token (2:0)"
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
(async)(a) => {}
|
||||
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"throws": "Unexpected token, expected \";\" (1:11)"
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
(async) function x (a) {}
|
||||
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"throws": "Unexpected token, expected \";\" (1:8)"
|
||||
}
|
||||
2
packages/babel-parser/test/fixtures/flow/regression/arrow-function-with-newline/input.js
vendored
Normal file
2
packages/babel-parser/test/fixtures/flow/regression/arrow-function-with-newline/input.js
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
async (f)
|
||||
: t => { }
|
||||
152
packages/babel-parser/test/fixtures/flow/regression/arrow-function-with-newline/output.json
vendored
Normal file
152
packages/babel-parser/test/fixtures/flow/regression/arrow-function-with-newline/output.json
vendored
Normal file
@@ -0,0 +1,152 @@
|
||||
{
|
||||
"type": "File",
|
||||
"start": 0,
|
||||
"end": 20,
|
||||
"loc": {
|
||||
"start": {
|
||||
"line": 1,
|
||||
"column": 0
|
||||
},
|
||||
"end": {
|
||||
"line": 2,
|
||||
"column": 10
|
||||
}
|
||||
},
|
||||
"program": {
|
||||
"type": "Program",
|
||||
"start": 0,
|
||||
"end": 20,
|
||||
"loc": {
|
||||
"start": {
|
||||
"line": 1,
|
||||
"column": 0
|
||||
},
|
||||
"end": {
|
||||
"line": 2,
|
||||
"column": 10
|
||||
}
|
||||
},
|
||||
"sourceType": "module",
|
||||
"interpreter": null,
|
||||
"body": [
|
||||
{
|
||||
"type": "ExpressionStatement",
|
||||
"start": 0,
|
||||
"end": 20,
|
||||
"loc": {
|
||||
"start": {
|
||||
"line": 1,
|
||||
"column": 0
|
||||
},
|
||||
"end": {
|
||||
"line": 2,
|
||||
"column": 10
|
||||
}
|
||||
},
|
||||
"expression": {
|
||||
"type": "ArrowFunctionExpression",
|
||||
"start": 0,
|
||||
"end": 20,
|
||||
"loc": {
|
||||
"start": {
|
||||
"line": 1,
|
||||
"column": 0
|
||||
},
|
||||
"end": {
|
||||
"line": 2,
|
||||
"column": 10
|
||||
}
|
||||
},
|
||||
"returnType": {
|
||||
"type": "TypeAnnotation",
|
||||
"start": 10,
|
||||
"end": 13,
|
||||
"loc": {
|
||||
"start": {
|
||||
"line": 2,
|
||||
"column": 0
|
||||
},
|
||||
"end": {
|
||||
"line": 2,
|
||||
"column": 3
|
||||
}
|
||||
},
|
||||
"typeAnnotation": {
|
||||
"type": "GenericTypeAnnotation",
|
||||
"start": 12,
|
||||
"end": 13,
|
||||
"loc": {
|
||||
"start": {
|
||||
"line": 2,
|
||||
"column": 2
|
||||
},
|
||||
"end": {
|
||||
"line": 2,
|
||||
"column": 3
|
||||
}
|
||||
},
|
||||
"typeParameters": null,
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"start": 12,
|
||||
"end": 13,
|
||||
"loc": {
|
||||
"start": {
|
||||
"line": 2,
|
||||
"column": 2
|
||||
},
|
||||
"end": {
|
||||
"line": 2,
|
||||
"column": 3
|
||||
},
|
||||
"identifierName": "t"
|
||||
},
|
||||
"name": "t"
|
||||
}
|
||||
}
|
||||
},
|
||||
"id": null,
|
||||
"generator": false,
|
||||
"async": true,
|
||||
"params": [
|
||||
{
|
||||
"type": "Identifier",
|
||||
"start": 7,
|
||||
"end": 8,
|
||||
"loc": {
|
||||
"start": {
|
||||
"line": 1,
|
||||
"column": 7
|
||||
},
|
||||
"end": {
|
||||
"line": 1,
|
||||
"column": 8
|
||||
},
|
||||
"identifierName": "f"
|
||||
},
|
||||
"name": "f"
|
||||
}
|
||||
],
|
||||
"body": {
|
||||
"type": "BlockStatement",
|
||||
"start": 17,
|
||||
"end": 20,
|
||||
"loc": {
|
||||
"start": {
|
||||
"line": 2,
|
||||
"column": 7
|
||||
},
|
||||
"end": {
|
||||
"line": 2,
|
||||
"column": 10
|
||||
}
|
||||
},
|
||||
"body": [],
|
||||
"directives": []
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"directives": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
async (f)
|
||||
: t => { }
|
||||
@@ -0,0 +1,151 @@
|
||||
{
|
||||
"type": "File",
|
||||
"start": 0,
|
||||
"end": 20,
|
||||
"loc": {
|
||||
"start": {
|
||||
"line": 1,
|
||||
"column": 0
|
||||
},
|
||||
"end": {
|
||||
"line": 2,
|
||||
"column": 10
|
||||
}
|
||||
},
|
||||
"program": {
|
||||
"type": "Program",
|
||||
"start": 0,
|
||||
"end": 20,
|
||||
"loc": {
|
||||
"start": {
|
||||
"line": 1,
|
||||
"column": 0
|
||||
},
|
||||
"end": {
|
||||
"line": 2,
|
||||
"column": 10
|
||||
}
|
||||
},
|
||||
"sourceType": "module",
|
||||
"interpreter": null,
|
||||
"body": [
|
||||
{
|
||||
"type": "ExpressionStatement",
|
||||
"start": 0,
|
||||
"end": 20,
|
||||
"loc": {
|
||||
"start": {
|
||||
"line": 1,
|
||||
"column": 0
|
||||
},
|
||||
"end": {
|
||||
"line": 2,
|
||||
"column": 10
|
||||
}
|
||||
},
|
||||
"expression": {
|
||||
"type": "ArrowFunctionExpression",
|
||||
"start": 0,
|
||||
"end": 20,
|
||||
"loc": {
|
||||
"start": {
|
||||
"line": 1,
|
||||
"column": 0
|
||||
},
|
||||
"end": {
|
||||
"line": 2,
|
||||
"column": 10
|
||||
}
|
||||
},
|
||||
"returnType": {
|
||||
"type": "TSTypeAnnotation",
|
||||
"start": 10,
|
||||
"end": 13,
|
||||
"loc": {
|
||||
"start": {
|
||||
"line": 2,
|
||||
"column": 0
|
||||
},
|
||||
"end": {
|
||||
"line": 2,
|
||||
"column": 3
|
||||
}
|
||||
},
|
||||
"typeAnnotation": {
|
||||
"type": "TSTypeReference",
|
||||
"start": 12,
|
||||
"end": 13,
|
||||
"loc": {
|
||||
"start": {
|
||||
"line": 2,
|
||||
"column": 2
|
||||
},
|
||||
"end": {
|
||||
"line": 2,
|
||||
"column": 3
|
||||
}
|
||||
},
|
||||
"typeName": {
|
||||
"type": "Identifier",
|
||||
"start": 12,
|
||||
"end": 13,
|
||||
"loc": {
|
||||
"start": {
|
||||
"line": 2,
|
||||
"column": 2
|
||||
},
|
||||
"end": {
|
||||
"line": 2,
|
||||
"column": 3
|
||||
},
|
||||
"identifierName": "t"
|
||||
},
|
||||
"name": "t"
|
||||
}
|
||||
}
|
||||
},
|
||||
"id": null,
|
||||
"generator": false,
|
||||
"async": true,
|
||||
"params": [
|
||||
{
|
||||
"type": "Identifier",
|
||||
"start": 7,
|
||||
"end": 8,
|
||||
"loc": {
|
||||
"start": {
|
||||
"line": 1,
|
||||
"column": 7
|
||||
},
|
||||
"end": {
|
||||
"line": 1,
|
||||
"column": 8
|
||||
},
|
||||
"identifierName": "f"
|
||||
},
|
||||
"name": "f"
|
||||
}
|
||||
],
|
||||
"body": {
|
||||
"type": "BlockStatement",
|
||||
"start": 17,
|
||||
"end": 20,
|
||||
"loc": {
|
||||
"start": {
|
||||
"line": 2,
|
||||
"column": 7
|
||||
},
|
||||
"end": {
|
||||
"line": 2,
|
||||
"column": 10
|
||||
}
|
||||
},
|
||||
"body": [],
|
||||
"directives": []
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"directives": []
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user