Enforce keyword order between override and static/async (#43660)

* Enforce keyword order between override and static/async

* Update old tests for new keyword order
This commit is contained in:
Andrew Branch
2021-04-15 14:03:53 -07:00
committed by GitHub
parent 0987ee9e0e
commit 06f25c0390
13 changed files with 85 additions and 10 deletions
+6
View File
@@ -40529,6 +40529,9 @@ namespace ts {
else if (flags & ModifierFlags.Readonly) {
return grammarErrorOnNode(modifier, Diagnostics._0_modifier_must_precede_1_modifier, "override", "readonly");
}
else if (flags & ModifierFlags.Async) {
return grammarErrorOnNode(modifier, Diagnostics._0_modifier_must_precede_1_modifier, "override", "async");
}
if (node.kind === SyntaxKind.Parameter) {
return grammarErrorOnNode(modifier, Diagnostics._0_modifier_cannot_appear_on_a_parameter, "override");
}
@@ -40592,6 +40595,9 @@ namespace ts {
else if (flags & ModifierFlags.Abstract) {
return grammarErrorOnNode(modifier, Diagnostics._0_modifier_cannot_be_used_with_1_modifier, "static", "abstract");
}
else if (flags & ModifierFlags.Override) {
return grammarErrorOnNode(modifier, Diagnostics._0_modifier_must_precede_1_modifier, "static", "override");
}
flags |= ModifierFlags.Static;
lastStatic = modifier;
break;
@@ -32,7 +32,7 @@ tests/cases/conformance/override/override5.ts(45,23): error TS4112: This member
override readonly p4: number;
override static sp: number;
static override sp: number;
~~
!!! error TS4113: This member cannot have an 'override' modifier because it is not declared in the base class 'B'.
+1 -1
View File
@@ -18,7 +18,7 @@ class D extends B{
override readonly p4: number;
override static sp: number;
static override sp: number;
override override oop: number;
+1 -1
View File
@@ -40,7 +40,7 @@ class D extends B{
override readonly p4: number;
>p4 : Symbol(D.p4, Decl(override5.ts, 15, 33))
override static sp: number;
static override sp: number;
>sp : Symbol(D.sp, Decl(override5.ts, 17, 33))
override override oop: number;
+1 -1
View File
@@ -44,7 +44,7 @@ class D extends B{
override readonly p4: number;
>p4 : number
override static sp: number;
static override sp: number;
>sp : number
override override oop: number;
@@ -32,7 +32,7 @@ tests/cases/conformance/override/override7.ts(42,23): error TS4112: This member
override readonly p4: number;
override static sp: number;
static override sp: number;
~~
!!! error TS4113: This member cannot have an 'override' modifier because it is not declared in the base class 'B'.
+1 -1
View File
@@ -15,7 +15,7 @@ class D extends B{
override readonly p4: number;
override static sp: number;
static override sp: number;
override override oop: number;
+1 -1
View File
@@ -31,7 +31,7 @@ class D extends B{
override readonly p4: number;
>p4 : Symbol(D.p4, Decl(override7.ts, 12, 33))
override static sp: number;
static override sp: number;
>sp : Symbol(D.sp, Decl(override7.ts, 14, 33))
override override oop: number;
+1 -1
View File
@@ -35,7 +35,7 @@ class D extends B{
override readonly p4: number;
>p4 : number
override static sp: number;
static override sp: number;
>sp : number
override override oop: number;
@@ -0,0 +1,41 @@
tests/cases/conformance/override/overrideKeywordOrder.ts(12,9): error TS1029: 'override' modifier must precede 'async' modifier.
tests/cases/conformance/override/overrideKeywordOrder.ts(15,12): error TS1029: 'static' modifier must precede 'override' modifier.
tests/cases/conformance/override/overrideKeywordOrder.ts(19,12): error TS1029: 'public' modifier must precede 'override' modifier.
tests/cases/conformance/override/overrideKeywordOrder.ts(24,12): error TS1029: 'override' modifier must precede 'readonly' modifier.
==== tests/cases/conformance/override/overrideKeywordOrder.ts (4 errors) ====
class Base {
static s1() {}
static s2() {}
m1() {}
m2() {}
p1: any;
p2: any;
}
class Test1 extends Base {
override async m1() {}
async override m2() {} // error
~~~~~~~~
!!! error TS1029: 'override' modifier must precede 'async' modifier.
}
class Test2 extends Base {
override static s1() {} // error
~~~~~~
!!! error TS1029: 'static' modifier must precede 'override' modifier.
static override s2() {}
}
class Test3 extends Base {
override public m1() {} // error
~~~~~~
!!! error TS1029: 'public' modifier must precede 'override' modifier.
public override m2() {}
}
class Test4 extends Base {
override readonly p1: any;
readonly override p2: any; // error
~~~~~~~~
!!! error TS1029: 'override' modifier must precede 'readonly' modifier.
}
@@ -19,7 +19,7 @@ class D extends B{
override readonly p4: number;
override static sp: number;
static override sp: number;
override override oop: number;
@@ -16,7 +16,7 @@ class D extends B{
override readonly p4: number;
override static sp: number;
static override sp: number;
override override oop: number;
@@ -0,0 +1,28 @@
// @noTypesAndSymbols: true
// @noEmit: true
class Base {
static s1() {}
static s2() {}
m1() {}
m2() {}
p1: any;
p2: any;
}
class Test1 extends Base {
override async m1() {}
async override m2() {} // error
}
class Test2 extends Base {
override static s1() {} // error
static override s2() {}
}
class Test3 extends Base {
override public m1() {} // error
public override m2() {}
}
class Test4 extends Base {
override readonly p1: any;
readonly override p2: any; // error
}