Improve JSON parse error (#14398)

This commit is contained in:
fisker Cheung authored and GitHub committed 2023-02-24 09:20:03 +08:00
1 parent 745e0d5223
commit 5f68f86621
3 files changed
+237

No files matched your search

+10
View File
@@ -16,6 +16,16 @@ function createJsonParse(options = {}) {
ranges: true,
});
} catch (error) {
if (
error?.reasonCode === "MissingPlugin" ||
error?.reasonCode === "MissingOneOfPlugins"
) {
throw createBabelParseError({
message: "Unexpected token",
loc: error.loc,
});
}
throw createBabelParseError(error);
}
@@ -6,6 +6,12 @@ exports[`snippet: #0 [json] format 1`] = `
| ^^^"
`;
exports[`snippet: #0 [json] format 2`] = `
"A 'set' accessor must have exactly one formal parameter. (1:9)
> 1 | [class {set foo() {}}]
| ^"
`;
exports[`snippet: #0 [json-stringify] format 1`] = `
"Shorthand property is not allowed in JSON. (1:2)
> 1 | {foo}
@@ -24,6 +30,12 @@ exports[`snippet: #1 [json] format 1`] = `
| ^^^^^"
`;
exports[`snippet: #1 [json] format 2`] = `
"Private name #bar is not defined. (1:21)
> 1 | [class {foo() {this.#bar}}]
| ^"
`;
exports[`snippet: #1 [json-stringify] format 1`] = `
"Computed key is not allowed in JSON. (1:3)
> 1 | {["foo"]:"bar"}
@@ -42,6 +54,12 @@ exports[`snippet: #2 [json] format 1`] = `
| ^^"
`;
exports[`snippet: #2 [json] format 2`] = `
"'await' is only allowed within async functions and at the top levels of modules. (1:14)
> 1 | [function(){ await 1 }]
| ^"
`;
exports[`snippet: #2 [json-stringify] format 1`] = `
"Operator '~' is not allowed in JSON. (1:9)
> 1 | {"foo": ~1}
@@ -60,6 +78,12 @@ exports[`snippet: #3 [json] format 1`] = `
| ^^^^^^^^^^^^^^"
`;
exports[`snippet: #3 [json] format 2`] = `
"Unexpected token (1:2)
> 1 | [do {}]
| ^"
`;
exports[`snippet: #3 [json-stringify] format 1`] = `
"'LogicalExpression' is not allowed in JSON. (1:9)
> 1 | {"foo": false || "bar"}
@@ -78,6 +102,12 @@ exports[`snippet: #4 [json] format 1`] = `
| ^^^^^^^^"
`;
exports[`snippet: #4 [json] format 2`] = `
"'import' and 'export' may only appear at the top level. (1:14)
> 1 | [function() {export a from 'a'}]
| ^"
`;
exports[`snippet: #4 [json-stringify] format 1`] = `
"'ArrowFunctionExpression' is not allowed in JSON. (1:9)
> 1 | {"foo": () => {}}
@@ -96,6 +126,12 @@ exports[`snippet: #5 [json] format 1`] = `
| ^"
`;
exports[`snippet: #5 [json] format 2`] = `
"Unexpected token (1:1)
> 1 | export a from 'a'
| ^"
`;
exports[`snippet: #5 [json-stringify] format 1`] = `
"Expecting Unicode escape sequence \\uXXXX. (1:10)
> 1 | packages\\the-hub\\cypress\\fixtures\\gridConfiguration.json
@@ -114,6 +150,12 @@ exports[`snippet: #6 [json] format 1`] = `
| ^^^"
`;
exports[`snippet: #6 [json] format 2`] = `
"Unexpected token, expected "," (1:3)
> 1 | [a::b]
| ^"
`;
exports[`snippet: #6 [json-stringify] format 1`] = `
"'BinaryExpression' is not allowed in JSON. (1:1)
> 1 | 1+2
@@ -132,6 +174,12 @@ exports[`snippet: #7 [json] format 1`] = `
| ^^^^^^^^"
`;
exports[`snippet: #7 [json] format 2`] = `
"Unexpected token (1:24)
> 1 | [function*() {function.sent}]
| ^"
`;
exports[`snippet: #7 [json-stringify] format 1`] = `
"Shorthand property is not allowed in JSON. (1:2)
> 1 | {Infinity}
@@ -150,6 +198,12 @@ exports[`snippet: #8 [json] format 1`] = `
| ^^^"
`;
exports[`snippet: #8 [json] format 2`] = `
"Unexpected token (1:2)
> 1 | [throw {}]
| ^"
`;
exports[`snippet: #8 [json-stringify] format 1`] = `
"Computed key is not allowed in JSON. (1:3)
> 1 | {[key]: 1}
@@ -168,6 +222,12 @@ exports[`snippet: #9 [json] format 1`] = `
| ^^^^^"
`;
exports[`snippet: #9 [json] format 2`] = `
"Unexpected token (1:6)
> 1 | [foo(?)]
| ^"
`;
exports[`snippet: #9 [json-stringify] format 1`] = `
"Computed key is not allowed in JSON. (1:3)
> 1 | {[key()]: 1}
@@ -186,6 +246,12 @@ exports[`snippet: #10 [json] format 1`] = `
| ^^^^^^^^^^^^^^^^"
`;
exports[`snippet: #10 [json] format 2`] = `
"Unexpected token (1:2)
> 1 | [@decorator class {}]
| ^"
`;
exports[`snippet: #10 [json-stringify] format 1`] = `
"Computed key is not allowed in JSON. (1:3)
> 1 | {['CallExpression']: 1}
@@ -204,6 +270,12 @@ exports[`snippet: #11 [json] format 1`] = `
| ^^^^^^^^^^^^^^^"
`;
exports[`snippet: #11 [json] format 2`] = `
"Unexpected token (1:28)
> 1 | [import('a', {type:'json'})]
| ^"
`;
exports[`snippet: #11 [json-stringify] format 1`] = `
"Computed key is not allowed in JSON. (1:3)
> 1 | {['StringLiteral']: 1}
@@ -222,6 +294,12 @@ exports[`snippet: #12 [json] format 1`] = `
| ^^^^^^^^"
`;
exports[`snippet: #12 [json] format 2`] = `
"Unexpected token (1:3)
> 1 | [1m]
| ^"
`;
exports[`snippet: #12 [json-stringify] format 1`] = `
"Computed key is not allowed in JSON. (1:3)
> 1 | {['string']: 1}
@@ -240,6 +318,12 @@ exports[`snippet: #13 [json] format 1`] = `
| ^"
`;
exports[`snippet: #13 [json] format 2`] = `
"Unexpected token (1:2)
> 1 | [module {}]
| ^"
`;
exports[`snippet: #13 [json-stringify] format 1`] = `
"Computed key is not allowed in JSON. (1:3)
> 1 | {[1]: 1}
@@ -258,6 +342,12 @@ exports[`snippet: #14 [json] format 1`] = `
| ^^^^^^^^"
`;
exports[`snippet: #14 [json] format 2`] = `
"Unexpected token (1:8)
> 1 | [async do {}]
| ^"
`;
exports[`snippet: #14 [json-stringify] format 1`] = `
"Computed key is not allowed in JSON. (1:3)
> 1 | {[Infinity]: 1}
@@ -276,6 +366,12 @@ exports[`snippet: #15 [json] format 1`] = `
| ^^^^^^^^^"
`;
exports[`snippet: #15 [json] format 2`] = `
"Unexpected token (1:6)
> 1 | [/a/v]
| ^"
`;
exports[`snippet: #15 [json-stringify] format 1`] = `
"Computed key is not allowed in JSON. (1:3)
> 1 | {[-Infinity]: 1}
@@ -294,6 +390,12 @@ exports[`snippet: #16 [json] format 1`] = `
| ^^^^^^^^^^^^^^"
`;
exports[`snippet: #16 [json] format 2`] = `
"Unexpected token (1:28)
> 1 | [class {#foo;bar() {const {#foo: foo} = this;}}]
| ^"
`;
exports[`snippet: #16 [json-stringify] format 1`] = `
"Computed key is not allowed in JSON. (1:3)
> 1 | {[{key: 'value'}]: 1}
@@ -312,6 +414,12 @@ exports[`snippet: #17 [json] format 1`] = `
| ^^"
`;
exports[`snippet: #17 [json] format 2`] = `
"Unexpected token (1:18)
> 1 | [class {accessor foo = 1}]
| ^"
`;
exports[`snippet: #17 [json-stringify] format 1`] = `
"Computed key is not allowed in JSON. (1:3)
> 1 | {[[]]: 1}
@@ -330,6 +438,12 @@ exports[`snippet: #18 [json] format 1`] = `
| ^^^^"
`;
exports[`snippet: #18 [json] format 2`] = `
"Unexpected token (1:34)
> 1 | [import('a', {reflect: 'module'})]
| ^"
`;
exports[`snippet: #18 [json-stringify] format 1`] = `
"Computed key is not allowed in JSON. (1:3)
> 1 | {[null]: 1}
@@ -348,6 +462,12 @@ exports[`snippet: #19 [json] format 1`] = `
| ^^^^^"
`;
exports[`snippet: #19 [json] format 2`] = `
"\`import\` can only be used in \`import()\` or \`import.meta\`. (1:1)
> 1 | import module a from 'a'
| ^"
`;
exports[`snippet: #19 [json-stringify] format 1`] = `
"Operator '+' before 'CallExpression' is not allowed in JSON. (1:8)
> 1 | {key: +foo()}
@@ -366,6 +486,12 @@ exports[`snippet: #20 [json] format 1`] = `
| ^^^^^^^^^^"
`;
exports[`snippet: #20 [json] format 2`] = `
"Unexpected token (1:16)
> 1 | [function() { {using a = b} }]
| ^"
`;
exports[`snippet: #20 [json-stringify] format 1`] = `
"Operator 'void' is not allowed in JSON. (1:7)
> 1 | {key: void foo()}
@@ -385,6 +511,12 @@ exports[`snippet: #21 [json] format 1`] = `
2 | {}"
`;
exports[`snippet: #21 [json] format 2`] = `
"Unexpected token, expected "," (1:8)
> 1 | {using a = b}
| ^"
`;
exports[`snippet: #21 [json-stringify] format 1`] = `
"Unexpected token (1:1)
> 1 | #!/usr/bin/env node
@@ -406,6 +538,12 @@ exports[`snippet: #22 [json] format 1`] = `
| ^"
`;
exports[`snippet: #22 [json] format 2`] = `
"Unexpected token (1:2)
> 1 | [#[]]
| ^"
`;
exports[`snippet: #22 [json-stringify] format 1`] = `
"Unexpected token (2:1)
1 | "use strict"
@@ -426,6 +564,12 @@ exports[`snippet: #23 [json] format 1`] = `
| ^"
`;
exports[`snippet: #23 [json] format 2`] = `
"Unexpected token (1:2)
> 1 | [#{}]
| ^"
`;
exports[`snippet: #23 [json-stringify] format 1`] = `
"Unexpected token (1:14)
> 1 | /* comment */
@@ -444,6 +588,12 @@ exports[`snippet: #24 [json] format 1`] = `
| ^"
`;
exports[`snippet: #24 [json] format 2`] = `
"'BinaryExpression' is not allowed in JSON. (1:2)
> 1 | [foo%bar()]
| ^^^^^^^^^"
`;
exports[`snippet: #24 [json-stringify] format 1`] = `
"Unexpected token (1:11)
> 1 | // comment
@@ -462,6 +612,12 @@ exports[`snippet: #25 [json] format 1`] = `
| ^"
`;
exports[`snippet: #25 [json] format 2`] = `
"Unexpected token (1:8)
> 1 | ['foo' |> bar]
| ^"
`;
exports[`snippet: #25 [json-stringify] format 1`] = `
"'TemplateLiteral' with expression is not allowed in JSON. (1:7)
> 1 | \`foo\${1}bar\`
@@ -480,6 +636,12 @@ exports[`snippet: #26 [json] format 1`] = `
| ^^"
`;
exports[`snippet: #26 [json] format 2`] = `
"Unexpected token (1:8)
> 1 | ['foo' |> bar(%)]
| ^"
`;
exports[`snippet: #26 [json-stringify] format 1`] = `
"Operator '-' before 'UnaryExpression' is not allowed in JSON. (1:2)
> 1 | -+1
@@ -498,6 +660,12 @@ exports[`snippet: #27 [json] format 1`] = `
| ^^^^^^^^^"
`;
exports[`snippet: #27 [json] format 2`] = `
"Unexpected token (1:2)
> 1 | [<foo></foo>]
| ^"
`;
exports[`snippet: #27 [json-stringify] format 1`] = `
"Operator '-' before 'UnaryExpression' is not allowed in JSON. (1:2)
> 1 | -+Infinity
@@ -42,3 +42,62 @@ run_spec(
},
["json", "json5", "json-stringify"]
);
run_spec(
{
importMeta: import.meta,
snippets: [
// Invalid JS expressions
"[class {set foo() {}}]",
"[class {foo() {this.#bar}}]",
"[function(){ await 1 }]",
// Should not mention babel plugin in error message
// plugin `doExpressions`
"[do {}]",
// plugin `exportDefaultFrom`
"[function() {export a from 'a'}]",
"export a from 'a'",
// plugin `functionBind`
"[a::b]",
// plugin `functionSent`
"[function*() {function.sent}]",
// plugin `throwExpressions`
"[throw {}]",
// plugin `partialApplication`
"[foo(?)]",
// plugin `decorators`
"[@decorator class {}]",
// plugin `importAssertions`
"[import('a', {type:'json'})]",
// plugin `decimal`
"[1m]",
// plugin `moduleBlocks`
"[module {}]",
// plugin `asyncDoExpressions`
"[async do {}]",
// plugin `regexpUnicodeSets`
"[/a/v]",
// plugin `destructuringPrivate`
"[class {#foo;bar() {const {#foo: foo} = this;}}]",
// plugin `decoratorAutoAccessors`
"[class {accessor foo = 1}]",
// plugin `importReflection`
"[import('a', {reflect: 'module'})]",
"import module a from 'a'",
// plugin `explicitResourceManagement`
"[function() { {using a = b} }]",
"{using a = b}",
// plugin `recordAndTuple`
"[#[]]",
"[#{}]",
// plugin `v8intrinsic`
"[foo%bar()]",
// plugin `pipelineOperator`
"['foo' |> bar]",
"['foo' |> bar(%)]",
// plugin `jsx`
"[<foo></foo>]",
],
},
["json"]
);