From 697d1042ebf8d86368dd6233a581d44283a8b3a4 Mon Sep 17 00:00:00 2001 From: Alexander T Date: Thu, 2 Apr 2020 01:38:10 +0300 Subject: [PATCH] fix(37519): forbid trailing comma in a index signature (#37535) --- src/compiler/checker.ts | 1 + src/compiler/diagnosticMessages.json | 4 ++++ ...indexSignatureWithTrailingComma.errors.txt | 24 +++++++++++++++++++ .../indexSignatureWithTrailingComma.js | 20 ++++++++++++++++ .../indexSignatureWithTrailingComma.symbols | 23 ++++++++++++++++++ .../indexSignatureWithTrailingComma.types | 22 +++++++++++++++++ .../indexSignatureWithTrailingComma.ts | 11 +++++++++ 7 files changed, 105 insertions(+) create mode 100644 tests/baselines/reference/indexSignatureWithTrailingComma.errors.txt create mode 100644 tests/baselines/reference/indexSignatureWithTrailingComma.js create mode 100644 tests/baselines/reference/indexSignatureWithTrailingComma.symbols create mode 100644 tests/baselines/reference/indexSignatureWithTrailingComma.types create mode 100644 tests/cases/compiler/indexSignatureWithTrailingComma.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 2550e8bd8bc..04628ed4c1d 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -36658,6 +36658,7 @@ namespace ts { return grammarErrorOnNode(node, Diagnostics.An_index_signature_must_have_exactly_one_parameter); } } + checkGrammarForDisallowedTrailingComma(node.parameters, Diagnostics.An_index_signature_cannot_have_a_trailing_comma); if (parameter.dotDotDotToken) { return grammarErrorOnNode(parameter.dotDotDotToken, Diagnostics.An_index_signature_cannot_have_a_rest_parameter); } diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index 67ff8c35558..d1e13c77752 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -83,6 +83,10 @@ "category": "Error", "code": 1024 }, + "An index signature cannot have a trailing comma.": { + "category": "Error", + "code": 1025 + }, "Accessibility modifier already seen.": { "category": "Error", "code": 1028 diff --git a/tests/baselines/reference/indexSignatureWithTrailingComma.errors.txt b/tests/baselines/reference/indexSignatureWithTrailingComma.errors.txt new file mode 100644 index 00000000000..eb56c2d511c --- /dev/null +++ b/tests/baselines/reference/indexSignatureWithTrailingComma.errors.txt @@ -0,0 +1,24 @@ +tests/cases/compiler/indexSignatureWithTrailingComma.ts(2,17): error TS1025: An index signature cannot have a trailing comma. +tests/cases/compiler/indexSignatureWithTrailingComma.ts(6,17): error TS1025: An index signature cannot have a trailing comma. +tests/cases/compiler/indexSignatureWithTrailingComma.ts(10,17): error TS1025: An index signature cannot have a trailing comma. + + +==== tests/cases/compiler/indexSignatureWithTrailingComma.ts (3 errors) ==== + type A = { + [key: string,]: string; + ~ +!!! error TS1025: An index signature cannot have a trailing comma. + }; + + interface B { + [key: string,]: string; + ~ +!!! error TS1025: An index signature cannot have a trailing comma. + } + + class C { + [key: string,]: null; + ~ +!!! error TS1025: An index signature cannot have a trailing comma. + } + \ No newline at end of file diff --git a/tests/baselines/reference/indexSignatureWithTrailingComma.js b/tests/baselines/reference/indexSignatureWithTrailingComma.js new file mode 100644 index 00000000000..d96d32747d4 --- /dev/null +++ b/tests/baselines/reference/indexSignatureWithTrailingComma.js @@ -0,0 +1,20 @@ +//// [indexSignatureWithTrailingComma.ts] +type A = { + [key: string,]: string; +}; + +interface B { + [key: string,]: string; +} + +class C { + [key: string,]: null; +} + + +//// [indexSignatureWithTrailingComma.js] +var C = /** @class */ (function () { + function C() { + } + return C; +}()); diff --git a/tests/baselines/reference/indexSignatureWithTrailingComma.symbols b/tests/baselines/reference/indexSignatureWithTrailingComma.symbols new file mode 100644 index 00000000000..9a8a9ac4175 --- /dev/null +++ b/tests/baselines/reference/indexSignatureWithTrailingComma.symbols @@ -0,0 +1,23 @@ +=== tests/cases/compiler/indexSignatureWithTrailingComma.ts === +type A = { +>A : Symbol(A, Decl(indexSignatureWithTrailingComma.ts, 0, 0)) + + [key: string,]: string; +>key : Symbol(key, Decl(indexSignatureWithTrailingComma.ts, 1, 5)) + +}; + +interface B { +>B : Symbol(B, Decl(indexSignatureWithTrailingComma.ts, 2, 2)) + + [key: string,]: string; +>key : Symbol(key, Decl(indexSignatureWithTrailingComma.ts, 5, 5)) +} + +class C { +>C : Symbol(C, Decl(indexSignatureWithTrailingComma.ts, 6, 1)) + + [key: string,]: null; +>key : Symbol(key, Decl(indexSignatureWithTrailingComma.ts, 9, 5)) +} + diff --git a/tests/baselines/reference/indexSignatureWithTrailingComma.types b/tests/baselines/reference/indexSignatureWithTrailingComma.types new file mode 100644 index 00000000000..095e97c6e2d --- /dev/null +++ b/tests/baselines/reference/indexSignatureWithTrailingComma.types @@ -0,0 +1,22 @@ +=== tests/cases/compiler/indexSignatureWithTrailingComma.ts === +type A = { +>A : A + + [key: string,]: string; +>key : string + +}; + +interface B { + [key: string,]: string; +>key : string +} + +class C { +>C : C + + [key: string,]: null; +>key : string +>null : null +} + diff --git a/tests/cases/compiler/indexSignatureWithTrailingComma.ts b/tests/cases/compiler/indexSignatureWithTrailingComma.ts new file mode 100644 index 00000000000..0f3fec5ad26 --- /dev/null +++ b/tests/cases/compiler/indexSignatureWithTrailingComma.ts @@ -0,0 +1,11 @@ +type A = { + [key: string,]: string; +}; + +interface B { + [key: string,]: string; +} + +class C { + [key: string,]: null; +}