From fb870799940f5da730c0828acfb9b5ba444bd44d Mon Sep 17 00:00:00 2001 From: Pig Fang Date: Tue, 6 Apr 2021 23:48:44 +0800 Subject: [PATCH] Enforce `override` precedes `readonly` (#43545) --- src/compiler/checker.ts | 3 +++ tests/baselines/reference/override5.errors.txt | 5 ++++- tests/baselines/reference/override7.errors.txt | 5 ++++- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 81673d7ac5f..6d85af03e53 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -40373,6 +40373,9 @@ namespace ts { else if (flags & ModifierFlags.Static) { return grammarErrorOnNode(modifier, Diagnostics._0_modifier_cannot_be_used_with_1_modifier, "static", "override"); } + else if (flags & ModifierFlags.Readonly) { + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_must_precede_1_modifier, "override", "readonly"); + } if (node.kind === SyntaxKind.Parameter) { return grammarErrorOnNode(modifier, Diagnostics._0_modifier_cannot_appear_on_a_parameter, "override"); } diff --git a/tests/baselines/reference/override5.errors.txt b/tests/baselines/reference/override5.errors.txt index 18358a49282..6c9c93aa198 100644 --- a/tests/baselines/reference/override5.errors.txt +++ b/tests/baselines/reference/override5.errors.txt @@ -1,5 +1,6 @@ tests/cases/conformance/override/override5.ts(12,13): error TS4114: This member must have an 'override' modifier because it overrides a member in the base class 'B'. tests/cases/conformance/override/override5.ts(14,14): error TS1040: 'override' modifier cannot be used in an ambient context. +tests/cases/conformance/override/override5.ts(16,14): error TS1029: 'override' modifier must precede 'readonly' modifier. tests/cases/conformance/override/override5.ts(20,14): error TS1243: 'static' modifier cannot be used with 'override' modifier. tests/cases/conformance/override/override5.ts(22,14): error TS1030: 'override' modifier already seen. tests/cases/conformance/override/override5.ts(25,14): error TS1029: 'public' modifier must precede 'override' modifier. @@ -8,7 +9,7 @@ tests/cases/conformance/override/override5.ts(44,23): error TS4112: This member tests/cases/conformance/override/override5.ts(45,23): error TS4112: This member cannot have an 'override' modifier because its containing class 'AND' does not extend another class. -==== tests/cases/conformance/override/override5.ts (8 errors) ==== +==== tests/cases/conformance/override/override5.ts (9 errors) ==== class B { p1: number = 1; p2: number = 2; @@ -29,6 +30,8 @@ tests/cases/conformance/override/override5.ts(45,23): error TS4112: This member !!! error TS1040: 'override' modifier cannot be used in an ambient context. readonly override p3: number; + ~~~~~~~~ +!!! error TS1029: 'override' modifier must precede 'readonly' modifier. override readonly p4: number; diff --git a/tests/baselines/reference/override7.errors.txt b/tests/baselines/reference/override7.errors.txt index 624d8d6d749..dec798252a2 100644 --- a/tests/baselines/reference/override7.errors.txt +++ b/tests/baselines/reference/override7.errors.txt @@ -1,4 +1,5 @@ tests/cases/conformance/override/override7.ts(11,14): error TS1040: 'override' modifier cannot be used in an ambient context. +tests/cases/conformance/override/override7.ts(13,14): error TS1029: 'override' modifier must precede 'readonly' modifier. tests/cases/conformance/override/override7.ts(17,14): error TS1243: 'static' modifier cannot be used with 'override' modifier. tests/cases/conformance/override/override7.ts(19,14): error TS1030: 'override' modifier already seen. tests/cases/conformance/override/override7.ts(19,23): error TS4113: This member cannot have an 'override' modifier because it is not declared in the base class 'B'. @@ -10,7 +11,7 @@ tests/cases/conformance/override/override7.ts(41,23): error TS4112: This member tests/cases/conformance/override/override7.ts(42,23): error TS4112: This member cannot have an 'override' modifier because its containing class 'AND' does not extend another class. -==== tests/cases/conformance/override/override7.ts (10 errors) ==== +==== tests/cases/conformance/override/override7.ts (11 errors) ==== class B { p1: number = 1; p2: number = 2; @@ -26,6 +27,8 @@ tests/cases/conformance/override/override7.ts(42,23): error TS4112: This member !!! error TS1040: 'override' modifier cannot be used in an ambient context. readonly override p3: number; + ~~~~~~~~ +!!! error TS1029: 'override' modifier must precede 'readonly' modifier. override readonly p4: number;