diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 7bcc8d6cf2ced..3efc585116d9f 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -5233,6 +5233,9 @@ func (c *Checker) checkEnumMember(node *ast.Node) { if ast.IsPrivateIdentifier(node.Name()) { c.error(node, diagnostics.An_enum_member_cannot_be_named_with_a_private_identifier) } + if ast.IsComputedPropertyName(node.Name()) { + c.checkExpression(node.Name().Expression()) + } if node.Initializer() != nil { c.checkExpression(node.Initializer()) } @@ -28787,13 +28790,7 @@ func (c *Checker) markLinkedReferences(location *ast.Node, hint ReferenceHint, p return } } - // Computed property names on enum members are a grammar error and are never checked - // (checkEnumMember only checks the member initializer, not the name), so resolving - // identifiers in them here would report a spurious "Cannot find name" diagnostic. if computedName != nil { - if ast.IsEnumMember(computedName.Parent) { - return - } if isInvalidComputedPropertyName(computedName) { return } diff --git a/tsc/testdata/baselines/reference/compiler/deprecatedReferenceInEnumComputedNameNoFlake.errors.txt b/tsc/testdata/baselines/reference/compiler/deprecatedReferenceInEnumComputedNameNoFlake.errors.txt new file mode 100644 index 0000000000000..acc89acb4999f --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/deprecatedReferenceInEnumComputedNameNoFlake.errors.txt @@ -0,0 +1,15 @@ +deprecatedReferenceInEnumComputedNameNoFlake.ts(5,5): error TS1164: Computed property names are not allowed in enums. +deprecatedReferenceInEnumComputedNameNoFlake.ts(5,6): suggestion TS6385: 'oldValue' is deprecated. + + +==== deprecatedReferenceInEnumComputedNameNoFlake.ts (2 errors) ==== + // TS6385: 'oldValue' is deprecated. + /** @deprecated */ + declare const oldValue: { value: number }; + export enum Values { + [oldValue.value] = 1, + ~~~~~~~~~~~~~~~~ +!!! error TS1164: Computed property names are not allowed in enums. + ~~~~~~~~ +!!! suggestion TS6385: 'oldValue' is deprecated. + } \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/deprecatedReferenceInEnumComputedNameNoFlake.js b/tsc/testdata/baselines/reference/compiler/deprecatedReferenceInEnumComputedNameNoFlake.js new file mode 100644 index 0000000000000..8fe2840fb4714 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/deprecatedReferenceInEnumComputedNameNoFlake.js @@ -0,0 +1,21 @@ +//// [tests/cases/compiler/deprecatedReferenceInEnumComputedNameNoFlake.ts] //// + +//// [deprecatedReferenceInEnumComputedNameNoFlake.ts] +// TS6385: 'oldValue' is deprecated. +/** @deprecated */ +declare const oldValue: { value: number }; +export enum Values { + [oldValue.value] = 1, +} + +//// [deprecatedReferenceInEnumComputedNameNoFlake.js] +export var Values; +(function (Values) { + Values[Values[oldValue.value] = 1] = oldValue.value; +})(Values || (Values = {})); + + +//// [deprecatedReferenceInEnumComputedNameNoFlake.d.ts] +export declare enum Values { + [oldValue.value] = 1 +} diff --git a/tsc/testdata/baselines/reference/compiler/deprecatedReferenceInEnumComputedNameNoFlake.symbols b/tsc/testdata/baselines/reference/compiler/deprecatedReferenceInEnumComputedNameNoFlake.symbols new file mode 100644 index 0000000000000..9010bdecd4cd5 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/deprecatedReferenceInEnumComputedNameNoFlake.symbols @@ -0,0 +1,18 @@ +//// [tests/cases/compiler/deprecatedReferenceInEnumComputedNameNoFlake.ts] //// + +=== deprecatedReferenceInEnumComputedNameNoFlake.ts === +// TS6385: 'oldValue' is deprecated. +/** @deprecated */ +declare const oldValue: { value: number }; +>oldValue : Symbol(oldValue, Decl(deprecatedReferenceInEnumComputedNameNoFlake.ts, 2, 13)) +>value : Symbol(value, Decl(deprecatedReferenceInEnumComputedNameNoFlake.ts, 2, 25)) + +export enum Values { +>Values : Symbol(Values, Decl(deprecatedReferenceInEnumComputedNameNoFlake.ts, 2, 42)) + + [oldValue.value] = 1, +>[oldValue.value] : Symbol(Values[oldValue.value], Decl(deprecatedReferenceInEnumComputedNameNoFlake.ts, 3, 20)) +>oldValue.value : Symbol(value, Decl(deprecatedReferenceInEnumComputedNameNoFlake.ts, 2, 25)) +>oldValue : Symbol(oldValue, Decl(deprecatedReferenceInEnumComputedNameNoFlake.ts, 2, 13)) +>value : Symbol(value, Decl(deprecatedReferenceInEnumComputedNameNoFlake.ts, 2, 25)) +} diff --git a/tsc/testdata/baselines/reference/compiler/deprecatedReferenceInEnumComputedNameNoFlake.types b/tsc/testdata/baselines/reference/compiler/deprecatedReferenceInEnumComputedNameNoFlake.types new file mode 100644 index 0000000000000..219f3dcf27652 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/deprecatedReferenceInEnumComputedNameNoFlake.types @@ -0,0 +1,19 @@ +//// [tests/cases/compiler/deprecatedReferenceInEnumComputedNameNoFlake.ts] //// + +=== deprecatedReferenceInEnumComputedNameNoFlake.ts === +// TS6385: 'oldValue' is deprecated. +/** @deprecated */ +declare const oldValue: { value: number }; +>oldValue : { value: number; } +>value : number + +export enum Values { +>Values : Values + + [oldValue.value] = 1, +>[oldValue.value] : Values +>oldValue.value : number +>oldValue : { value: number; } +>value : number +>1 : 1 +} diff --git a/tsc/testdata/baselines/reference/compiler/importedValueInEnumComputedNameNoFlake.errors.txt b/tsc/testdata/baselines/reference/compiler/importedValueInEnumComputedNameNoFlake.errors.txt new file mode 100644 index 0000000000000..b7559ad9871b7 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/importedValueInEnumComputedNameNoFlake.errors.txt @@ -0,0 +1,14 @@ +main.ts(4,5): error TS1164: Computed property names are not allowed in enums. + + +==== key.ts (0 errors) ==== + export const key = "member"; + +==== main.ts (1 errors) ==== + import { key } from "./key"; + + export enum Example { + [key] = 0, + ~~~~~ +!!! error TS1164: Computed property names are not allowed in enums. + } \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/importedValueInEnumComputedNameNoFlake.js b/tsc/testdata/baselines/reference/compiler/importedValueInEnumComputedNameNoFlake.js new file mode 100644 index 0000000000000..1ca5ae128f290 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/importedValueInEnumComputedNameNoFlake.js @@ -0,0 +1,20 @@ +//// [tests/cases/compiler/importedValueInEnumComputedNameNoFlake.ts] //// + +//// [key.ts] +export const key = "member"; + +//// [main.ts] +import { key } from "./key"; + +export enum Example { + [key] = 0, +} + +//// [key.js] +export const key = "member"; +//// [main.js] +import { key } from "./key"; +export var Example; +(function (Example) { + Example[Example[key] = 0] = key; +})(Example || (Example = {})); diff --git a/tsc/testdata/baselines/reference/compiler/importedValueInEnumComputedNameNoFlake.symbols b/tsc/testdata/baselines/reference/compiler/importedValueInEnumComputedNameNoFlake.symbols new file mode 100644 index 0000000000000..85c8c59b3e6f6 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/importedValueInEnumComputedNameNoFlake.symbols @@ -0,0 +1,17 @@ +//// [tests/cases/compiler/importedValueInEnumComputedNameNoFlake.ts] //// + +=== key.ts === +export const key = "member"; +>key : Symbol(key, Decl(key.ts, 0, 12)) + +=== main.ts === +import { key } from "./key"; +>key : Symbol(key, Decl(main.ts, 0, 8)) + +export enum Example { +>Example : Symbol(Example, Decl(main.ts, 0, 28)) + + [key] = 0, +>[key] : Symbol(Example[key], Decl(main.ts, 2, 21)) +>key : Symbol(key, Decl(main.ts, 0, 8)) +} diff --git a/tsc/testdata/baselines/reference/compiler/importedValueInEnumComputedNameNoFlake.types b/tsc/testdata/baselines/reference/compiler/importedValueInEnumComputedNameNoFlake.types new file mode 100644 index 0000000000000..2e5923ad53f65 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/importedValueInEnumComputedNameNoFlake.types @@ -0,0 +1,19 @@ +//// [tests/cases/compiler/importedValueInEnumComputedNameNoFlake.ts] //// + +=== key.ts === +export const key = "member"; +>key : "member" +>"member" : "member" + +=== main.ts === +import { key } from "./key"; +>key : "member" + +export enum Example { +>Example : Example + + [key] = 0, +>[key] : Example +>key : "member" +>0 : 0 +} diff --git a/tsc/testdata/baselines/reference/compiler/incompatibleAssignmentInEnumComputedNameNoFlake.errors.txt b/tsc/testdata/baselines/reference/compiler/incompatibleAssignmentInEnumComputedNameNoFlake.errors.txt new file mode 100644 index 0000000000000..5226acccfad8e --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/incompatibleAssignmentInEnumComputedNameNoFlake.errors.txt @@ -0,0 +1,20 @@ +incompatibleAssignmentInEnumComputedNameNoFlake.ts(4,5): error TS1164: Computed property names are not allowed in enums. +incompatibleAssignmentInEnumComputedNameNoFlake.ts(5,23): error TS2322: Type 'string' is not assignable to type 'number'. + + +==== incompatibleAssignmentInEnumComputedNameNoFlake.ts (2 errors) ==== + // TS2322: Type 'string' is not assignable to type 'number'. + let target: number; + enum E { + [(() => { + ~~~~~~~~~ + const text = (target = "value"); + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~ +!!! error TS2322: Type 'string' is not assignable to type 'number'. + return text.length; + ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + })()] + ~~~~~~~~~ +!!! error TS1164: Computed property names are not allowed in enums. + } \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/incompatibleAssignmentInEnumComputedNameNoFlake.js b/tsc/testdata/baselines/reference/compiler/incompatibleAssignmentInEnumComputedNameNoFlake.js new file mode 100644 index 0000000000000..3a16dfec70b25 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/incompatibleAssignmentInEnumComputedNameNoFlake.js @@ -0,0 +1,36 @@ +//// [tests/cases/compiler/incompatibleAssignmentInEnumComputedNameNoFlake.ts] //// + +//// [incompatibleAssignmentInEnumComputedNameNoFlake.ts] +// TS2322: Type 'string' is not assignable to type 'number'. +let target: number; +enum E { + [(() => { + const text = (target = "value"); + return text.length; + })()] +} + +//// [incompatibleAssignmentInEnumComputedNameNoFlake.js] +"use strict"; +// TS2322: Type 'string' is not assignable to type 'number'. +let target; +var E; +(function (E) { + E[E[(() => { + const text = (target = "value"); + return text.length; + })()] = 0] = (() => { + const text = (target = "value"); + return text.length; + })(); +})(E || (E = {})); + + +//// [incompatibleAssignmentInEnumComputedNameNoFlake.d.ts] +declare let target: number; +declare enum E { + [(() => { + const text = (target = "value"); + return text.length; + })()] = 0 +} diff --git a/tsc/testdata/baselines/reference/compiler/incompatibleAssignmentInEnumComputedNameNoFlake.symbols b/tsc/testdata/baselines/reference/compiler/incompatibleAssignmentInEnumComputedNameNoFlake.symbols new file mode 100644 index 0000000000000..e32f5b8221904 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/incompatibleAssignmentInEnumComputedNameNoFlake.symbols @@ -0,0 +1,27 @@ +//// [tests/cases/compiler/incompatibleAssignmentInEnumComputedNameNoFlake.ts] //// + +=== incompatibleAssignmentInEnumComputedNameNoFlake.ts === +// TS2322: Type 'string' is not assignable to type 'number'. +let target: number; +>target : Symbol(target, Decl(incompatibleAssignmentInEnumComputedNameNoFlake.ts, 1, 3)) + +enum E { +>E : Symbol(E, Decl(incompatibleAssignmentInEnumComputedNameNoFlake.ts, 1, 19)) + + [(() => { +>[(() => { const text = (target = "value"); return text.length; })()] : Symbol(E[(() => { + const text = (target = "value"); + return text.length; + })()], Decl(incompatibleAssignmentInEnumComputedNameNoFlake.ts, 2, 8)) + + const text = (target = "value"); +>text : Symbol(text, Decl(incompatibleAssignmentInEnumComputedNameNoFlake.ts, 4, 13)) +>target : Symbol(target, Decl(incompatibleAssignmentInEnumComputedNameNoFlake.ts, 1, 3)) + + return text.length; +>text.length : Symbol(String.length, Decl(lib.es5.d.ts, --, --)) +>text : Symbol(text, Decl(incompatibleAssignmentInEnumComputedNameNoFlake.ts, 4, 13)) +>length : Symbol(String.length, Decl(lib.es5.d.ts, --, --)) + + })()] +} diff --git a/tsc/testdata/baselines/reference/compiler/incompatibleAssignmentInEnumComputedNameNoFlake.types b/tsc/testdata/baselines/reference/compiler/incompatibleAssignmentInEnumComputedNameNoFlake.types new file mode 100644 index 0000000000000..51264407c3e62 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/incompatibleAssignmentInEnumComputedNameNoFlake.types @@ -0,0 +1,30 @@ +//// [tests/cases/compiler/incompatibleAssignmentInEnumComputedNameNoFlake.ts] //// + +=== incompatibleAssignmentInEnumComputedNameNoFlake.ts === +// TS2322: Type 'string' is not assignable to type 'number'. +let target: number; +>target : number + +enum E { +>E : E + + [(() => { +>[(() => { const text = (target = "value"); return text.length; })()] : E +>(() => { const text = (target = "value"); return text.length; })() : number +>(() => { const text = (target = "value"); return text.length; }) : () => number +>() => { const text = (target = "value"); return text.length; } : () => number + + const text = (target = "value"); +>text : "value" +>(target = "value") : "value" +>target = "value" : "value" +>target : number +>"value" : "value" + + return text.length; +>text.length : number +>text : "value" +>length : number + + })()] +} diff --git a/tsc/testdata/baselines/reference/compiler/localReferenceInEnumComputedNameNoFlake.errors.txt b/tsc/testdata/baselines/reference/compiler/localReferenceInEnumComputedNameNoFlake.errors.txt new file mode 100644 index 0000000000000..f0460b2fde0d1 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/localReferenceInEnumComputedNameNoFlake.errors.txt @@ -0,0 +1,12 @@ +localReferenceInEnumComputedNameNoFlake.ts(4,5): error TS1164: Computed property names are not allowed in enums. + + +==== localReferenceInEnumComputedNameNoFlake.ts (1 errors) ==== + // TS6133 must not report 'unused' as unread: the computed name references it. + const unused = { value: 1 }; + export enum Example { + [unused.value] = 0 + ~~~~~~~~~~~~~~ +!!! error TS1164: Computed property names are not allowed in enums. + } + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/localReferenceInEnumComputedNameNoFlake.js b/tsc/testdata/baselines/reference/compiler/localReferenceInEnumComputedNameNoFlake.js new file mode 100644 index 0000000000000..2403711efa5da --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/localReferenceInEnumComputedNameNoFlake.js @@ -0,0 +1,23 @@ +//// [tests/cases/compiler/localReferenceInEnumComputedNameNoFlake.ts] //// + +//// [localReferenceInEnumComputedNameNoFlake.ts] +// TS6133 must not report 'unused' as unread: the computed name references it. +const unused = { value: 1 }; +export enum Example { + [unused.value] = 0 +} + + +//// [localReferenceInEnumComputedNameNoFlake.js] +// TS6133 must not report 'unused' as unread: the computed name references it. +const unused = { value: 1 }; +export var Example; +(function (Example) { + Example[Example[unused.value] = 0] = unused.value; +})(Example || (Example = {})); + + +//// [localReferenceInEnumComputedNameNoFlake.d.ts] +export declare enum Example { + [unused.value] = 0 +} diff --git a/tsc/testdata/baselines/reference/compiler/localReferenceInEnumComputedNameNoFlake.symbols b/tsc/testdata/baselines/reference/compiler/localReferenceInEnumComputedNameNoFlake.symbols new file mode 100644 index 0000000000000..a3803c987ac7b --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/localReferenceInEnumComputedNameNoFlake.symbols @@ -0,0 +1,18 @@ +//// [tests/cases/compiler/localReferenceInEnumComputedNameNoFlake.ts] //// + +=== localReferenceInEnumComputedNameNoFlake.ts === +// TS6133 must not report 'unused' as unread: the computed name references it. +const unused = { value: 1 }; +>unused : Symbol(unused, Decl(localReferenceInEnumComputedNameNoFlake.ts, 1, 5)) +>value : Symbol(value, Decl(localReferenceInEnumComputedNameNoFlake.ts, 1, 16)) + +export enum Example { +>Example : Symbol(Example, Decl(localReferenceInEnumComputedNameNoFlake.ts, 1, 28)) + + [unused.value] = 0 +>[unused.value] : Symbol(Example[unused.value], Decl(localReferenceInEnumComputedNameNoFlake.ts, 2, 21)) +>unused.value : Symbol(value, Decl(localReferenceInEnumComputedNameNoFlake.ts, 1, 16)) +>unused : Symbol(unused, Decl(localReferenceInEnumComputedNameNoFlake.ts, 1, 5)) +>value : Symbol(value, Decl(localReferenceInEnumComputedNameNoFlake.ts, 1, 16)) +} + diff --git a/tsc/testdata/baselines/reference/compiler/localReferenceInEnumComputedNameNoFlake.types b/tsc/testdata/baselines/reference/compiler/localReferenceInEnumComputedNameNoFlake.types new file mode 100644 index 0000000000000..890c76053dd8c --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/localReferenceInEnumComputedNameNoFlake.types @@ -0,0 +1,21 @@ +//// [tests/cases/compiler/localReferenceInEnumComputedNameNoFlake.ts] //// + +=== localReferenceInEnumComputedNameNoFlake.ts === +// TS6133 must not report 'unused' as unread: the computed name references it. +const unused = { value: 1 }; +>unused : { value: number; } +>{ value: 1 } : { value: number; } +>value : number +>1 : 1 + +export enum Example { +>Example : Example + + [unused.value] = 0 +>[unused.value] : Example +>unused.value : number +>unused : { value: number; } +>value : number +>0 : 0 +} + diff --git a/tsc/testdata/baselines/reference/compiler/missingIdentifierInEnumComputedNameNoFlake.errors.txt b/tsc/testdata/baselines/reference/compiler/missingIdentifierInEnumComputedNameNoFlake.errors.txt new file mode 100644 index 0000000000000..d98ab942e14b7 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/missingIdentifierInEnumComputedNameNoFlake.errors.txt @@ -0,0 +1,13 @@ +missingIdentifierInEnumComputedNameNoFlake.ts(3,5): error TS1164: Computed property names are not allowed in enums. +missingIdentifierInEnumComputedNameNoFlake.ts(3,6): error TS2304: Cannot find name 'missing'. + + +==== missingIdentifierInEnumComputedNameNoFlake.ts (2 errors) ==== + // TS2304: Cannot find name 'missing'. + export enum Values { + [missing.value] = 1, + ~~~~~~~~~~~~~~~ +!!! error TS1164: Computed property names are not allowed in enums. + ~~~~~~~ +!!! error TS2304: Cannot find name 'missing'. + } \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/missingIdentifierInEnumComputedNameNoFlake.js b/tsc/testdata/baselines/reference/compiler/missingIdentifierInEnumComputedNameNoFlake.js new file mode 100644 index 0000000000000..18eafe0532251 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/missingIdentifierInEnumComputedNameNoFlake.js @@ -0,0 +1,20 @@ +//// [tests/cases/compiler/missingIdentifierInEnumComputedNameNoFlake.ts] //// + +//// [missingIdentifierInEnumComputedNameNoFlake.ts] +// TS2304: Cannot find name 'missing'. +export enum Values { + [missing.value] = 1, +} + +//// [missingIdentifierInEnumComputedNameNoFlake.js] +// TS2304: Cannot find name 'missing'. +export var Values; +(function (Values) { + Values[Values[missing.value] = 1] = missing.value; +})(Values || (Values = {})); + + +//// [missingIdentifierInEnumComputedNameNoFlake.d.ts] +export declare enum Values { + [missing.value] = 1 +} diff --git a/tsc/testdata/baselines/reference/compiler/missingIdentifierInEnumComputedNameNoFlake.symbols b/tsc/testdata/baselines/reference/compiler/missingIdentifierInEnumComputedNameNoFlake.symbols new file mode 100644 index 0000000000000..2307fe891e015 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/missingIdentifierInEnumComputedNameNoFlake.symbols @@ -0,0 +1,10 @@ +//// [tests/cases/compiler/missingIdentifierInEnumComputedNameNoFlake.ts] //// + +=== missingIdentifierInEnumComputedNameNoFlake.ts === +// TS2304: Cannot find name 'missing'. +export enum Values { +>Values : Symbol(Values, Decl(missingIdentifierInEnumComputedNameNoFlake.ts, 0, 0)) + + [missing.value] = 1, +>[missing.value] : Symbol(Values[missing.value], Decl(missingIdentifierInEnumComputedNameNoFlake.ts, 1, 20)) +} diff --git a/tsc/testdata/baselines/reference/compiler/missingIdentifierInEnumComputedNameNoFlake.types b/tsc/testdata/baselines/reference/compiler/missingIdentifierInEnumComputedNameNoFlake.types new file mode 100644 index 0000000000000..c8d573b84c859 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/missingIdentifierInEnumComputedNameNoFlake.types @@ -0,0 +1,14 @@ +//// [tests/cases/compiler/missingIdentifierInEnumComputedNameNoFlake.ts] //// + +=== missingIdentifierInEnumComputedNameNoFlake.ts === +// TS2304: Cannot find name 'missing'. +export enum Values { +>Values : Values + + [missing.value] = 1, +>[missing.value] : Values +>missing.value : any +>missing : any +>value : any +>1 : 1 +} diff --git a/tsc/testdata/baselines/reference/compiler/missingModuleInEnumComputedNameNoFlake.errors.txt b/tsc/testdata/baselines/reference/compiler/missingModuleInEnumComputedNameNoFlake.errors.txt new file mode 100644 index 0000000000000..33dd08e97015f --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/missingModuleInEnumComputedNameNoFlake.errors.txt @@ -0,0 +1,16 @@ +missingModuleInEnumComputedNameNoFlake.ts(3,5): error TS1164: Computed property names are not allowed in enums. +missingModuleInEnumComputedNameNoFlake.ts(3,13): error TS2307: Cannot find module 'missing' or its corresponding type declarations. +missingModuleInEnumComputedNameNoFlake.ts(3,24): error TS2339: Property 'value' does not exist on type 'Promise'. + + +==== missingModuleInEnumComputedNameNoFlake.ts (3 errors) ==== + // TS2307: Cannot find module 'missing' or its corresponding type declarations. + export enum Values { + [import("missing").value] = 1, + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS1164: Computed property names are not allowed in enums. + ~~~~~~~~~ +!!! error TS2307: Cannot find module 'missing' or its corresponding type declarations. + ~~~~~ +!!! error TS2339: Property 'value' does not exist on type 'Promise'. + } \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/missingModuleInEnumComputedNameNoFlake.js b/tsc/testdata/baselines/reference/compiler/missingModuleInEnumComputedNameNoFlake.js new file mode 100644 index 0000000000000..4ee475808affa --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/missingModuleInEnumComputedNameNoFlake.js @@ -0,0 +1,20 @@ +//// [tests/cases/compiler/missingModuleInEnumComputedNameNoFlake.ts] //// + +//// [missingModuleInEnumComputedNameNoFlake.ts] +// TS2307: Cannot find module 'missing' or its corresponding type declarations. +export enum Values { + [import("missing").value] = 1, +} + +//// [missingModuleInEnumComputedNameNoFlake.js] +// TS2307: Cannot find module 'missing' or its corresponding type declarations. +export var Values; +(function (Values) { + Values[Values[import("missing").value] = 1] = import("missing").value; +})(Values || (Values = {})); + + +//// [missingModuleInEnumComputedNameNoFlake.d.ts] +export declare enum Values { + [import("missing").value] = 1 +} diff --git a/tsc/testdata/baselines/reference/compiler/missingModuleInEnumComputedNameNoFlake.symbols b/tsc/testdata/baselines/reference/compiler/missingModuleInEnumComputedNameNoFlake.symbols new file mode 100644 index 0000000000000..421d2003c4401 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/missingModuleInEnumComputedNameNoFlake.symbols @@ -0,0 +1,10 @@ +//// [tests/cases/compiler/missingModuleInEnumComputedNameNoFlake.ts] //// + +=== missingModuleInEnumComputedNameNoFlake.ts === +// TS2307: Cannot find module 'missing' or its corresponding type declarations. +export enum Values { +>Values : Symbol(Values, Decl(missingModuleInEnumComputedNameNoFlake.ts, 0, 0)) + + [import("missing").value] = 1, +>[import("missing").value] : Symbol(Values[import("missing").value], Decl(missingModuleInEnumComputedNameNoFlake.ts, 1, 20)) +} diff --git a/tsc/testdata/baselines/reference/compiler/missingModuleInEnumComputedNameNoFlake.types b/tsc/testdata/baselines/reference/compiler/missingModuleInEnumComputedNameNoFlake.types new file mode 100644 index 0000000000000..efa52a6489c7e --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/missingModuleInEnumComputedNameNoFlake.types @@ -0,0 +1,15 @@ +//// [tests/cases/compiler/missingModuleInEnumComputedNameNoFlake.ts] //// + +=== missingModuleInEnumComputedNameNoFlake.ts === +// TS2307: Cannot find module 'missing' or its corresponding type declarations. +export enum Values { +>Values : Values + + [import("missing").value] = 1, +>[import("missing").value] : Values +>import("missing").value : any +>import("missing") : Promise +>"missing" : "missing" +>value : any +>1 : 1 +} diff --git a/tsc/testdata/baselines/reference/compiler/misspelledIdentifierInEnumComputedNameNoFlake.errors.txt b/tsc/testdata/baselines/reference/compiler/misspelledIdentifierInEnumComputedNameNoFlake.errors.txt new file mode 100644 index 0000000000000..b36a20c10d753 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/misspelledIdentifierInEnumComputedNameNoFlake.errors.txt @@ -0,0 +1,15 @@ +misspelledIdentifierInEnumComputedNameNoFlake.ts(4,5): error TS1164: Computed property names are not allowed in enums. +misspelledIdentifierInEnumComputedNameNoFlake.ts(4,6): error TS2552: Cannot find name 'existingVale'. Did you mean 'existingValue'? + + +==== misspelledIdentifierInEnumComputedNameNoFlake.ts (2 errors) ==== + // TS2552: Cannot find name 'existingVale'. Did you mean 'existingValue'? + declare const existingValue: { value: number }; + export enum Values { + [existingVale.value] = 1, + ~~~~~~~~~~~~~~~~~~~~ +!!! error TS1164: Computed property names are not allowed in enums. + ~~~~~~~~~~~~ +!!! error TS2552: Cannot find name 'existingVale'. Did you mean 'existingValue'? +!!! related TS2728 misspelledIdentifierInEnumComputedNameNoFlake.ts:2:15: 'existingValue' is declared here. + } \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/misspelledIdentifierInEnumComputedNameNoFlake.js b/tsc/testdata/baselines/reference/compiler/misspelledIdentifierInEnumComputedNameNoFlake.js new file mode 100644 index 0000000000000..953ad74990ad9 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/misspelledIdentifierInEnumComputedNameNoFlake.js @@ -0,0 +1,20 @@ +//// [tests/cases/compiler/misspelledIdentifierInEnumComputedNameNoFlake.ts] //// + +//// [misspelledIdentifierInEnumComputedNameNoFlake.ts] +// TS2552: Cannot find name 'existingVale'. Did you mean 'existingValue'? +declare const existingValue: { value: number }; +export enum Values { + [existingVale.value] = 1, +} + +//// [misspelledIdentifierInEnumComputedNameNoFlake.js] +export var Values; +(function (Values) { + Values[Values[existingVale.value] = 1] = existingVale.value; +})(Values || (Values = {})); + + +//// [misspelledIdentifierInEnumComputedNameNoFlake.d.ts] +export declare enum Values { + [existingVale.value] = 1 +} diff --git a/tsc/testdata/baselines/reference/compiler/misspelledIdentifierInEnumComputedNameNoFlake.symbols b/tsc/testdata/baselines/reference/compiler/misspelledIdentifierInEnumComputedNameNoFlake.symbols new file mode 100644 index 0000000000000..b01d18c4efe67 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/misspelledIdentifierInEnumComputedNameNoFlake.symbols @@ -0,0 +1,14 @@ +//// [tests/cases/compiler/misspelledIdentifierInEnumComputedNameNoFlake.ts] //// + +=== misspelledIdentifierInEnumComputedNameNoFlake.ts === +// TS2552: Cannot find name 'existingVale'. Did you mean 'existingValue'? +declare const existingValue: { value: number }; +>existingValue : Symbol(existingValue, Decl(misspelledIdentifierInEnumComputedNameNoFlake.ts, 1, 13)) +>value : Symbol(value, Decl(misspelledIdentifierInEnumComputedNameNoFlake.ts, 1, 30)) + +export enum Values { +>Values : Symbol(Values, Decl(misspelledIdentifierInEnumComputedNameNoFlake.ts, 1, 47)) + + [existingVale.value] = 1, +>[existingVale.value] : Symbol(Values[existingVale.value], Decl(misspelledIdentifierInEnumComputedNameNoFlake.ts, 2, 20)) +} diff --git a/tsc/testdata/baselines/reference/compiler/misspelledIdentifierInEnumComputedNameNoFlake.types b/tsc/testdata/baselines/reference/compiler/misspelledIdentifierInEnumComputedNameNoFlake.types new file mode 100644 index 0000000000000..6298c2de7b1c1 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/misspelledIdentifierInEnumComputedNameNoFlake.types @@ -0,0 +1,18 @@ +//// [tests/cases/compiler/misspelledIdentifierInEnumComputedNameNoFlake.ts] //// + +=== misspelledIdentifierInEnumComputedNameNoFlake.ts === +// TS2552: Cannot find name 'existingVale'. Did you mean 'existingValue'? +declare const existingValue: { value: number }; +>existingValue : { value: number; } +>value : number + +export enum Values { +>Values : Values + + [existingVale.value] = 1, +>[existingVale.value] : Values +>existingVale.value : any +>existingVale : any +>value : any +>1 : 1 +} diff --git a/tsc/testdata/baselines/reference/compiler/redundantDeclareInEnumComputedNameNoFlake.errors.txt b/tsc/testdata/baselines/reference/compiler/redundantDeclareInEnumComputedNameNoFlake.errors.txt new file mode 100644 index 0000000000000..dc43f07a66bef --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/redundantDeclareInEnumComputedNameNoFlake.errors.txt @@ -0,0 +1,24 @@ +redundantDeclareInEnumComputedNameNoFlake.ts(3,5): error TS1164: Computed property names are not allowed in enums. +redundantDeclareInEnumComputedNameNoFlake.ts(4,9): error TS1235: A namespace declaration is only allowed at the top level of a namespace or module. +redundantDeclareInEnumComputedNameNoFlake.ts(5,13): error TS1038: A 'declare' modifier cannot be used in an already ambient context. + + +==== redundantDeclareInEnumComputedNameNoFlake.ts (3 errors) ==== + // TS1038: A 'declare' modifier cannot be used in an already ambient context. + export enum Values { + [(function () { + ~~~~~~~~~~~~~~~ + declare namespace Nested { + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~ +!!! error TS1235: A namespace declaration is only allowed at the top level of a namespace or module. + declare const value: number; + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~ +!!! error TS1038: A 'declare' modifier cannot be used in an already ambient context. + } + ~~~~~~~~~ + }).name] = 1, + ~~~~~~~~~~~~ +!!! error TS1164: Computed property names are not allowed in enums. + } \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/redundantDeclareInEnumComputedNameNoFlake.js b/tsc/testdata/baselines/reference/compiler/redundantDeclareInEnumComputedNameNoFlake.js new file mode 100644 index 0000000000000..b204092a6b8ec --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/redundantDeclareInEnumComputedNameNoFlake.js @@ -0,0 +1,30 @@ +//// [tests/cases/compiler/redundantDeclareInEnumComputedNameNoFlake.ts] //// + +//// [redundantDeclareInEnumComputedNameNoFlake.ts] +// TS1038: A 'declare' modifier cannot be used in an already ambient context. +export enum Values { + [(function () { + declare namespace Nested { + declare const value: number; + } + }).name] = 1, +} + +//// [redundantDeclareInEnumComputedNameNoFlake.js] +// TS1038: A 'declare' modifier cannot be used in an already ambient context. +export var Values; +(function (Values) { + Values[Values[(function () { + }).name] = 1] = (function () { + }).name; +})(Values || (Values = {})); + + +//// [redundantDeclareInEnumComputedNameNoFlake.d.ts] +export declare enum Values { + [(function () { + declare namespace Nested { + declare const value: number; + } + }).name] = 1 +} diff --git a/tsc/testdata/baselines/reference/compiler/redundantDeclareInEnumComputedNameNoFlake.symbols b/tsc/testdata/baselines/reference/compiler/redundantDeclareInEnumComputedNameNoFlake.symbols new file mode 100644 index 0000000000000..aced0e374f737 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/redundantDeclareInEnumComputedNameNoFlake.symbols @@ -0,0 +1,24 @@ +//// [tests/cases/compiler/redundantDeclareInEnumComputedNameNoFlake.ts] //// + +=== redundantDeclareInEnumComputedNameNoFlake.ts === +// TS1038: A 'declare' modifier cannot be used in an already ambient context. +export enum Values { +>Values : Symbol(Values, Decl(redundantDeclareInEnumComputedNameNoFlake.ts, 0, 0)) + + [(function () { +>[(function () { declare namespace Nested { declare const value: number; } }).name] : Symbol(Values[(function () { + declare namespace Nested { + declare const value: number; + } + }).name], Decl(redundantDeclareInEnumComputedNameNoFlake.ts, 1, 20)) +>(function () { declare namespace Nested { declare const value: number; } }).name : Symbol(Function.name, Decl(lib.es2015.core.d.ts, --, --)) + + declare namespace Nested { +>Nested : Symbol(Nested, Decl(redundantDeclareInEnumComputedNameNoFlake.ts, 2, 19)) + + declare const value: number; +>value : Symbol(value, Decl(redundantDeclareInEnumComputedNameNoFlake.ts, 4, 25)) + } + }).name] = 1, +>name : Symbol(Function.name, Decl(lib.es2015.core.d.ts, --, --)) +} diff --git a/tsc/testdata/baselines/reference/compiler/redundantDeclareInEnumComputedNameNoFlake.types b/tsc/testdata/baselines/reference/compiler/redundantDeclareInEnumComputedNameNoFlake.types new file mode 100644 index 0000000000000..76bb3fe0a8f06 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/redundantDeclareInEnumComputedNameNoFlake.types @@ -0,0 +1,23 @@ +//// [tests/cases/compiler/redundantDeclareInEnumComputedNameNoFlake.ts] //// + +=== redundantDeclareInEnumComputedNameNoFlake.ts === +// TS1038: A 'declare' modifier cannot be used in an already ambient context. +export enum Values { +>Values : Values + + [(function () { +>[(function () { declare namespace Nested { declare const value: number; } }).name] : Values +>(function () { declare namespace Nested { declare const value: number; } }).name : string +>(function () { declare namespace Nested { declare const value: number; } }) : () => void +>function () { declare namespace Nested { declare const value: number; } } : () => void + + declare namespace Nested { +>Nested : typeof Nested + + declare const value: number; +>value : number + } + }).name] = 1, +>name : string +>1 : 1 +} diff --git a/tsc/testdata/baselines/reference/compiler/stringIncrementInEnumComputedNameNoFlake.errors.txt b/tsc/testdata/baselines/reference/compiler/stringIncrementInEnumComputedNameNoFlake.errors.txt new file mode 100644 index 0000000000000..674fbd06c85d7 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/stringIncrementInEnumComputedNameNoFlake.errors.txt @@ -0,0 +1,15 @@ +stringIncrementInEnumComputedNameNoFlake.ts(4,5): error TS1164: Computed property names are not allowed in enums. +stringIncrementInEnumComputedNameNoFlake.ts(4,7): error TS2356: An arithmetic operand must be of type 'any', 'number', 'bigint' or an enum type. + + +==== stringIncrementInEnumComputedNameNoFlake.ts (2 errors) ==== + // TS2356: An arithmetic operand must be of type 'any', 'number', 'bigint' or an enum type. + declare let text: string; + export enum Values { + [(text++).valueOf] = 1, + ~~~~~~~~~~~~~~~~~~ +!!! error TS1164: Computed property names are not allowed in enums. + ~~~~ +!!! error TS2356: An arithmetic operand must be of type 'any', 'number', 'bigint' or an enum type. + } + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/stringIncrementInEnumComputedNameNoFlake.js b/tsc/testdata/baselines/reference/compiler/stringIncrementInEnumComputedNameNoFlake.js new file mode 100644 index 0000000000000..368308099d0e6 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/stringIncrementInEnumComputedNameNoFlake.js @@ -0,0 +1,21 @@ +//// [tests/cases/compiler/stringIncrementInEnumComputedNameNoFlake.ts] //// + +//// [stringIncrementInEnumComputedNameNoFlake.ts] +// TS2356: An arithmetic operand must be of type 'any', 'number', 'bigint' or an enum type. +declare let text: string; +export enum Values { + [(text++).valueOf] = 1, +} + + +//// [stringIncrementInEnumComputedNameNoFlake.js] +export var Values; +(function (Values) { + Values[Values[(text++).valueOf] = 1] = (text++).valueOf; +})(Values || (Values = {})); + + +//// [stringIncrementInEnumComputedNameNoFlake.d.ts] +export declare enum Values { + [(text++).valueOf] = 1 +} diff --git a/tsc/testdata/baselines/reference/compiler/stringIncrementInEnumComputedNameNoFlake.symbols b/tsc/testdata/baselines/reference/compiler/stringIncrementInEnumComputedNameNoFlake.symbols new file mode 100644 index 0000000000000..ffa99cdd00dd3 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/stringIncrementInEnumComputedNameNoFlake.symbols @@ -0,0 +1,17 @@ +//// [tests/cases/compiler/stringIncrementInEnumComputedNameNoFlake.ts] //// + +=== stringIncrementInEnumComputedNameNoFlake.ts === +// TS2356: An arithmetic operand must be of type 'any', 'number', 'bigint' or an enum type. +declare let text: string; +>text : Symbol(text, Decl(stringIncrementInEnumComputedNameNoFlake.ts, 1, 11)) + +export enum Values { +>Values : Symbol(Values, Decl(stringIncrementInEnumComputedNameNoFlake.ts, 1, 25)) + + [(text++).valueOf] = 1, +>[(text++).valueOf] : Symbol(Values[(text++).valueOf], Decl(stringIncrementInEnumComputedNameNoFlake.ts, 2, 20)) +>(text++).valueOf : Symbol(Number.valueOf, Decl(lib.es5.d.ts, --, --)) +>text : Symbol(text, Decl(stringIncrementInEnumComputedNameNoFlake.ts, 1, 11)) +>valueOf : Symbol(Number.valueOf, Decl(lib.es5.d.ts, --, --)) +} + diff --git a/tsc/testdata/baselines/reference/compiler/stringIncrementInEnumComputedNameNoFlake.types b/tsc/testdata/baselines/reference/compiler/stringIncrementInEnumComputedNameNoFlake.types new file mode 100644 index 0000000000000..57d72f61e7f64 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/stringIncrementInEnumComputedNameNoFlake.types @@ -0,0 +1,20 @@ +//// [tests/cases/compiler/stringIncrementInEnumComputedNameNoFlake.ts] //// + +=== stringIncrementInEnumComputedNameNoFlake.ts === +// TS2356: An arithmetic operand must be of type 'any', 'number', 'bigint' or an enum type. +declare let text: string; +>text : string + +export enum Values { +>Values : Values + + [(text++).valueOf] = 1, +>[(text++).valueOf] : Values +>(text++).valueOf : () => number +>(text++) : number +>text++ : number +>text : string +>valueOf : () => number +>1 : 1 +} + diff --git a/tsc/testdata/baselines/reference/compiler/unusedCommaOperandInEnumComputedNameNoFlake.errors.txt b/tsc/testdata/baselines/reference/compiler/unusedCommaOperandInEnumComputedNameNoFlake.errors.txt new file mode 100644 index 0000000000000..e0597beb4a84d --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/unusedCommaOperandInEnumComputedNameNoFlake.errors.txt @@ -0,0 +1,14 @@ +unusedCommaOperandInEnumComputedNameNoFlake.ts(3,5): error TS1164: Computed property names are not allowed in enums. +unusedCommaOperandInEnumComputedNameNoFlake.ts(3,7): error TS2695: Left side of comma operator is unused and has no side effects. + + +==== unusedCommaOperandInEnumComputedNameNoFlake.ts (2 errors) ==== + // TS2695: Left side of comma operator is unused and has no side effects. + export enum Values { + [(1, 2).valueOf] = 1, + ~~~~~~~~~~~~~~~~ +!!! error TS1164: Computed property names are not allowed in enums. + ~ +!!! error TS2695: Left side of comma operator is unused and has no side effects. + } + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/unusedCommaOperandInEnumComputedNameNoFlake.js b/tsc/testdata/baselines/reference/compiler/unusedCommaOperandInEnumComputedNameNoFlake.js new file mode 100644 index 0000000000000..ee99a0266ff2a --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/unusedCommaOperandInEnumComputedNameNoFlake.js @@ -0,0 +1,21 @@ +//// [tests/cases/compiler/unusedCommaOperandInEnumComputedNameNoFlake.ts] //// + +//// [unusedCommaOperandInEnumComputedNameNoFlake.ts] +// TS2695: Left side of comma operator is unused and has no side effects. +export enum Values { + [(1, 2).valueOf] = 1, +} + + +//// [unusedCommaOperandInEnumComputedNameNoFlake.js] +// TS2695: Left side of comma operator is unused and has no side effects. +export var Values; +(function (Values) { + Values[Values[(1, 2).valueOf] = 1] = (1, 2).valueOf; +})(Values || (Values = {})); + + +//// [unusedCommaOperandInEnumComputedNameNoFlake.d.ts] +export declare enum Values { + [(1, 2).valueOf] = 1 +} diff --git a/tsc/testdata/baselines/reference/compiler/unusedCommaOperandInEnumComputedNameNoFlake.symbols b/tsc/testdata/baselines/reference/compiler/unusedCommaOperandInEnumComputedNameNoFlake.symbols new file mode 100644 index 0000000000000..a2ee9daa5a86c --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/unusedCommaOperandInEnumComputedNameNoFlake.symbols @@ -0,0 +1,13 @@ +//// [tests/cases/compiler/unusedCommaOperandInEnumComputedNameNoFlake.ts] //// + +=== unusedCommaOperandInEnumComputedNameNoFlake.ts === +// TS2695: Left side of comma operator is unused and has no side effects. +export enum Values { +>Values : Symbol(Values, Decl(unusedCommaOperandInEnumComputedNameNoFlake.ts, 0, 0)) + + [(1, 2).valueOf] = 1, +>[(1, 2).valueOf] : Symbol(Values[(1, 2).valueOf], Decl(unusedCommaOperandInEnumComputedNameNoFlake.ts, 1, 20)) +>(1, 2).valueOf : Symbol(Number.valueOf, Decl(lib.es5.d.ts, --, --)) +>valueOf : Symbol(Number.valueOf, Decl(lib.es5.d.ts, --, --)) +} + diff --git a/tsc/testdata/baselines/reference/compiler/unusedCommaOperandInEnumComputedNameNoFlake.types b/tsc/testdata/baselines/reference/compiler/unusedCommaOperandInEnumComputedNameNoFlake.types new file mode 100644 index 0000000000000..1f4335755c853 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/unusedCommaOperandInEnumComputedNameNoFlake.types @@ -0,0 +1,18 @@ +//// [tests/cases/compiler/unusedCommaOperandInEnumComputedNameNoFlake.ts] //// + +=== unusedCommaOperandInEnumComputedNameNoFlake.ts === +// TS2695: Left side of comma operator is unused and has no side effects. +export enum Values { +>Values : Values + + [(1, 2).valueOf] = 1, +>[(1, 2).valueOf] : Values +>(1, 2).valueOf : () => number +>(1, 2) : 2 +>1, 2 : 2 +>1 : 1 +>2 : 2 +>valueOf : () => number +>1 : 1 +} + diff --git a/tsc/testdata/baselines/reference/conformance/parserComputedPropertyName16.errors.txt b/tsc/testdata/baselines/reference/conformance/parserComputedPropertyName16.errors.txt index ed4c42d85207f..4bcc08d5ca83a 100644 --- a/tsc/testdata/baselines/reference/conformance/parserComputedPropertyName16.errors.txt +++ b/tsc/testdata/baselines/reference/conformance/parserComputedPropertyName16.errors.txt @@ -1,9 +1,13 @@ parserComputedPropertyName16.ts(2,3): error TS1164: Computed property names are not allowed in enums. +parserComputedPropertyName16.ts(2,4): error TS2552: Cannot find name 'e'. Did you mean 'E'? -==== parserComputedPropertyName16.ts (1 errors) ==== +==== parserComputedPropertyName16.ts (2 errors) ==== enum E { [e] = 1 ~~~ !!! error TS1164: Computed property names are not allowed in enums. + ~ +!!! error TS2552: Cannot find name 'e'. Did you mean 'E'? +!!! related TS2728 parserComputedPropertyName16.ts:1:6: 'E' is declared here. } \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/conformance/parserComputedPropertyName26.errors.txt b/tsc/testdata/baselines/reference/conformance/parserComputedPropertyName26.errors.txt index 296186bb808fa..fc196167bf96e 100644 --- a/tsc/testdata/baselines/reference/conformance/parserComputedPropertyName26.errors.txt +++ b/tsc/testdata/baselines/reference/conformance/parserComputedPropertyName26.errors.txt @@ -1,13 +1,17 @@ parserComputedPropertyName26.ts(3,5): error TS1164: Computed property names are not allowed in enums. +parserComputedPropertyName26.ts(3,6): error TS2552: Cannot find name 'e'. Did you mean 'E'? parserComputedPropertyName26.ts(4,6): error TS2304: Cannot find name 'e2'. -==== parserComputedPropertyName26.ts (2 errors) ==== +==== parserComputedPropertyName26.ts (3 errors) ==== enum E { // No ASI [e] = 0 ~~~ !!! error TS1164: Computed property names are not allowed in enums. + ~ +!!! error TS2552: Cannot find name 'e'. Did you mean 'E'? +!!! related TS2728 parserComputedPropertyName26.ts:1:6: 'E' is declared here. [e2] = 1 ~~ !!! error TS2304: Cannot find name 'e2'. diff --git a/tsc/testdata/baselines/reference/conformance/parserComputedPropertyName30.errors.txt b/tsc/testdata/baselines/reference/conformance/parserComputedPropertyName30.errors.txt index aa41bbefde068..c06d3e85805de 100644 --- a/tsc/testdata/baselines/reference/conformance/parserComputedPropertyName30.errors.txt +++ b/tsc/testdata/baselines/reference/conformance/parserComputedPropertyName30.errors.txt @@ -1,15 +1,20 @@ parserComputedPropertyName30.ts(3,5): error TS1164: Computed property names are not allowed in enums. +parserComputedPropertyName30.ts(3,6): error TS2552: Cannot find name 'e'. Did you mean 'E'? parserComputedPropertyName30.ts(3,11): error TS2304: Cannot find name 'id'. parserComputedPropertyName30.ts(4,5): error TS1357: An enum member name must be followed by a ',', '=', or '}'. parserComputedPropertyName30.ts(4,5): error TS1164: Computed property names are not allowed in enums. +parserComputedPropertyName30.ts(4,6): error TS2304: Cannot find name 'e2'. -==== parserComputedPropertyName30.ts (4 errors) ==== +==== parserComputedPropertyName30.ts (6 errors) ==== enum E { // no ASI, comma expected [e] = id++ ~~~ !!! error TS1164: Computed property names are not allowed in enums. + ~ +!!! error TS2552: Cannot find name 'e'. Did you mean 'E'? +!!! related TS2728 parserComputedPropertyName30.ts:1:6: 'E' is declared here. ~~ !!! error TS2304: Cannot find name 'id'. [e2] = 1 @@ -17,4 +22,6 @@ parserComputedPropertyName30.ts(4,5): error TS1164: Computed property names are !!! error TS1357: An enum member name must be followed by a ',', '=', or '}'. ~~~~ !!! error TS1164: Computed property names are not allowed in enums. + ~~ +!!! error TS2304: Cannot find name 'e2'. } \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/conformance/parserComputedPropertyName34.errors.txt b/tsc/testdata/baselines/reference/conformance/parserComputedPropertyName34.errors.txt index 6aae1b79ab3d0..9ad1c9cb23295 100644 --- a/tsc/testdata/baselines/reference/conformance/parserComputedPropertyName34.errors.txt +++ b/tsc/testdata/baselines/reference/conformance/parserComputedPropertyName34.errors.txt @@ -1,17 +1,24 @@ parserComputedPropertyName34.ts(3,5): error TS1164: Computed property names are not allowed in enums. +parserComputedPropertyName34.ts(3,6): error TS2552: Cannot find name 'e'. Did you mean 'E'? parserComputedPropertyName34.ts(3,11): error TS2304: Cannot find name 'id'. parserComputedPropertyName34.ts(4,5): error TS1164: Computed property names are not allowed in enums. +parserComputedPropertyName34.ts(4,6): error TS2304: Cannot find name 'e2'. -==== parserComputedPropertyName34.ts (3 errors) ==== +==== parserComputedPropertyName34.ts (5 errors) ==== enum E { // no ASI, comma expected [e] = id++, ~~~ !!! error TS1164: Computed property names are not allowed in enums. + ~ +!!! error TS2552: Cannot find name 'e'. Did you mean 'E'? +!!! related TS2728 parserComputedPropertyName34.ts:1:6: 'E' is declared here. ~~ !!! error TS2304: Cannot find name 'id'. [e2] = 1 ~~~~ !!! error TS1164: Computed property names are not allowed in enums. + ~~ +!!! error TS2304: Cannot find name 'e2'. } \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/conformance/parserES5ComputedPropertyName6(target=es2015).errors.txt b/tsc/testdata/baselines/reference/conformance/parserES5ComputedPropertyName6(target=es2015).errors.txt index eb5f013cbfc8b..acdc8398c4498 100644 --- a/tsc/testdata/baselines/reference/conformance/parserES5ComputedPropertyName6(target=es2015).errors.txt +++ b/tsc/testdata/baselines/reference/conformance/parserES5ComputedPropertyName6(target=es2015).errors.txt @@ -1,9 +1,13 @@ parserES5ComputedPropertyName6.ts(2,3): error TS1164: Computed property names are not allowed in enums. +parserES5ComputedPropertyName6.ts(2,4): error TS2552: Cannot find name 'e'. Did you mean 'E'? -==== parserES5ComputedPropertyName6.ts (1 errors) ==== +==== parserES5ComputedPropertyName6.ts (2 errors) ==== enum E { [e] = 1 ~~~ !!! error TS1164: Computed property names are not allowed in enums. + ~ +!!! error TS2552: Cannot find name 'e'. Did you mean 'E'? +!!! related TS2728 parserES5ComputedPropertyName6.ts:1:6: 'E' is declared here. } \ No newline at end of file diff --git a/tsc/testdata/tests/cases/compiler/deprecatedReferenceInEnumComputedNameNoFlake.ts b/tsc/testdata/tests/cases/compiler/deprecatedReferenceInEnumComputedNameNoFlake.ts new file mode 100644 index 0000000000000..9fba0027e4fee --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/deprecatedReferenceInEnumComputedNameNoFlake.ts @@ -0,0 +1,9 @@ +// @declaration: true +// @captureSuggestions: true + +// TS6385: 'oldValue' is deprecated. +/** @deprecated */ +declare const oldValue: { value: number }; +export enum Values { + [oldValue.value] = 1, +} \ No newline at end of file diff --git a/tsc/testdata/tests/cases/compiler/importedValueInEnumComputedNameNoFlake.ts b/tsc/testdata/tests/cases/compiler/importedValueInEnumComputedNameNoFlake.ts new file mode 100644 index 0000000000000..713b4259fb52c --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/importedValueInEnumComputedNameNoFlake.ts @@ -0,0 +1,12 @@ +// @target: esnext +// @module: esnext + +// @filename: key.ts +export const key = "member"; + +// @filename: main.ts +import { key } from "./key"; + +export enum Example { + [key] = 0, +} \ No newline at end of file diff --git a/tsc/testdata/tests/cases/compiler/incompatibleAssignmentInEnumComputedNameNoFlake.ts b/tsc/testdata/tests/cases/compiler/incompatibleAssignmentInEnumComputedNameNoFlake.ts new file mode 100644 index 0000000000000..3a120996c7d53 --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/incompatibleAssignmentInEnumComputedNameNoFlake.ts @@ -0,0 +1,10 @@ +// @declaration: true + +// TS2322: Type 'string' is not assignable to type 'number'. +let target: number; +enum E { + [(() => { + const text = (target = "value"); + return text.length; + })()] +} \ No newline at end of file diff --git a/tsc/testdata/tests/cases/compiler/localReferenceInEnumComputedNameNoFlake.ts b/tsc/testdata/tests/cases/compiler/localReferenceInEnumComputedNameNoFlake.ts new file mode 100644 index 0000000000000..5c4fc508f8291 --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/localReferenceInEnumComputedNameNoFlake.ts @@ -0,0 +1,8 @@ +// @declaration: true +// @noUnusedLocals: true + +// TS6133 must not report 'unused' as unread: the computed name references it. +const unused = { value: 1 }; +export enum Example { + [unused.value] = 0 +} diff --git a/tsc/testdata/tests/cases/compiler/missingIdentifierInEnumComputedNameNoFlake.ts b/tsc/testdata/tests/cases/compiler/missingIdentifierInEnumComputedNameNoFlake.ts new file mode 100644 index 0000000000000..0f4cc6b87d4e5 --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/missingIdentifierInEnumComputedNameNoFlake.ts @@ -0,0 +1,6 @@ +// @declaration: true + +// TS2304: Cannot find name 'missing'. +export enum Values { + [missing.value] = 1, +} \ No newline at end of file diff --git a/tsc/testdata/tests/cases/compiler/missingModuleInEnumComputedNameNoFlake.ts b/tsc/testdata/tests/cases/compiler/missingModuleInEnumComputedNameNoFlake.ts new file mode 100644 index 0000000000000..b4dda0fb60839 --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/missingModuleInEnumComputedNameNoFlake.ts @@ -0,0 +1,8 @@ +// @target: esnext +// @module: esnext +// @declaration: true + +// TS2307: Cannot find module 'missing' or its corresponding type declarations. +export enum Values { + [import("missing").value] = 1, +} \ No newline at end of file diff --git a/tsc/testdata/tests/cases/compiler/misspelledIdentifierInEnumComputedNameNoFlake.ts b/tsc/testdata/tests/cases/compiler/misspelledIdentifierInEnumComputedNameNoFlake.ts new file mode 100644 index 0000000000000..f11490bfdb745 --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/misspelledIdentifierInEnumComputedNameNoFlake.ts @@ -0,0 +1,7 @@ +// @declaration: true + +// TS2552: Cannot find name 'existingVale'. Did you mean 'existingValue'? +declare const existingValue: { value: number }; +export enum Values { + [existingVale.value] = 1, +} \ No newline at end of file diff --git a/tsc/testdata/tests/cases/compiler/redundantDeclareInEnumComputedNameNoFlake.ts b/tsc/testdata/tests/cases/compiler/redundantDeclareInEnumComputedNameNoFlake.ts new file mode 100644 index 0000000000000..921f4bc0d59d6 --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/redundantDeclareInEnumComputedNameNoFlake.ts @@ -0,0 +1,11 @@ +// @target: esnext +// @declaration: true + +// TS1038: A 'declare' modifier cannot be used in an already ambient context. +export enum Values { + [(function () { + declare namespace Nested { + declare const value: number; + } + }).name] = 1, +} \ No newline at end of file diff --git a/tsc/testdata/tests/cases/compiler/stringIncrementInEnumComputedNameNoFlake.ts b/tsc/testdata/tests/cases/compiler/stringIncrementInEnumComputedNameNoFlake.ts new file mode 100644 index 0000000000000..0928a82962dce --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/stringIncrementInEnumComputedNameNoFlake.ts @@ -0,0 +1,7 @@ +// @declaration: true + +// TS2356: An arithmetic operand must be of type 'any', 'number', 'bigint' or an enum type. +declare let text: string; +export enum Values { + [(text++).valueOf] = 1, +} diff --git a/tsc/testdata/tests/cases/compiler/unusedCommaOperandInEnumComputedNameNoFlake.ts b/tsc/testdata/tests/cases/compiler/unusedCommaOperandInEnumComputedNameNoFlake.ts new file mode 100644 index 0000000000000..d41bb2fd6e172 --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/unusedCommaOperandInEnumComputedNameNoFlake.ts @@ -0,0 +1,6 @@ +// @declaration: true + +// TS2695: Left side of comma operator is unused and has no side effects. +export enum Values { + [(1, 2).valueOf] = 1, +}