diff --git a/packages/ast-spec/src/declaration/TSEnumDeclaration/fixtures/with-member-one/snapshots/1-TSESTree-AST.shot b/packages/ast-spec/src/declaration/TSEnumDeclaration/fixtures/with-member-one/snapshots/1-TSESTree-AST.shot index ddd23006e5d0..9a5146151d36 100644 --- a/packages/ast-spec/src/declaration/TSEnumDeclaration/fixtures/with-member-one/snapshots/1-TSESTree-AST.shot +++ b/packages/ast-spec/src/declaration/TSEnumDeclaration/fixtures/with-member-one/snapshots/1-TSESTree-AST.shot @@ -8,7 +8,6 @@ Program { members: [ TSEnumMember { type: "TSEnumMember", - computed: false, id: Identifier { type: "Identifier", decorators: [], diff --git a/packages/ast-spec/src/declaration/TSEnumDeclaration/fixtures/with-member-one/snapshots/5-AST-Alignment-AST.shot b/packages/ast-spec/src/declaration/TSEnumDeclaration/fixtures/with-member-one/snapshots/5-AST-Alignment-AST.shot index 90fb8dedf846..eeec47153937 100644 --- a/packages/ast-spec/src/declaration/TSEnumDeclaration/fixtures/with-member-one/snapshots/5-AST-Alignment-AST.shot +++ b/packages/ast-spec/src/declaration/TSEnumDeclaration/fixtures/with-member-one/snapshots/5-AST-Alignment-AST.shot @@ -15,7 +15,6 @@ Snapshot Diff: - members: Array [ - TSEnumMember { - type: 'TSEnumMember', -- computed: false, - id: Identifier { - type: 'Identifier', - decorators: Array [], diff --git a/packages/ast-spec/src/element/TSEnumMember/fixtures/_error_/bigint-name/fixture.ts b/packages/ast-spec/src/element/TSEnumMember/fixtures/_error_/bigint-name/fixture.ts new file mode 100644 index 000000000000..3fcd08d2bc99 --- /dev/null +++ b/packages/ast-spec/src/element/TSEnumMember/fixtures/_error_/bigint-name/fixture.ts @@ -0,0 +1,3 @@ +enum Foo { + 1n = 2 +} diff --git a/packages/ast-spec/src/element/TSEnumMember/fixtures/_error_/bigint-name/snapshots/1-TSESTree-Error.shot b/packages/ast-spec/src/element/TSEnumMember/fixtures/_error_/bigint-name/snapshots/1-TSESTree-Error.shot new file mode 100644 index 000000000000..87ba241f5d40 --- /dev/null +++ b/packages/ast-spec/src/element/TSEnumMember/fixtures/_error_/bigint-name/snapshots/1-TSESTree-Error.shot @@ -0,0 +1,9 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`AST Fixtures > element > TSEnumMember > _error_ > bigint-name > TSESTree - Error`] +TSError + 1 | enum Foo { +> 2 | 1n = 2 + | ^^ An enum member cannot have a numeric name. + 3 | } + 4 | diff --git a/packages/ast-spec/src/element/TSEnumMember/fixtures/_error_/bigint-name/snapshots/2-Babel-Error.shot b/packages/ast-spec/src/element/TSEnumMember/fixtures/_error_/bigint-name/snapshots/2-Babel-Error.shot new file mode 100644 index 000000000000..b3afe3afc96e --- /dev/null +++ b/packages/ast-spec/src/element/TSEnumMember/fixtures/_error_/bigint-name/snapshots/2-Babel-Error.shot @@ -0,0 +1,10 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`AST Fixtures > element > TSEnumMember > _error_ > bigint-name > Babel - Error`] +BabelError + 1 | enum Foo { +> 2 | 1n = 2 + | ^ Unexpected token (2:2) + 3 | } + 4 | + diff --git a/packages/ast-spec/src/element/TSEnumMember/fixtures/_error_/bigint-name/snapshots/3-Alignment-Error.shot b/packages/ast-spec/src/element/TSEnumMember/fixtures/_error_/bigint-name/snapshots/3-Alignment-Error.shot new file mode 100644 index 000000000000..083d80544d72 --- /dev/null +++ b/packages/ast-spec/src/element/TSEnumMember/fixtures/_error_/bigint-name/snapshots/3-Alignment-Error.shot @@ -0,0 +1,4 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`AST Fixtures > element > TSEnumMember > _error_ > bigint-name > Error Alignment`] +Both errored diff --git a/packages/ast-spec/src/element/TSEnumMember/fixtures/_error_/computed-string-name/fixture.ts b/packages/ast-spec/src/element/TSEnumMember/fixtures/_error_/computed-string-name/fixture.ts new file mode 100644 index 000000000000..2e99a8d3766b --- /dev/null +++ b/packages/ast-spec/src/element/TSEnumMember/fixtures/_error_/computed-string-name/fixture.ts @@ -0,0 +1,3 @@ +enum Foo { + ["A"] = 2 +} diff --git a/packages/ast-spec/src/element/TSEnumMember/fixtures/_error_/computed-string-name/snapshots/1-TSESTree-Error.shot b/packages/ast-spec/src/element/TSEnumMember/fixtures/_error_/computed-string-name/snapshots/1-TSESTree-Error.shot new file mode 100644 index 000000000000..2079fad90f2e --- /dev/null +++ b/packages/ast-spec/src/element/TSEnumMember/fixtures/_error_/computed-string-name/snapshots/1-TSESTree-Error.shot @@ -0,0 +1,9 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`AST Fixtures > element > TSEnumMember > _error_ > computed-string-name > TSESTree - Error`] +TSError + 1 | enum Foo { +> 2 | ["A"] = 2 + | ^^^^^ Computed property names are not allowed in enums. + 3 | } + 4 | diff --git a/packages/ast-spec/src/element/TSEnumMember/fixtures/_error_/computed-string-name/snapshots/2-Babel-Error.shot b/packages/ast-spec/src/element/TSEnumMember/fixtures/_error_/computed-string-name/snapshots/2-Babel-Error.shot new file mode 100644 index 000000000000..c68571c79318 --- /dev/null +++ b/packages/ast-spec/src/element/TSEnumMember/fixtures/_error_/computed-string-name/snapshots/2-Babel-Error.shot @@ -0,0 +1,10 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`AST Fixtures > element > TSEnumMember > _error_ > computed-string-name > Babel - Error`] +BabelError + 1 | enum Foo { +> 2 | ["A"] = 2 + | ^ Unexpected token (2:2) + 3 | } + 4 | + diff --git a/packages/ast-spec/src/element/TSEnumMember/fixtures/_error_/computed-string-name/snapshots/3-Alignment-Error.shot b/packages/ast-spec/src/element/TSEnumMember/fixtures/_error_/computed-string-name/snapshots/3-Alignment-Error.shot new file mode 100644 index 000000000000..1331cf0d18b9 --- /dev/null +++ b/packages/ast-spec/src/element/TSEnumMember/fixtures/_error_/computed-string-name/snapshots/3-Alignment-Error.shot @@ -0,0 +1,4 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`AST Fixtures > element > TSEnumMember > _error_ > computed-string-name > Error Alignment`] +Both errored diff --git a/packages/ast-spec/src/element/TSEnumMember/fixtures/_error_/number-name/fixture.ts b/packages/ast-spec/src/element/TSEnumMember/fixtures/_error_/number-name/fixture.ts new file mode 100644 index 000000000000..174773e65995 --- /dev/null +++ b/packages/ast-spec/src/element/TSEnumMember/fixtures/_error_/number-name/fixture.ts @@ -0,0 +1,3 @@ +enum Foo { + 1 = 2 +} diff --git a/packages/ast-spec/src/element/TSEnumMember/fixtures/_error_/number-name/snapshots/1-TSESTree-Error.shot b/packages/ast-spec/src/element/TSEnumMember/fixtures/_error_/number-name/snapshots/1-TSESTree-Error.shot new file mode 100644 index 000000000000..8dfacb32e5b9 --- /dev/null +++ b/packages/ast-spec/src/element/TSEnumMember/fixtures/_error_/number-name/snapshots/1-TSESTree-Error.shot @@ -0,0 +1,9 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`AST Fixtures > element > TSEnumMember > _error_ > number-name > TSESTree - Error`] +TSError + 1 | enum Foo { +> 2 | 1 = 2 + | ^ An enum member cannot have a numeric name. + 3 | } + 4 | diff --git a/packages/ast-spec/src/element/TSEnumMember/fixtures/_error_/number-name/snapshots/2-Babel-Error.shot b/packages/ast-spec/src/element/TSEnumMember/fixtures/_error_/number-name/snapshots/2-Babel-Error.shot new file mode 100644 index 000000000000..76b2f2b9c62e --- /dev/null +++ b/packages/ast-spec/src/element/TSEnumMember/fixtures/_error_/number-name/snapshots/2-Babel-Error.shot @@ -0,0 +1,10 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`AST Fixtures > element > TSEnumMember > _error_ > number-name > Babel - Error`] +BabelError + 1 | enum Foo { +> 2 | 1 = 2 + | ^ Unexpected token (2:2) + 3 | } + 4 | + diff --git a/packages/ast-spec/src/element/TSEnumMember/fixtures/_error_/number-name/snapshots/3-Alignment-Error.shot b/packages/ast-spec/src/element/TSEnumMember/fixtures/_error_/number-name/snapshots/3-Alignment-Error.shot new file mode 100644 index 000000000000..34e6cebc91e1 --- /dev/null +++ b/packages/ast-spec/src/element/TSEnumMember/fixtures/_error_/number-name/snapshots/3-Alignment-Error.shot @@ -0,0 +1,4 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`AST Fixtures > element > TSEnumMember > _error_ > number-name > Error Alignment`] +Both errored diff --git a/packages/ast-spec/src/element/TSEnumMember/spec.ts b/packages/ast-spec/src/element/TSEnumMember/spec.ts index a80e963ad278..a4d1b836f951 100644 --- a/packages/ast-spec/src/element/TSEnumMember/spec.ts +++ b/packages/ast-spec/src/element/TSEnumMember/spec.ts @@ -1,44 +1,15 @@ import type { AST_NODE_TYPES } from '../../ast-node-types'; import type { BaseNode } from '../../base/BaseNode'; +import type { Identifier } from '../../expression/Identifier/spec'; +import type { StringLiteral } from '../../expression/literal/StringLiteral/spec'; import type { Expression } from '../../unions/Expression'; -import type { - PropertyNameComputed, - PropertyNameNonComputed, -} from '../../unions/PropertyName'; -interface TSEnumMemberBase extends BaseNode { +export interface TSEnumMember extends BaseNode { type: AST_NODE_TYPES.TSEnumMember; - computed: boolean; - id: - | PropertyNameComputed // this should only happen in semantically invalid code (ts error 1164) - | PropertyNameNonComputed; + id: Identifier | StringLiteral; initializer: Expression | undefined; + /** + * @deprecated the enum member is always non-computed. + */ + computed: boolean; } - -/** - * this should only really happen in semantically invalid code (errors 1164 and 2452) - * - * @example - * ```ts - * // VALID: - * enum Foo { ['a'] } - * - * // INVALID: - * const x = 'a'; - * enum Foo { [x] } - * enum Bar { ['a' + 'b'] } - * ``` - */ -export interface TSEnumMemberComputedName extends TSEnumMemberBase { - computed: true; - id: PropertyNameComputed; -} - -export interface TSEnumMemberNonComputedName extends TSEnumMemberBase { - computed: false; - id: PropertyNameNonComputed; -} - -export type TSEnumMember = - | TSEnumMemberComputedName - | TSEnumMemberNonComputedName; diff --git a/packages/ast-spec/src/legacy-fixtures/basics/fixtures/_error_/export-named-enum-computed-number/snapshots/1-TSESTree-Error.shot b/packages/ast-spec/src/legacy-fixtures/basics/fixtures/_error_/export-named-enum-computed-number/snapshots/1-TSESTree-Error.shot index c64aaae4a4d8..dc8d857908c8 100644 --- a/packages/ast-spec/src/legacy-fixtures/basics/fixtures/_error_/export-named-enum-computed-number/snapshots/1-TSESTree-Error.shot +++ b/packages/ast-spec/src/legacy-fixtures/basics/fixtures/_error_/export-named-enum-computed-number/snapshots/1-TSESTree-Error.shot @@ -1,4 +1,10 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html exports[`AST Fixtures > legacy-fixtures > basics > _error_ > export-named-enum-computed-number > TSESTree - Error`] -NO ERROR +TSError + 2 | + 3 | export enum Foo { +> 4 | [1], + | ^^^ Computed property names are not allowed in enums. + 5 | } + 6 | diff --git a/packages/ast-spec/src/legacy-fixtures/basics/fixtures/_error_/export-named-enum-computed-number/snapshots/3-Alignment-Error.shot b/packages/ast-spec/src/legacy-fixtures/basics/fixtures/_error_/export-named-enum-computed-number/snapshots/3-Alignment-Error.shot index f5e14d5d4b27..f9ae118971e1 100644 --- a/packages/ast-spec/src/legacy-fixtures/basics/fixtures/_error_/export-named-enum-computed-number/snapshots/3-Alignment-Error.shot +++ b/packages/ast-spec/src/legacy-fixtures/basics/fixtures/_error_/export-named-enum-computed-number/snapshots/3-Alignment-Error.shot @@ -1,4 +1,4 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html exports[`AST Fixtures > legacy-fixtures > basics > _error_ > export-named-enum-computed-number > Error Alignment`] -Babel errored but TSESTree didn't +Both errored diff --git a/packages/ast-spec/src/legacy-fixtures/basics/fixtures/_error_/export-named-enum-computed-string/snapshots/1-TSESTree-Error.shot b/packages/ast-spec/src/legacy-fixtures/basics/fixtures/_error_/export-named-enum-computed-string/snapshots/1-TSESTree-Error.shot index 866743a38587..90ef25fd26d8 100644 --- a/packages/ast-spec/src/legacy-fixtures/basics/fixtures/_error_/export-named-enum-computed-string/snapshots/1-TSESTree-Error.shot +++ b/packages/ast-spec/src/legacy-fixtures/basics/fixtures/_error_/export-named-enum-computed-string/snapshots/1-TSESTree-Error.shot @@ -1,4 +1,10 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html exports[`AST Fixtures > legacy-fixtures > basics > _error_ > export-named-enum-computed-string > TSESTree - Error`] -NO ERROR +TSError + 2 | + 3 | export enum Foo { +> 4 | ['baz'], + | ^^^^^^^ Computed property names are not allowed in enums. + 5 | } + 6 | diff --git a/packages/ast-spec/src/legacy-fixtures/basics/fixtures/_error_/export-named-enum-computed-string/snapshots/3-Alignment-Error.shot b/packages/ast-spec/src/legacy-fixtures/basics/fixtures/_error_/export-named-enum-computed-string/snapshots/3-Alignment-Error.shot index f58190aa21f3..2dc13fd3d5d2 100644 --- a/packages/ast-spec/src/legacy-fixtures/basics/fixtures/_error_/export-named-enum-computed-string/snapshots/3-Alignment-Error.shot +++ b/packages/ast-spec/src/legacy-fixtures/basics/fixtures/_error_/export-named-enum-computed-string/snapshots/3-Alignment-Error.shot @@ -1,4 +1,4 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html exports[`AST Fixtures > legacy-fixtures > basics > _error_ > export-named-enum-computed-string > Error Alignment`] -Babel errored but TSESTree didn't +Both errored diff --git a/packages/ast-spec/src/legacy-fixtures/basics/fixtures/_error_/export-named-enum-computed-var-ref/snapshots/1-TSESTree-Error.shot b/packages/ast-spec/src/legacy-fixtures/basics/fixtures/_error_/export-named-enum-computed-var-ref/snapshots/1-TSESTree-Error.shot index 85b95f8e17d3..7e31fde5e0c7 100644 --- a/packages/ast-spec/src/legacy-fixtures/basics/fixtures/_error_/export-named-enum-computed-var-ref/snapshots/1-TSESTree-Error.shot +++ b/packages/ast-spec/src/legacy-fixtures/basics/fixtures/_error_/export-named-enum-computed-var-ref/snapshots/1-TSESTree-Error.shot @@ -1,4 +1,10 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html exports[`AST Fixtures > legacy-fixtures > basics > _error_ > export-named-enum-computed-var-ref > TSESTree - Error`] -NO ERROR +TSError + 2 | + 3 | export enum Foo { +> 4 | [x], + | ^^^ Computed property names are not allowed in enums. + 5 | } + 6 | diff --git a/packages/ast-spec/src/legacy-fixtures/basics/fixtures/_error_/export-named-enum-computed-var-ref/snapshots/3-Alignment-Error.shot b/packages/ast-spec/src/legacy-fixtures/basics/fixtures/_error_/export-named-enum-computed-var-ref/snapshots/3-Alignment-Error.shot index 006e3518ee1f..3909357acf22 100644 --- a/packages/ast-spec/src/legacy-fixtures/basics/fixtures/_error_/export-named-enum-computed-var-ref/snapshots/3-Alignment-Error.shot +++ b/packages/ast-spec/src/legacy-fixtures/basics/fixtures/_error_/export-named-enum-computed-var-ref/snapshots/3-Alignment-Error.shot @@ -1,4 +1,4 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html exports[`AST Fixtures > legacy-fixtures > basics > _error_ > export-named-enum-computed-var-ref > Error Alignment`] -Babel errored but TSESTree didn't +Both errored diff --git a/packages/ast-spec/src/legacy-fixtures/basics/fixtures/const-enum/snapshots/1-TSESTree-AST.shot b/packages/ast-spec/src/legacy-fixtures/basics/fixtures/const-enum/snapshots/1-TSESTree-AST.shot index 9187f52aade3..238113e5cc58 100644 --- a/packages/ast-spec/src/legacy-fixtures/basics/fixtures/const-enum/snapshots/1-TSESTree-AST.shot +++ b/packages/ast-spec/src/legacy-fixtures/basics/fixtures/const-enum/snapshots/1-TSESTree-AST.shot @@ -8,7 +8,6 @@ Program { members: [ TSEnumMember { type: "TSEnumMember", - computed: false, id: Identifier { type: "Identifier", decorators: [], @@ -41,7 +40,6 @@ Program { }, TSEnumMember { type: "TSEnumMember", - computed: false, id: Identifier { type: "Identifier", decorators: [], diff --git a/packages/ast-spec/src/legacy-fixtures/basics/fixtures/const-enum/snapshots/5-AST-Alignment-AST.shot b/packages/ast-spec/src/legacy-fixtures/basics/fixtures/const-enum/snapshots/5-AST-Alignment-AST.shot index 1c5c321a9cf2..20c84325ce31 100644 --- a/packages/ast-spec/src/legacy-fixtures/basics/fixtures/const-enum/snapshots/5-AST-Alignment-AST.shot +++ b/packages/ast-spec/src/legacy-fixtures/basics/fixtures/const-enum/snapshots/5-AST-Alignment-AST.shot @@ -15,7 +15,6 @@ Snapshot Diff: - members: Array [ - TSEnumMember { - type: 'TSEnumMember', -- computed: false, - id: Identifier { - type: 'Identifier', - decorators: Array [], @@ -81,7 +80,6 @@ Snapshot Diff: }, - TSEnumMember { - type: 'TSEnumMember', -- computed: false, - id: Identifier { - type: 'Identifier', - decorators: Array [], @@ -121,12 +119,7 @@ Snapshot Diff: - loc: { - start: { column: 15, line: 3 }, - end: { column: 1, line: 6 }, -+ range: [103, 106], -+ loc: { -+ start: { column: 2, line: 5 }, -+ end: { column: 5, line: 5 }, -+ }, - }, +- }, - }, - const: true, - declare: false, @@ -140,7 +133,12 @@ Snapshot Diff: - loc: { - start: { column: 11, line: 3 }, - end: { column: 14, line: 3 }, -- }, ++ range: [103, 106], ++ loc: { ++ start: { column: 2, line: 5 }, ++ end: { column: 5, line: 5 }, ++ }, + }, - }, + ], diff --git a/packages/ast-spec/src/legacy-fixtures/basics/fixtures/export-declare-const-named-enum/snapshots/1-TSESTree-AST.shot b/packages/ast-spec/src/legacy-fixtures/basics/fixtures/export-declare-const-named-enum/snapshots/1-TSESTree-AST.shot index 0a35e9756f00..01c4d100b383 100644 --- a/packages/ast-spec/src/legacy-fixtures/basics/fixtures/export-declare-const-named-enum/snapshots/1-TSESTree-AST.shot +++ b/packages/ast-spec/src/legacy-fixtures/basics/fixtures/export-declare-const-named-enum/snapshots/1-TSESTree-AST.shot @@ -11,7 +11,6 @@ Program { members: [ TSEnumMember { type: "TSEnumMember", - computed: false, id: Identifier { type: "Identifier", decorators: [], @@ -44,7 +43,6 @@ Program { }, TSEnumMember { type: "TSEnumMember", - computed: false, id: Identifier { type: "Identifier", decorators: [], diff --git a/packages/ast-spec/src/legacy-fixtures/basics/fixtures/export-declare-const-named-enum/snapshots/5-AST-Alignment-AST.shot b/packages/ast-spec/src/legacy-fixtures/basics/fixtures/export-declare-const-named-enum/snapshots/5-AST-Alignment-AST.shot index bc225b94ed0d..603938fb4270 100644 --- a/packages/ast-spec/src/legacy-fixtures/basics/fixtures/export-declare-const-named-enum/snapshots/5-AST-Alignment-AST.shot +++ b/packages/ast-spec/src/legacy-fixtures/basics/fixtures/export-declare-const-named-enum/snapshots/5-AST-Alignment-AST.shot @@ -19,7 +19,6 @@ Snapshot Diff: - members: Array [ - TSEnumMember { - type: 'TSEnumMember', -- computed: false, - id: Identifier { - type: 'Identifier', - decorators: Array [], @@ -85,7 +84,6 @@ Snapshot Diff: }, - TSEnumMember { - type: 'TSEnumMember', -- computed: false, - id: Identifier { - type: 'Identifier', - decorators: Array [], diff --git a/packages/ast-spec/src/legacy-fixtures/basics/fixtures/export-declare-named-enum/snapshots/1-TSESTree-AST.shot b/packages/ast-spec/src/legacy-fixtures/basics/fixtures/export-declare-named-enum/snapshots/1-TSESTree-AST.shot index 15279e8049d7..f946f794f043 100644 --- a/packages/ast-spec/src/legacy-fixtures/basics/fixtures/export-declare-named-enum/snapshots/1-TSESTree-AST.shot +++ b/packages/ast-spec/src/legacy-fixtures/basics/fixtures/export-declare-named-enum/snapshots/1-TSESTree-AST.shot @@ -11,7 +11,6 @@ Program { members: [ TSEnumMember { type: "TSEnumMember", - computed: false, id: Identifier { type: "Identifier", decorators: [], @@ -44,7 +43,6 @@ Program { }, TSEnumMember { type: "TSEnumMember", - computed: false, id: Identifier { type: "Identifier", decorators: [], diff --git a/packages/ast-spec/src/legacy-fixtures/basics/fixtures/export-declare-named-enum/snapshots/5-AST-Alignment-AST.shot b/packages/ast-spec/src/legacy-fixtures/basics/fixtures/export-declare-named-enum/snapshots/5-AST-Alignment-AST.shot index 695e866e0f98..eff7ba3226bd 100644 --- a/packages/ast-spec/src/legacy-fixtures/basics/fixtures/export-declare-named-enum/snapshots/5-AST-Alignment-AST.shot +++ b/packages/ast-spec/src/legacy-fixtures/basics/fixtures/export-declare-named-enum/snapshots/5-AST-Alignment-AST.shot @@ -19,7 +19,6 @@ Snapshot Diff: - members: Array [ - TSEnumMember { - type: 'TSEnumMember', -- computed: false, - id: Identifier { - type: 'Identifier', - decorators: Array [], @@ -85,7 +84,6 @@ Snapshot Diff: }, - TSEnumMember { - type: 'TSEnumMember', -- computed: false, - id: Identifier { - type: 'Identifier', - decorators: Array [], diff --git a/packages/ast-spec/src/legacy-fixtures/basics/fixtures/export-named-enum/snapshots/1-TSESTree-AST.shot b/packages/ast-spec/src/legacy-fixtures/basics/fixtures/export-named-enum/snapshots/1-TSESTree-AST.shot index b1554a6d0194..8f42d8de69bf 100644 --- a/packages/ast-spec/src/legacy-fixtures/basics/fixtures/export-named-enum/snapshots/1-TSESTree-AST.shot +++ b/packages/ast-spec/src/legacy-fixtures/basics/fixtures/export-named-enum/snapshots/1-TSESTree-AST.shot @@ -11,7 +11,6 @@ Program { members: [ TSEnumMember { type: "TSEnumMember", - computed: false, id: Identifier { type: "Identifier", decorators: [], @@ -44,7 +43,6 @@ Program { }, TSEnumMember { type: "TSEnumMember", - computed: false, id: Identifier { type: "Identifier", decorators: [], diff --git a/packages/ast-spec/src/legacy-fixtures/basics/fixtures/export-named-enum/snapshots/5-AST-Alignment-AST.shot b/packages/ast-spec/src/legacy-fixtures/basics/fixtures/export-named-enum/snapshots/5-AST-Alignment-AST.shot index b52051becdfb..10c5f8d572d1 100644 --- a/packages/ast-spec/src/legacy-fixtures/basics/fixtures/export-named-enum/snapshots/5-AST-Alignment-AST.shot +++ b/packages/ast-spec/src/legacy-fixtures/basics/fixtures/export-named-enum/snapshots/5-AST-Alignment-AST.shot @@ -19,7 +19,6 @@ Snapshot Diff: - members: Array [ - TSEnumMember { - type: 'TSEnumMember', -- computed: false, - id: Identifier { - type: 'Identifier', - decorators: Array [], @@ -85,7 +84,6 @@ Snapshot Diff: }, - TSEnumMember { - type: 'TSEnumMember', -- computed: false, - id: Identifier { - type: 'Identifier', - decorators: Array [], diff --git a/packages/ast-spec/src/legacy-fixtures/declare/fixtures/enum/snapshots/1-TSESTree-AST.shot b/packages/ast-spec/src/legacy-fixtures/declare/fixtures/enum/snapshots/1-TSESTree-AST.shot index 513eb9bcd84c..e483a20f2a29 100644 --- a/packages/ast-spec/src/legacy-fixtures/declare/fixtures/enum/snapshots/1-TSESTree-AST.shot +++ b/packages/ast-spec/src/legacy-fixtures/declare/fixtures/enum/snapshots/1-TSESTree-AST.shot @@ -8,7 +8,6 @@ Program { members: [ TSEnumMember { type: "TSEnumMember", - computed: false, id: Identifier { type: "Identifier", decorators: [], @@ -30,7 +29,6 @@ Program { }, TSEnumMember { type: "TSEnumMember", - computed: false, id: Identifier { type: "Identifier", decorators: [], diff --git a/packages/ast-spec/src/legacy-fixtures/declare/fixtures/enum/snapshots/5-AST-Alignment-AST.shot b/packages/ast-spec/src/legacy-fixtures/declare/fixtures/enum/snapshots/5-AST-Alignment-AST.shot index 3c1cbd1bc2a0..544b72e407c8 100644 --- a/packages/ast-spec/src/legacy-fixtures/declare/fixtures/enum/snapshots/5-AST-Alignment-AST.shot +++ b/packages/ast-spec/src/legacy-fixtures/declare/fixtures/enum/snapshots/5-AST-Alignment-AST.shot @@ -15,7 +15,6 @@ Snapshot Diff: - members: Array [ - TSEnumMember { - type: 'TSEnumMember', -- computed: false, - id: Identifier { - type: 'Identifier', - decorators: Array [], @@ -59,7 +58,6 @@ Snapshot Diff: }, - TSEnumMember { - type: 'TSEnumMember', -- computed: false, - id: Identifier { - type: 'Identifier', - decorators: Array [], diff --git a/packages/ast-spec/tests/fixtures-with-differences-errors.shot b/packages/ast-spec/tests/fixtures-with-differences-errors.shot index 7051aa777fbb..04b14e7a3730 100644 --- a/packages/ast-spec/tests/fixtures-with-differences-errors.shot +++ b/packages/ast-spec/tests/fixtures-with-differences-errors.shot @@ -27,9 +27,6 @@ exports[`AST Fixtures > List fixtures with Error differences`] "legacy-fixtures/basics/fixtures/_error_/class-with-constructor-and-type-parameters/fixture.ts", "legacy-fixtures/basics/fixtures/_error_/class-with-two-methods-computed-constructor/fixture.ts", "legacy-fixtures/basics/fixtures/_error_/const-assertions/fixture.ts", - "legacy-fixtures/basics/fixtures/_error_/export-named-enum-computed-number/fixture.ts", - "legacy-fixtures/basics/fixtures/_error_/export-named-enum-computed-string/fixture.ts", - "legacy-fixtures/basics/fixtures/_error_/export-named-enum-computed-var-ref/fixture.ts", "legacy-fixtures/basics/fixtures/_error_/export-with-import-assertions/fixture.ts", "legacy-fixtures/basics/fixtures/_error_/import-type-error/fixture.ts", "legacy-fixtures/basics/fixtures/_error_/new-target-in-arrow-function-body/fixture.ts", diff --git a/packages/eslint-plugin/src/rules/naming-convention.ts b/packages/eslint-plugin/src/rules/naming-convention.ts index 03500d825163..02b95a5948fc 100644 --- a/packages/eslint-plugin/src/rules/naming-convention.ts +++ b/packages/eslint-plugin/src/rules/naming-convention.ts @@ -631,12 +631,10 @@ export default createRule({ // #region interface - 'TSEnumMember[computed != true]': { - handler: ( - node: TSESTree.TSEnumMemberNonComputedName, - validator, - ): void => { - const id = node.id; + TSEnumMember: { + handler: (node: TSESTree.TSEnumMember, validator): void => { + // Unknown reason, can't get the correct type + const id = node.id as TSESTree.Identifier | TSESTree.StringLiteral; const modifiers = new Set(); if (requiresQuoting(id, compilerOptions.target)) { diff --git a/packages/eslint-plugin/tests/rules/no-unsafe-enum-comparison.test.ts b/packages/eslint-plugin/tests/rules/no-unsafe-enum-comparison.test.ts index b592b7fe513d..89e28f163314 100644 --- a/packages/eslint-plugin/tests/rules/no-unsafe-enum-comparison.test.ts +++ b/packages/eslint-plugin/tests/rules/no-unsafe-enum-comparison.test.ts @@ -1121,87 +1121,6 @@ ruleTester.run('no-unsafe-enum-comparison', rule, { }, ], }, - { - code: ` - enum ComputedKey { - ['test-key' /* with comment */] = 1, - } - declare const computedKey: ComputedKey; - computedKey === 1; - `, - errors: [ - { - messageId: 'mismatchedCondition', - suggestions: [ - { - messageId: 'replaceValueWithEnum', - output: ` - enum ComputedKey { - ['test-key' /* with comment */] = 1, - } - declare const computedKey: ComputedKey; - computedKey === ComputedKey['test-key']; - `, - }, - ], - }, - ], - }, - { - code: ` - enum ComputedKey { - [\`test-key\` /* with comment */] = 1, - } - declare const computedKey: ComputedKey; - computedKey === 1; - `, - errors: [ - { - messageId: 'mismatchedCondition', - suggestions: [ - { - messageId: 'replaceValueWithEnum', - output: ` - enum ComputedKey { - [\`test-key\` /* with comment */] = 1, - } - declare const computedKey: ComputedKey; - computedKey === ComputedKey[\`test-key\`]; - `, - }, - ], - }, - ], - }, - { - code: ` - enum ComputedKey { - [\`test- - key\` /* with comment */] = 1, - } - declare const computedKey: ComputedKey; - computedKey === 1; - `, - errors: [ - { - messageId: 'mismatchedCondition', - suggestions: [ - { - messageId: 'replaceValueWithEnum', - output: ` - enum ComputedKey { - [\`test- - key\` /* with comment */] = 1, - } - declare const computedKey: ComputedKey; - computedKey === ComputedKey[\`test- - key\`]; - `, - }, - ], - }, - ], - }, { code: ` enum Fruit { diff --git a/packages/eslint-plugin/tests/rules/prefer-literal-enum-member.test.ts b/packages/eslint-plugin/tests/rules/prefer-literal-enum-member.test.ts index ea670139ccb3..f655c87e9ce2 100644 --- a/packages/eslint-plugin/tests/rules/prefer-literal-enum-member.test.ts +++ b/packages/eslint-plugin/tests/rules/prefer-literal-enum-member.test.ts @@ -54,11 +54,6 @@ enum ValidQuotedKey { ` enum ValidQuotedKeyWithAssignment { 'a' = 1, -} - `, - ` -enum ValidKeyWithComputedSyntaxButNoComputedKey { - ['a'], } `, { @@ -107,15 +102,6 @@ enum Foo { }, { code: ` -enum Foo { - ['A-1'] = 1 << 0, - C = ~Foo['A-1'], -} - `, - options: [{ allowBitwiseExpressions: true }], - }, - { - code: ` enum Foo { A = 1 << 0, B = 1 << 1, diff --git a/packages/eslint-plugin/tests/rules/switch-exhaustiveness-check.test.ts b/packages/eslint-plugin/tests/rules/switch-exhaustiveness-check.test.ts index da5b65c8177f..b18e91e4872a 100644 --- a/packages/eslint-plugin/tests/rules/switch-exhaustiveness-check.test.ts +++ b/packages/eslint-plugin/tests/rules/switch-exhaustiveness-check.test.ts @@ -2281,46 +2281,6 @@ switch (value) { }, ], }, - { - code: ` - enum Enum { - 'a' = 1, - [\`key-with - - new-line\`] = 2, - } - - declare const a: Enum; - - switch (a) { - } - `, - errors: [ - { - messageId: 'switchIsNotExhaustive', - suggestions: [ - { - messageId: 'addMissingCases', - output: ` - enum Enum { - 'a' = 1, - [\`key-with - - new-line\`] = 2, - } - - declare const a: Enum; - - switch (a) { - case Enum.a: { throw new Error('Not implemented yet: Enum.a case') } - case Enum['key-with\\n\\n new-line']: { throw new Error('Not implemented yet: Enum[\\'key-with\\\\n\\\\n new-line\\'] case') } - } - `, - }, - ], - }, - ], - }, { code: noFormat` enum Enum { diff --git a/packages/scope-manager/src/referencer/Referencer.ts b/packages/scope-manager/src/referencer/Referencer.ts index 1f621d8f7823..562921170751 100644 --- a/packages/scope-manager/src/referencer/Referencer.ts +++ b/packages/scope-manager/src/referencer/Referencer.ts @@ -668,10 +668,7 @@ export class Referencer extends Visitor { name, new TSEnumMemberDefinition(name, member), ); - } else if ( - !member.computed && - member.id.type === AST_NODE_TYPES.Identifier - ) { + } else if (member.id.type === AST_NODE_TYPES.Identifier) { this.currentScope().defineIdentifier( member.id, new TSEnumMemberDefinition(member.id, member), diff --git a/packages/typescript-estree/src/convert.ts b/packages/typescript-estree/src/convert.ts index 8f293db2af02..3a084584ec3c 100644 --- a/packages/typescript-estree/src/convert.ts +++ b/packages/typescript-estree/src/convert.ts @@ -476,7 +476,7 @@ export class Converter { >( node: Properties, deprecatedKey: Key, - preferredKey: string, + preferredKey: string | undefined, value: Value, ): Properties & Record { let warned = false; @@ -487,10 +487,13 @@ export class Converter { ? (): Value => value : (): Value => { if (!warned) { - process.emitWarning( - `The '${deprecatedKey}' property is deprecated on ${node.type} nodes. Use ${preferredKey} instead. See https://typescript-eslint.io/troubleshooting/faqs/general#the-key-property-is-deprecated-on-type-nodes-use-key-instead-warnings.`, - 'DeprecationWarning', - ); + let message = `The '${deprecatedKey}' property is deprecated on ${node.type} nodes.`; + if (preferredKey) { + message += ` Use ${preferredKey} instead.`; + } + message += + ' See https://typescript-eslint.io/troubleshooting/faqs/general#the-key-property-is-deprecated-on-type-nodes-use-key-instead-warnings.'; + process.emitWarning(message, 'DeprecationWarning'); warned = true; } @@ -3238,12 +3241,38 @@ export class Converter { } case SyntaxKind.EnumMember: { - return this.createNode(node, { - type: AST_NODE_TYPES.TSEnumMember, - computed: node.name.kind === ts.SyntaxKind.ComputedPropertyName, - id: this.convertChild(node.name), - initializer: node.initializer && this.convertChild(node.initializer), - }); + const computed = node.name.kind === ts.SyntaxKind.ComputedPropertyName; + if (computed) { + this.#throwUnlessAllowInvalidAST( + node.name, + 'Computed property names are not allowed in enums.', + ); + } + + if ( + node.name.kind === SyntaxKind.NumericLiteral || + node.name.kind === SyntaxKind.BigIntLiteral + ) { + this.#throwUnlessAllowInvalidAST( + node.name, + 'An enum member cannot have a numeric name.', + ); + } + + return this.createNode( + node, + this.#withDeprecatedGetter( + { + type: AST_NODE_TYPES.TSEnumMember, + id: this.convertChild(node.name), + initializer: + node.initializer && this.convertChild(node.initializer), + }, + 'computed', + undefined, + computed, + ), + ); } case SyntaxKind.ModuleDeclaration: {