From bbf381517c12f9bfa2485ec9f36d2d416dc4f393 Mon Sep 17 00:00:00 2001 From: fisker Date: Fri, 3 Mar 2023 09:58:05 +0800 Subject: [PATCH] fix: throw error on invalid `ThrowStatement` --- .../fixtures/_error_/missing-argument-2/fixture.ts | 3 +++ .../snapshots/1-TSESTree-Error.shot | 10 ++++++++++ .../missing-argument-2/snapshots/2-Babel-Error.shot | 3 +++ .../snapshots/3-Alignment-Error.shot | 3 +++ .../fixtures/_error_/missing-argument/fixture.ts | 1 + .../snapshots/1-TSESTree-Error.shot | 8 ++++++++ .../missing-argument/snapshots/2-Babel-Error.shot | 3 +++ .../snapshots/3-Alignment-Error.shot | 3 +++ packages/typescript-estree/src/convert.ts | 13 +++++++++++-- 9 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 packages/ast-spec/src/statement/ThrowStatement/fixtures/_error_/missing-argument-2/fixture.ts create mode 100644 packages/ast-spec/src/statement/ThrowStatement/fixtures/_error_/missing-argument-2/snapshots/1-TSESTree-Error.shot create mode 100644 packages/ast-spec/src/statement/ThrowStatement/fixtures/_error_/missing-argument-2/snapshots/2-Babel-Error.shot create mode 100644 packages/ast-spec/src/statement/ThrowStatement/fixtures/_error_/missing-argument-2/snapshots/3-Alignment-Error.shot create mode 100644 packages/ast-spec/src/statement/ThrowStatement/fixtures/_error_/missing-argument/fixture.ts create mode 100644 packages/ast-spec/src/statement/ThrowStatement/fixtures/_error_/missing-argument/snapshots/1-TSESTree-Error.shot create mode 100644 packages/ast-spec/src/statement/ThrowStatement/fixtures/_error_/missing-argument/snapshots/2-Babel-Error.shot create mode 100644 packages/ast-spec/src/statement/ThrowStatement/fixtures/_error_/missing-argument/snapshots/3-Alignment-Error.shot diff --git a/packages/ast-spec/src/statement/ThrowStatement/fixtures/_error_/missing-argument-2/fixture.ts b/packages/ast-spec/src/statement/ThrowStatement/fixtures/_error_/missing-argument-2/fixture.ts new file mode 100644 index 000000000000..3e1ab9f52392 --- /dev/null +++ b/packages/ast-spec/src/statement/ThrowStatement/fixtures/_error_/missing-argument-2/fixture.ts @@ -0,0 +1,3 @@ +throw + +// dummy comment diff --git a/packages/ast-spec/src/statement/ThrowStatement/fixtures/_error_/missing-argument-2/snapshots/1-TSESTree-Error.shot b/packages/ast-spec/src/statement/ThrowStatement/fixtures/_error_/missing-argument-2/snapshots/1-TSESTree-Error.shot new file mode 100644 index 000000000000..938c8921e39a --- /dev/null +++ b/packages/ast-spec/src/statement/ThrowStatement/fixtures/_error_/missing-argument-2/snapshots/1-TSESTree-Error.shot @@ -0,0 +1,10 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`AST Fixtures statement ThrowStatement _error_ missing-argument-2 TSESTree - Error 1`] = ` +"TSError +> 1 | throw + | ^ Expression expected. + 2 | + 3 | // dummy comment + 4 |" +`; diff --git a/packages/ast-spec/src/statement/ThrowStatement/fixtures/_error_/missing-argument-2/snapshots/2-Babel-Error.shot b/packages/ast-spec/src/statement/ThrowStatement/fixtures/_error_/missing-argument-2/snapshots/2-Babel-Error.shot new file mode 100644 index 000000000000..ce098b6ac634 --- /dev/null +++ b/packages/ast-spec/src/statement/ThrowStatement/fixtures/_error_/missing-argument-2/snapshots/2-Babel-Error.shot @@ -0,0 +1,3 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`AST Fixtures statement ThrowStatement _error_ missing-argument-2 Babel - Error 1`] = `[SyntaxError: Illegal newline after throw. (1:5)]`; diff --git a/packages/ast-spec/src/statement/ThrowStatement/fixtures/_error_/missing-argument-2/snapshots/3-Alignment-Error.shot b/packages/ast-spec/src/statement/ThrowStatement/fixtures/_error_/missing-argument-2/snapshots/3-Alignment-Error.shot new file mode 100644 index 000000000000..98d7a85bbfe2 --- /dev/null +++ b/packages/ast-spec/src/statement/ThrowStatement/fixtures/_error_/missing-argument-2/snapshots/3-Alignment-Error.shot @@ -0,0 +1,3 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`AST Fixtures statement ThrowStatement _error_ missing-argument-2 Error Alignment 1`] = `"Both errored"`; diff --git a/packages/ast-spec/src/statement/ThrowStatement/fixtures/_error_/missing-argument/fixture.ts b/packages/ast-spec/src/statement/ThrowStatement/fixtures/_error_/missing-argument/fixture.ts new file mode 100644 index 000000000000..dbe94eee0049 --- /dev/null +++ b/packages/ast-spec/src/statement/ThrowStatement/fixtures/_error_/missing-argument/fixture.ts @@ -0,0 +1 @@ +function a() {throw} diff --git a/packages/ast-spec/src/statement/ThrowStatement/fixtures/_error_/missing-argument/snapshots/1-TSESTree-Error.shot b/packages/ast-spec/src/statement/ThrowStatement/fixtures/_error_/missing-argument/snapshots/1-TSESTree-Error.shot new file mode 100644 index 000000000000..934d28b8bd44 --- /dev/null +++ b/packages/ast-spec/src/statement/ThrowStatement/fixtures/_error_/missing-argument/snapshots/1-TSESTree-Error.shot @@ -0,0 +1,8 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`AST Fixtures statement ThrowStatement _error_ missing-argument TSESTree - Error 1`] = ` +"TSError +> 1 | function a() {throw} + | ^ Expression expected. + 2 |" +`; diff --git a/packages/ast-spec/src/statement/ThrowStatement/fixtures/_error_/missing-argument/snapshots/2-Babel-Error.shot b/packages/ast-spec/src/statement/ThrowStatement/fixtures/_error_/missing-argument/snapshots/2-Babel-Error.shot new file mode 100644 index 000000000000..8b6accfbe0f0 --- /dev/null +++ b/packages/ast-spec/src/statement/ThrowStatement/fixtures/_error_/missing-argument/snapshots/2-Babel-Error.shot @@ -0,0 +1,3 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`AST Fixtures statement ThrowStatement _error_ missing-argument Babel - Error 1`] = `[SyntaxError: Unexpected token (1:19)]`; diff --git a/packages/ast-spec/src/statement/ThrowStatement/fixtures/_error_/missing-argument/snapshots/3-Alignment-Error.shot b/packages/ast-spec/src/statement/ThrowStatement/fixtures/_error_/missing-argument/snapshots/3-Alignment-Error.shot new file mode 100644 index 000000000000..51974790455c --- /dev/null +++ b/packages/ast-spec/src/statement/ThrowStatement/fixtures/_error_/missing-argument/snapshots/3-Alignment-Error.shot @@ -0,0 +1,3 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`AST Fixtures statement ThrowStatement _error_ missing-argument Error Alignment 1`] = `"Both errored"`; diff --git a/packages/typescript-estree/src/convert.ts b/packages/typescript-estree/src/convert.ts index a6a66c0d8542..489f614eed97 100644 --- a/packages/typescript-estree/src/convert.ts +++ b/packages/typescript-estree/src/convert.ts @@ -822,11 +822,20 @@ export class Converter { // Exceptions - case SyntaxKind.ThrowStatement: + case SyntaxKind.ThrowStatement: { + const { expression } = node; + if ( + expression.kind === SyntaxKind.Identifier && + !(expression as ts.Identifier).text + ) { + throw createError(this.ast, node.end, 'Expression expected.'); + } + return this.createNode(node, { type: AST_NODE_TYPES.ThrowStatement, - argument: this.convertChild(node.expression), + argument: this.convertChild(expression), }); + } case SyntaxKind.TryStatement: return this.createNode(node, {