diff --git a/packages/ast-spec/src/statement/SwitchStatement/fixtures/_error_/multiple-default-cases/fixture.ts b/packages/ast-spec/src/statement/SwitchStatement/fixtures/_error_/multiple-default-cases/fixture.ts new file mode 100644 index 00000000000..698850476ff --- /dev/null +++ b/packages/ast-spec/src/statement/SwitchStatement/fixtures/_error_/multiple-default-cases/fixture.ts @@ -0,0 +1,3 @@ +switch (true) { + default: default: +} diff --git a/packages/ast-spec/src/statement/SwitchStatement/fixtures/_error_/multiple-default-cases/snapshots/1-TSESTree-Error.shot b/packages/ast-spec/src/statement/SwitchStatement/fixtures/_error_/multiple-default-cases/snapshots/1-TSESTree-Error.shot new file mode 100644 index 00000000000..ee04bea45a4 --- /dev/null +++ b/packages/ast-spec/src/statement/SwitchStatement/fixtures/_error_/multiple-default-cases/snapshots/1-TSESTree-Error.shot @@ -0,0 +1,12 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`AST Fixtures statement SwitchStatement _error_ multiple-default-cases TSESTree - Error 1`] = ` +"TSError +> 1 | switch (true) { + | ^^^^^^^^^^^^^^^ +> 2 | default: default: + | ^^^^^^^^^^^^^^^^^^ +> 3 | } + | ^^ A 'default' clause cannot appear more than once in a 'switch' statement. + 4 |" +`; diff --git a/packages/ast-spec/src/statement/SwitchStatement/fixtures/_error_/multiple-default-cases/snapshots/2-Babel-Error.shot b/packages/ast-spec/src/statement/SwitchStatement/fixtures/_error_/multiple-default-cases/snapshots/2-Babel-Error.shot new file mode 100644 index 00000000000..36271efa74a --- /dev/null +++ b/packages/ast-spec/src/statement/SwitchStatement/fixtures/_error_/multiple-default-cases/snapshots/2-Babel-Error.shot @@ -0,0 +1,3 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`AST Fixtures statement SwitchStatement _error_ multiple-default-cases Babel - Error 1`] = `[SyntaxError: Multiple default clauses. (2:10)]`; diff --git a/packages/ast-spec/src/statement/SwitchStatement/fixtures/_error_/multiple-default-cases/snapshots/3-Alignment-Error.shot b/packages/ast-spec/src/statement/SwitchStatement/fixtures/_error_/multiple-default-cases/snapshots/3-Alignment-Error.shot new file mode 100644 index 00000000000..37a7c334d63 --- /dev/null +++ b/packages/ast-spec/src/statement/SwitchStatement/fixtures/_error_/multiple-default-cases/snapshots/3-Alignment-Error.shot @@ -0,0 +1,3 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`AST Fixtures statement SwitchStatement _error_ multiple-default-cases Error Alignment 1`] = `"Both errored"`; diff --git a/packages/typescript-estree/src/convert.ts b/packages/typescript-estree/src/convert.ts index 13882d67c9c..7f248e49737 100644 --- a/packages/typescript-estree/src/convert.ts +++ b/packages/typescript-estree/src/convert.ts @@ -844,6 +844,17 @@ export class Converter { }); case SyntaxKind.SwitchStatement: + if ( + node.caseBlock.clauses.filter( + switchCase => switchCase.kind === SyntaxKind.DefaultClause, + ).length > 1 + ) { + this.#throwError( + node, + "A 'default' clause cannot appear more than once in a 'switch' statement.", + ); + } + return this.createNode(node, { type: AST_NODE_TYPES.SwitchStatement, discriminant: this.convertChild(node.expression),