From e8cdd5ce48fa0a2f6f93e6b3ed7c337d042ab45d Mon Sep 17 00:00:00 2001 From: fisker Cheung Date: Mon, 13 Mar 2023 08:51:12 +0800 Subject: [PATCH] fix(typescript-estree): fix error handling on `ImportExpression` (#6587) --- .../fixtures/_error_/extra-arguments/fixture.ts | 5 +++++ .../extra-arguments/snapshots/1-TSESTree-Error.shot | 11 +++++++++++ .../extra-arguments/snapshots/2-Babel-Error.shot | 3 +++ .../extra-arguments/snapshots/3-Alignment-Error.shot | 3 +++ .../fixtures/_error_/no-arguments/fixture.ts | 1 + .../no-arguments/snapshots/1-TSESTree-Error.shot | 8 ++++++++ .../_error_/no-arguments/snapshots/2-Babel-Error.shot | 3 +++ .../no-arguments/snapshots/3-Alignment-Error.shot | 3 +++ packages/typescript-estree/src/convert.ts | 2 +- 9 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 packages/ast-spec/src/expression/ImportExpression/fixtures/_error_/extra-arguments/fixture.ts create mode 100644 packages/ast-spec/src/expression/ImportExpression/fixtures/_error_/extra-arguments/snapshots/1-TSESTree-Error.shot create mode 100644 packages/ast-spec/src/expression/ImportExpression/fixtures/_error_/extra-arguments/snapshots/2-Babel-Error.shot create mode 100644 packages/ast-spec/src/expression/ImportExpression/fixtures/_error_/extra-arguments/snapshots/3-Alignment-Error.shot create mode 100644 packages/ast-spec/src/expression/ImportExpression/fixtures/_error_/no-arguments/fixture.ts create mode 100644 packages/ast-spec/src/expression/ImportExpression/fixtures/_error_/no-arguments/snapshots/1-TSESTree-Error.shot create mode 100644 packages/ast-spec/src/expression/ImportExpression/fixtures/_error_/no-arguments/snapshots/2-Babel-Error.shot create mode 100644 packages/ast-spec/src/expression/ImportExpression/fixtures/_error_/no-arguments/snapshots/3-Alignment-Error.shot diff --git a/packages/ast-spec/src/expression/ImportExpression/fixtures/_error_/extra-arguments/fixture.ts b/packages/ast-spec/src/expression/ImportExpression/fixtures/_error_/extra-arguments/fixture.ts new file mode 100644 index 00000000000..b91b27f0f8f --- /dev/null +++ b/packages/ast-spec/src/expression/ImportExpression/fixtures/_error_/extra-arguments/fixture.ts @@ -0,0 +1,5 @@ +import( + "./source.json", + {assert: {type: "json"}}, + extraArgument +); diff --git a/packages/ast-spec/src/expression/ImportExpression/fixtures/_error_/extra-arguments/snapshots/1-TSESTree-Error.shot b/packages/ast-spec/src/expression/ImportExpression/fixtures/_error_/extra-arguments/snapshots/1-TSESTree-Error.shot new file mode 100644 index 00000000000..527a5ff18c4 --- /dev/null +++ b/packages/ast-spec/src/expression/ImportExpression/fixtures/_error_/extra-arguments/snapshots/1-TSESTree-Error.shot @@ -0,0 +1,11 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`AST Fixtures expression ImportExpression _error_ extra-arguments TSESTree - Error 1`] = ` +"TSError + 2 | \\"./source.json\\", + 3 | {assert: {type: \\"json\\"}}, +> 4 | extraArgument + | ^^^^^^^^^^^^^ Dynamic import requires exactly one or two arguments. + 5 | ); + 6 |" +`; diff --git a/packages/ast-spec/src/expression/ImportExpression/fixtures/_error_/extra-arguments/snapshots/2-Babel-Error.shot b/packages/ast-spec/src/expression/ImportExpression/fixtures/_error_/extra-arguments/snapshots/2-Babel-Error.shot new file mode 100644 index 00000000000..3cdc1c9783c --- /dev/null +++ b/packages/ast-spec/src/expression/ImportExpression/fixtures/_error_/extra-arguments/snapshots/2-Babel-Error.shot @@ -0,0 +1,3 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`AST Fixtures expression ImportExpression _error_ extra-arguments Babel - Error 1`] = `[SyntaxError: \`import()\` requires exactly one or two arguments. (1:0)]`; diff --git a/packages/ast-spec/src/expression/ImportExpression/fixtures/_error_/extra-arguments/snapshots/3-Alignment-Error.shot b/packages/ast-spec/src/expression/ImportExpression/fixtures/_error_/extra-arguments/snapshots/3-Alignment-Error.shot new file mode 100644 index 00000000000..69fd583b79f --- /dev/null +++ b/packages/ast-spec/src/expression/ImportExpression/fixtures/_error_/extra-arguments/snapshots/3-Alignment-Error.shot @@ -0,0 +1,3 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`AST Fixtures expression ImportExpression _error_ extra-arguments Error Alignment 1`] = `"Both errored"`; diff --git a/packages/ast-spec/src/expression/ImportExpression/fixtures/_error_/no-arguments/fixture.ts b/packages/ast-spec/src/expression/ImportExpression/fixtures/_error_/no-arguments/fixture.ts new file mode 100644 index 00000000000..6f375fea965 --- /dev/null +++ b/packages/ast-spec/src/expression/ImportExpression/fixtures/_error_/no-arguments/fixture.ts @@ -0,0 +1 @@ +import(); diff --git a/packages/ast-spec/src/expression/ImportExpression/fixtures/_error_/no-arguments/snapshots/1-TSESTree-Error.shot b/packages/ast-spec/src/expression/ImportExpression/fixtures/_error_/no-arguments/snapshots/1-TSESTree-Error.shot new file mode 100644 index 00000000000..b76c8be6e53 --- /dev/null +++ b/packages/ast-spec/src/expression/ImportExpression/fixtures/_error_/no-arguments/snapshots/1-TSESTree-Error.shot @@ -0,0 +1,8 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`AST Fixtures expression ImportExpression _error_ no-arguments TSESTree - Error 1`] = ` +"TSError +> 1 | import(); + | ^^^^^^^^ Dynamic import requires exactly one or two arguments. + 2 |" +`; diff --git a/packages/ast-spec/src/expression/ImportExpression/fixtures/_error_/no-arguments/snapshots/2-Babel-Error.shot b/packages/ast-spec/src/expression/ImportExpression/fixtures/_error_/no-arguments/snapshots/2-Babel-Error.shot new file mode 100644 index 00000000000..8b27d717875 --- /dev/null +++ b/packages/ast-spec/src/expression/ImportExpression/fixtures/_error_/no-arguments/snapshots/2-Babel-Error.shot @@ -0,0 +1,3 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`AST Fixtures expression ImportExpression _error_ no-arguments Babel - Error 1`] = `[SyntaxError: \`import()\` requires exactly one or two arguments. (1:0)]`; diff --git a/packages/ast-spec/src/expression/ImportExpression/fixtures/_error_/no-arguments/snapshots/3-Alignment-Error.shot b/packages/ast-spec/src/expression/ImportExpression/fixtures/_error_/no-arguments/snapshots/3-Alignment-Error.shot new file mode 100644 index 00000000000..a767b5a6468 --- /dev/null +++ b/packages/ast-spec/src/expression/ImportExpression/fixtures/_error_/no-arguments/snapshots/3-Alignment-Error.shot @@ -0,0 +1,3 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`AST Fixtures expression ImportExpression _error_ no-arguments Error Alignment 1`] = `"Both errored"`; diff --git a/packages/typescript-estree/src/convert.ts b/packages/typescript-estree/src/convert.ts index d9b05c86960..53ffcabdbc1 100644 --- a/packages/typescript-estree/src/convert.ts +++ b/packages/typescript-estree/src/convert.ts @@ -2059,7 +2059,7 @@ export class Converter { if (node.expression.kind === SyntaxKind.ImportKeyword) { if (node.arguments.length !== 1 && node.arguments.length !== 2) { this.#throwUnlessAllowInvalidAST( - node.arguments[0], + node.arguments[2] ?? node, 'Dynamic import requires exactly one or two arguments.', ); }