@@ -34421,14 +34421,7 @@ namespace ts {
34421
34421
34422
34422
for (const member of node.members) {
34423
34423
const hasOverride = hasOverrideModifier(member);
34424
- const hasAmbient = hasAmbientModifier(member);
34425
-
34426
- if (hasAmbient) {
34427
- if (hasOverride) {
34428
- error(member, Diagnostics.Override_modifier_cannot_be_used_with_declare_modifier);
34429
- }
34430
- }
34431
- else if (baseWithThis) {
34424
+ if (baseWithThis) {
34432
34425
const declaredProp = member.name && getSymbolAtLocation(member.name) || getSymbolAtLocation(member);
34433
34426
if (declaredProp) {
34434
34427
const baseClassName = typeToString(baseWithThis);
@@ -37749,7 +37742,7 @@ namespace ts {
37749
37742
return quickResult;
37750
37743
}
37751
37744
37752
- let lastStatic: Node | undefined, lastDeclare: Node | undefined, lastAsync: Node | undefined, lastReadonly: Node | undefined;
37745
+ let lastStatic: Node | undefined, lastDeclare: Node | undefined, lastAsync: Node | undefined, lastReadonly: Node | undefined, lastOverride: Node | undefined ;
37753
37746
let flags = ModifierFlags.None;
37754
37747
for (const modifier of node.modifiers!) {
37755
37748
if (modifier.kind !== SyntaxKind.ReadonlyKeyword) {
@@ -37766,6 +37759,23 @@ namespace ts {
37766
37759
return grammarErrorOnNode(node, Diagnostics.A_class_member_cannot_have_the_0_keyword, tokenToString(SyntaxKind.ConstKeyword));
37767
37760
}
37768
37761
break;
37762
+ case SyntaxKind.OverrideKeyword:
37763
+ if (!compilerOptions.pedanticOverride) {
37764
+ return grammarErrorOnNode(modifier, Diagnostics.Override_modifier_must_be_used_with_pedanticOverride_compiler_option);
37765
+ }
37766
+ if (flags & ModifierFlags.Override) {
37767
+ return grammarErrorOnNode(modifier, Diagnostics._0_modifier_already_seen, "override");
37768
+ }
37769
+ else if(flags & ModifierFlags.Ambient) {
37770
+ return grammarErrorOnNode(modifier, Diagnostics._0_modifier_cannot_be_used_with_1_modifier, "override", "declare");
37771
+ }
37772
+ else if(flags & ModifierFlags.Static) {
37773
+ return grammarErrorOnNode(modifier, Diagnostics._0_modifier_cannot_be_used_with_1_modifier, "static", "override");
37774
+ }
37775
+ flags |= ModifierFlags.Override;
37776
+ lastOverride = modifier;
37777
+ break;
37778
+
37769
37779
case SyntaxKind.PublicKeyword:
37770
37780
case SyntaxKind.ProtectedKeyword:
37771
37781
case SyntaxKind.PrivateKeyword:
@@ -37774,6 +37784,9 @@ namespace ts {
37774
37784
if (flags & ModifierFlags.AccessibilityModifier) {
37775
37785
return grammarErrorOnNode(modifier, Diagnostics.Accessibility_modifier_already_seen);
37776
37786
}
37787
+ else if (compilerOptions.pedanticOverride && flags & ModifierFlags.Override) {
37788
+ return grammarErrorOnNode(modifier, Diagnostics._0_modifier_must_precede_1_modifier, text, "override");
37789
+ }
37777
37790
else if (flags & ModifierFlags.Static) {
37778
37791
return grammarErrorOnNode(modifier, Diagnostics._0_modifier_must_precede_1_modifier, text, "static");
37779
37792
}
@@ -37807,6 +37820,9 @@ namespace ts {
37807
37820
else if (flags & ModifierFlags.Readonly) {
37808
37821
return grammarErrorOnNode(modifier, Diagnostics._0_modifier_must_precede_1_modifier, "static", "readonly");
37809
37822
}
37823
+ else if (compilerOptions.pedanticOverride && flags & ModifierFlags.Override) {
37824
+ return grammarErrorOnNode(modifier, Diagnostics._0_modifier_cannot_be_used_with_1_modifier, "static", "override");
37825
+ }
37810
37826
else if (flags & ModifierFlags.Async) {
37811
37827
return grammarErrorOnNode(modifier, Diagnostics._0_modifier_must_precede_1_modifier, "static", "async");
37812
37828
}
@@ -37874,6 +37890,9 @@ namespace ts {
37874
37890
else if (flags & ModifierFlags.Async) {
37875
37891
return grammarErrorOnNode(modifier, Diagnostics._0_modifier_cannot_be_used_in_an_ambient_context, "async");
37876
37892
}
37893
+ else if (compilerOptions.pedanticOverride && flags & ModifierFlags.Override) {
37894
+ return grammarErrorOnNode(modifier, Diagnostics._0_modifier_cannot_be_used_in_an_ambient_context, "override");
37895
+ }
37877
37896
else if (isClassLike(node.parent) && !isPropertyDeclaration(node)) {
37878
37897
return grammarErrorOnNode(modifier, Diagnostics._0_modifier_cannot_appear_on_a_class_element, "declare");
37879
37898
}
@@ -37941,6 +37960,9 @@ namespace ts {
37941
37960
if (flags & ModifierFlags.Abstract) {
37942
37961
return grammarErrorOnNode(lastStatic!, Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "abstract"); // TODO: GH#18217
37943
37962
}
37963
+ if (compilerOptions.pedanticOverride && flags & ModifierFlags.Override) {
37964
+ return grammarErrorOnNode(lastOverride!, Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "override"); // TODO: GH#18217
37965
+ }
37944
37966
else if (flags & ModifierFlags.Async) {
37945
37967
return grammarErrorOnNode(lastAsync!, Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "async");
37946
37968
}
0 commit comments