From cac58059d4808f7ae2376aa1f1c8a9742352a8be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20Burzy=C5=84ski?= Date: Wed, 4 Jun 2025 16:13:27 +0200 Subject: [PATCH] Port `Error on `override` used on dynamically named class members` + use proper JSDoc-related diagnostics --- internal/checker/checker.go | 15 +++++--- .../conformance/jsdocOverrideTag1.errors.txt | 8 ++-- ...Name1(noimplicitoverride=false).errors.txt | 33 +++++++++++++++++ ...(noimplicitoverride=false).errors.txt.diff | 37 ------------------- ...cName1(noimplicitoverride=true).errors.txt | 33 +++++++++++++++++ ...1(noimplicitoverride=true).errors.txt.diff | 37 ------------------- ...ture1(noimplicitoverride=false).errors.txt | 33 +++++++++++++++++ ...(noimplicitoverride=false).errors.txt.diff | 37 ------------------- ...ature1(noimplicitoverride=true).errors.txt | 33 +++++++++++++++++ ...1(noimplicitoverride=true).errors.txt.diff | 37 ------------------- .../conformance/override_js2.errors.txt | 8 ++-- .../conformance/override_js3.errors.txt | 4 +- .../jsdocOverrideTag1.errors.txt.diff | 16 +++----- .../conformance/override_js2.errors.txt.diff | 15 +++----- .../conformance/override_js3.errors.txt.diff | 4 +- 15 files changed, 164 insertions(+), 186 deletions(-) create mode 100644 testdata/baselines/reference/submodule/conformance/overrideDynamicName1(noimplicitoverride=false).errors.txt delete mode 100644 testdata/baselines/reference/submodule/conformance/overrideDynamicName1(noimplicitoverride=false).errors.txt.diff create mode 100644 testdata/baselines/reference/submodule/conformance/overrideDynamicName1(noimplicitoverride=true).errors.txt delete mode 100644 testdata/baselines/reference/submodule/conformance/overrideDynamicName1(noimplicitoverride=true).errors.txt.diff create mode 100644 testdata/baselines/reference/submodule/conformance/overrideLateBindableIndexSignature1(noimplicitoverride=false).errors.txt delete mode 100644 testdata/baselines/reference/submodule/conformance/overrideLateBindableIndexSignature1(noimplicitoverride=false).errors.txt.diff create mode 100644 testdata/baselines/reference/submodule/conformance/overrideLateBindableIndexSignature1(noimplicitoverride=true).errors.txt delete mode 100644 testdata/baselines/reference/submodule/conformance/overrideLateBindableIndexSignature1(noimplicitoverride=true).errors.txt.diff diff --git a/internal/checker/checker.go b/internal/checker/checker.go index 74fbd0f01a..52293c4409 100644 --- a/internal/checker/checker.go +++ b/internal/checker/checker.go @@ -4439,13 +4439,18 @@ func (c *Checker) checkMembersForOverrideModifier(node *ast.Node, t *Type, typeW } func (c *Checker) checkMemberForOverrideModifier(node *ast.Node, staticType *Type, baseStaticType *Type, baseWithThis *Type, t *Type, typeWithThis *Type, member *ast.Node) { + isJs := ast.IsInJSFile(node) memberHasOverrideModifier := hasOverrideModifier(member) if baseWithThis == nil { if memberHasOverrideModifier { - c.error(member, diagnostics.This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another_class, c.TypeToString(t)) + c.error(member, core.IfElse(isJs, diagnostics.This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_extend_another_class, diagnostics.This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another_class), c.TypeToString(t)) } return } + if sym := member.Symbol(); memberHasOverrideModifier && sym != nil && sym.ValueDeclaration != nil && ast.IsClassElement(member) && member.Name() != nil && c.isNonBindableDynamicName(member.Name()) { + c.error(member, core.IfElse(isJs, diagnostics.This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_name_is_dynamic, diagnostics.This_member_cannot_have_an_override_modifier_because_its_name_is_dynamic)) + return + } if !memberHasOverrideModifier && !c.compilerOptions.NoImplicitOverride.IsTrue() { return } @@ -4465,18 +4470,18 @@ func (c *Checker) checkMemberForOverrideModifier(node *ast.Node, staticType *Typ if baseProp == nil && memberHasOverrideModifier { suggestion := c.getSuggestedSymbolForNonexistentClassMember(ast.SymbolName(symbol), baseType) if suggestion != nil { - c.error(member, diagnostics.This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you_mean_1, c.TypeToString(baseWithThis), c.symbolToString(suggestion)) + c.error(member, core.IfElse(isJs, diagnostics.This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base_class_0_Did_you_mean_1, diagnostics.This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you_mean_1), c.TypeToString(baseWithThis), c.symbolToString(suggestion)) return } - c.error(member, diagnostics.This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0, c.TypeToString(baseWithThis)) + c.error(member, core.IfElse(isJs, diagnostics.This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base_class_0, diagnostics.This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0), c.TypeToString(baseWithThis)) return } if baseProp != nil && len(baseProp.Declarations) != 0 && !memberHasOverrideModifier && c.compilerOptions.NoImplicitOverride.IsTrue() && node.Flags&ast.NodeFlagsAmbient == 0 { baseHasAbstract := core.Some(baseProp.Declarations, hasAbstractModifier) if !baseHasAbstract { message := core.IfElse(ast.IsParameter(member), - diagnostics.This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0, - diagnostics.This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0) + core.IfElse(isJs, diagnostics.This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_class_0, diagnostics.This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0), + core.IfElse(isJs, diagnostics.This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_class_0, diagnostics.This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0)) c.error(member, message, c.TypeToString(baseWithThis)) return } diff --git a/testdata/baselines/reference/submodule/conformance/jsdocOverrideTag1.errors.txt b/testdata/baselines/reference/submodule/conformance/jsdocOverrideTag1.errors.txt index 133bf9dbd2..9d125dbf18 100644 --- a/testdata/baselines/reference/submodule/conformance/jsdocOverrideTag1.errors.txt +++ b/testdata/baselines/reference/submodule/conformance/jsdocOverrideTag1.errors.txt @@ -1,5 +1,5 @@ -0.js(23,5): error TS4114: This member must have an 'override' modifier because it overrides a member in the base class 'A'. -0.js(27,5): error TS4114: This member must have an 'override' modifier because it overrides a member in the base class 'A'. +0.js(23,5): error TS4119: This member must have a JSDoc comment with an '@override' tag because it overrides a member in the base class 'A'. +0.js(27,5): error TS4119: This member must have a JSDoc comment with an '@override' tag because it overrides a member in the base class 'A'. ==== 0.js (2 errors) ==== @@ -27,13 +27,13 @@ */ foo (a) { ~~~ -!!! error TS4114: This member must have an 'override' modifier because it overrides a member in the base class 'A'. +!!! error TS4119: This member must have a JSDoc comment with an '@override' tag because it overrides a member in the base class 'A'. return super.foo(a) } bar () { ~~~ -!!! error TS4114: This member must have an 'override' modifier because it overrides a member in the base class 'A'. +!!! error TS4119: This member must have a JSDoc comment with an '@override' tag because it overrides a member in the base class 'A'. } diff --git a/testdata/baselines/reference/submodule/conformance/overrideDynamicName1(noimplicitoverride=false).errors.txt b/testdata/baselines/reference/submodule/conformance/overrideDynamicName1(noimplicitoverride=false).errors.txt new file mode 100644 index 0000000000..dc4b60e7ee --- /dev/null +++ b/testdata/baselines/reference/submodule/conformance/overrideDynamicName1(noimplicitoverride=false).errors.txt @@ -0,0 +1,33 @@ +overrideDynamicName1.ts(8,12): error TS4127: This member cannot have an 'override' modifier because its name is dynamic. +overrideDynamicName1.ts(22,12): error TS4127: This member cannot have an 'override' modifier because its name is dynamic. + + +==== overrideDynamicName1.ts (2 errors) ==== + let prop = "foo" + + class Base1 { + [prop]() {} + } + + class Derived1 extends Base1 { + override [prop]() {} + ~~~~~~ +!!! error TS4127: This member cannot have an 'override' modifier because its name is dynamic. + } + + class Base2 { + [prop]() {} + } + + class Derived2 extends Base2 { + [prop]() {} + } + + class Base3 {} + + class Derived3 extends Base3 { + override [prop]() {} + ~~~~~~ +!!! error TS4127: This member cannot have an 'override' modifier because its name is dynamic. + } + \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/overrideDynamicName1(noimplicitoverride=false).errors.txt.diff b/testdata/baselines/reference/submodule/conformance/overrideDynamicName1(noimplicitoverride=false).errors.txt.diff deleted file mode 100644 index 1de7ab4128..0000000000 --- a/testdata/baselines/reference/submodule/conformance/overrideDynamicName1(noimplicitoverride=false).errors.txt.diff +++ /dev/null @@ -1,37 +0,0 @@ ---- old.overrideDynamicName1(noimplicitoverride=false).errors.txt -+++ new.overrideDynamicName1(noimplicitoverride=false).errors.txt -@@= skipped -0, +0 lines =@@ --overrideDynamicName1.ts(8,12): error TS4127: This member cannot have an 'override' modifier because its name is dynamic. --overrideDynamicName1.ts(22,12): error TS4127: This member cannot have an 'override' modifier because its name is dynamic. -- -- --==== overrideDynamicName1.ts (2 errors) ==== -- let prop = "foo" -- -- class Base1 { -- [prop]() {} -- } -- -- class Derived1 extends Base1 { -- override [prop]() {} -- ~~~~~~ --!!! error TS4127: This member cannot have an 'override' modifier because its name is dynamic. -- } -- -- class Base2 { -- [prop]() {} -- } -- -- class Derived2 extends Base2 { -- [prop]() {} -- } -- -- class Base3 {} -- -- class Derived3 extends Base3 { -- override [prop]() {} -- ~~~~~~ --!!! error TS4127: This member cannot have an 'override' modifier because its name is dynamic. -- } -- -+ \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/overrideDynamicName1(noimplicitoverride=true).errors.txt b/testdata/baselines/reference/submodule/conformance/overrideDynamicName1(noimplicitoverride=true).errors.txt new file mode 100644 index 0000000000..dc4b60e7ee --- /dev/null +++ b/testdata/baselines/reference/submodule/conformance/overrideDynamicName1(noimplicitoverride=true).errors.txt @@ -0,0 +1,33 @@ +overrideDynamicName1.ts(8,12): error TS4127: This member cannot have an 'override' modifier because its name is dynamic. +overrideDynamicName1.ts(22,12): error TS4127: This member cannot have an 'override' modifier because its name is dynamic. + + +==== overrideDynamicName1.ts (2 errors) ==== + let prop = "foo" + + class Base1 { + [prop]() {} + } + + class Derived1 extends Base1 { + override [prop]() {} + ~~~~~~ +!!! error TS4127: This member cannot have an 'override' modifier because its name is dynamic. + } + + class Base2 { + [prop]() {} + } + + class Derived2 extends Base2 { + [prop]() {} + } + + class Base3 {} + + class Derived3 extends Base3 { + override [prop]() {} + ~~~~~~ +!!! error TS4127: This member cannot have an 'override' modifier because its name is dynamic. + } + \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/overrideDynamicName1(noimplicitoverride=true).errors.txt.diff b/testdata/baselines/reference/submodule/conformance/overrideDynamicName1(noimplicitoverride=true).errors.txt.diff deleted file mode 100644 index 2d7e0be286..0000000000 --- a/testdata/baselines/reference/submodule/conformance/overrideDynamicName1(noimplicitoverride=true).errors.txt.diff +++ /dev/null @@ -1,37 +0,0 @@ ---- old.overrideDynamicName1(noimplicitoverride=true).errors.txt -+++ new.overrideDynamicName1(noimplicitoverride=true).errors.txt -@@= skipped -0, +0 lines =@@ --overrideDynamicName1.ts(8,12): error TS4127: This member cannot have an 'override' modifier because its name is dynamic. --overrideDynamicName1.ts(22,12): error TS4127: This member cannot have an 'override' modifier because its name is dynamic. -- -- --==== overrideDynamicName1.ts (2 errors) ==== -- let prop = "foo" -- -- class Base1 { -- [prop]() {} -- } -- -- class Derived1 extends Base1 { -- override [prop]() {} -- ~~~~~~ --!!! error TS4127: This member cannot have an 'override' modifier because its name is dynamic. -- } -- -- class Base2 { -- [prop]() {} -- } -- -- class Derived2 extends Base2 { -- [prop]() {} -- } -- -- class Base3 {} -- -- class Derived3 extends Base3 { -- override [prop]() {} -- ~~~~~~ --!!! error TS4127: This member cannot have an 'override' modifier because its name is dynamic. -- } -- -+ \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/overrideLateBindableIndexSignature1(noimplicitoverride=false).errors.txt b/testdata/baselines/reference/submodule/conformance/overrideLateBindableIndexSignature1(noimplicitoverride=false).errors.txt new file mode 100644 index 0000000000..32329c5769 --- /dev/null +++ b/testdata/baselines/reference/submodule/conformance/overrideLateBindableIndexSignature1(noimplicitoverride=false).errors.txt @@ -0,0 +1,33 @@ +overrideLateBindableIndexSignature1.ts(8,12): error TS4127: This member cannot have an 'override' modifier because its name is dynamic. +overrideLateBindableIndexSignature1.ts(22,12): error TS4127: This member cannot have an 'override' modifier because its name is dynamic. + + +==== overrideLateBindableIndexSignature1.ts (2 errors) ==== + const sym: symbol = Symbol(); + + class Base1 { + [sym]() {} + } + + class Derived1 extends Base1 { + override [sym]() {} + ~~~~~ +!!! error TS4127: This member cannot have an 'override' modifier because its name is dynamic. + } + + class Base2 { + [sym]() {} + } + + class Derived2 extends Base2 { + [sym]() {} + } + + class Base3 {} + + class Derived3 extends Base3 { + override [sym]() {} + ~~~~~ +!!! error TS4127: This member cannot have an 'override' modifier because its name is dynamic. + } + \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/overrideLateBindableIndexSignature1(noimplicitoverride=false).errors.txt.diff b/testdata/baselines/reference/submodule/conformance/overrideLateBindableIndexSignature1(noimplicitoverride=false).errors.txt.diff deleted file mode 100644 index 9f5854badc..0000000000 --- a/testdata/baselines/reference/submodule/conformance/overrideLateBindableIndexSignature1(noimplicitoverride=false).errors.txt.diff +++ /dev/null @@ -1,37 +0,0 @@ ---- old.overrideLateBindableIndexSignature1(noimplicitoverride=false).errors.txt -+++ new.overrideLateBindableIndexSignature1(noimplicitoverride=false).errors.txt -@@= skipped -0, +0 lines =@@ --overrideLateBindableIndexSignature1.ts(8,12): error TS4127: This member cannot have an 'override' modifier because its name is dynamic. --overrideLateBindableIndexSignature1.ts(22,12): error TS4127: This member cannot have an 'override' modifier because its name is dynamic. -- -- --==== overrideLateBindableIndexSignature1.ts (2 errors) ==== -- const sym: symbol = Symbol(); -- -- class Base1 { -- [sym]() {} -- } -- -- class Derived1 extends Base1 { -- override [sym]() {} -- ~~~~~ --!!! error TS4127: This member cannot have an 'override' modifier because its name is dynamic. -- } -- -- class Base2 { -- [sym]() {} -- } -- -- class Derived2 extends Base2 { -- [sym]() {} -- } -- -- class Base3 {} -- -- class Derived3 extends Base3 { -- override [sym]() {} -- ~~~~~ --!!! error TS4127: This member cannot have an 'override' modifier because its name is dynamic. -- } -- -+ \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/overrideLateBindableIndexSignature1(noimplicitoverride=true).errors.txt b/testdata/baselines/reference/submodule/conformance/overrideLateBindableIndexSignature1(noimplicitoverride=true).errors.txt new file mode 100644 index 0000000000..32329c5769 --- /dev/null +++ b/testdata/baselines/reference/submodule/conformance/overrideLateBindableIndexSignature1(noimplicitoverride=true).errors.txt @@ -0,0 +1,33 @@ +overrideLateBindableIndexSignature1.ts(8,12): error TS4127: This member cannot have an 'override' modifier because its name is dynamic. +overrideLateBindableIndexSignature1.ts(22,12): error TS4127: This member cannot have an 'override' modifier because its name is dynamic. + + +==== overrideLateBindableIndexSignature1.ts (2 errors) ==== + const sym: symbol = Symbol(); + + class Base1 { + [sym]() {} + } + + class Derived1 extends Base1 { + override [sym]() {} + ~~~~~ +!!! error TS4127: This member cannot have an 'override' modifier because its name is dynamic. + } + + class Base2 { + [sym]() {} + } + + class Derived2 extends Base2 { + [sym]() {} + } + + class Base3 {} + + class Derived3 extends Base3 { + override [sym]() {} + ~~~~~ +!!! error TS4127: This member cannot have an 'override' modifier because its name is dynamic. + } + \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/overrideLateBindableIndexSignature1(noimplicitoverride=true).errors.txt.diff b/testdata/baselines/reference/submodule/conformance/overrideLateBindableIndexSignature1(noimplicitoverride=true).errors.txt.diff deleted file mode 100644 index c265c97c7d..0000000000 --- a/testdata/baselines/reference/submodule/conformance/overrideLateBindableIndexSignature1(noimplicitoverride=true).errors.txt.diff +++ /dev/null @@ -1,37 +0,0 @@ ---- old.overrideLateBindableIndexSignature1(noimplicitoverride=true).errors.txt -+++ new.overrideLateBindableIndexSignature1(noimplicitoverride=true).errors.txt -@@= skipped -0, +0 lines =@@ --overrideLateBindableIndexSignature1.ts(8,12): error TS4127: This member cannot have an 'override' modifier because its name is dynamic. --overrideLateBindableIndexSignature1.ts(22,12): error TS4127: This member cannot have an 'override' modifier because its name is dynamic. -- -- --==== overrideLateBindableIndexSignature1.ts (2 errors) ==== -- const sym: symbol = Symbol(); -- -- class Base1 { -- [sym]() {} -- } -- -- class Derived1 extends Base1 { -- override [sym]() {} -- ~~~~~ --!!! error TS4127: This member cannot have an 'override' modifier because its name is dynamic. -- } -- -- class Base2 { -- [sym]() {} -- } -- -- class Derived2 extends Base2 { -- [sym]() {} -- } -- -- class Base3 {} -- -- class Derived3 extends Base3 { -- override [sym]() {} -- ~~~~~ --!!! error TS4127: This member cannot have an 'override' modifier because its name is dynamic. -- } -- -+ \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/override_js2.errors.txt b/testdata/baselines/reference/submodule/conformance/override_js2.errors.txt index 79b3b91719..02778eb8e8 100644 --- a/testdata/baselines/reference/submodule/conformance/override_js2.errors.txt +++ b/testdata/baselines/reference/submodule/conformance/override_js2.errors.txt @@ -1,5 +1,5 @@ -a.js(7,5): error TS4114: This member must have an 'override' modifier because it overrides a member in the base class 'B'. -a.js(9,5): error TS4114: This member must have an 'override' modifier because it overrides a member in the base class 'B'. +a.js(7,5): error TS4119: This member must have a JSDoc comment with an '@override' tag because it overrides a member in the base class 'B'. +a.js(9,5): error TS4119: This member must have a JSDoc comment with an '@override' tag because it overrides a member in the base class 'B'. ==== a.js (2 errors) ==== @@ -11,11 +11,11 @@ a.js(9,5): error TS4114: This member must have an 'override' modifier because it class D extends B { foo (v) {} ~~~ -!!! error TS4114: This member must have an 'override' modifier because it overrides a member in the base class 'B'. +!!! error TS4119: This member must have a JSDoc comment with an '@override' tag because it overrides a member in the base class 'B'. /** @override */ fooo (v) {} ~~~~ -!!! error TS4114: This member must have an 'override' modifier because it overrides a member in the base class 'B'. +!!! error TS4119: This member must have a JSDoc comment with an '@override' tag because it overrides a member in the base class 'B'. /** @override */ bar(v) {} } diff --git a/testdata/baselines/reference/submodule/conformance/override_js3.errors.txt b/testdata/baselines/reference/submodule/conformance/override_js3.errors.txt index db710adc3f..cb2d2b5b6e 100644 --- a/testdata/baselines/reference/submodule/conformance/override_js3.errors.txt +++ b/testdata/baselines/reference/submodule/conformance/override_js3.errors.txt @@ -1,4 +1,4 @@ -a.js(9,5): error TS4114: This member must have an 'override' modifier because it overrides a member in the base class 'B'. +a.js(9,5): error TS4119: This member must have a JSDoc comment with an '@override' tag because it overrides a member in the base class 'B'. ==== a.js (1 errors) ==== @@ -12,6 +12,6 @@ a.js(9,5): error TS4114: This member must have an 'override' modifier because it /** @override */ fooo (v) {} ~~~~ -!!! error TS4114: This member must have an 'override' modifier because it overrides a member in the base class 'B'. +!!! error TS4119: This member must have a JSDoc comment with an '@override' tag because it overrides a member in the base class 'B'. } \ No newline at end of file diff --git a/testdata/baselines/reference/submoduleAccepted/conformance/jsdocOverrideTag1.errors.txt.diff b/testdata/baselines/reference/submoduleAccepted/conformance/jsdocOverrideTag1.errors.txt.diff index 0b1f8da542..815f3a3ca4 100644 --- a/testdata/baselines/reference/submoduleAccepted/conformance/jsdocOverrideTag1.errors.txt.diff +++ b/testdata/baselines/reference/submoduleAccepted/conformance/jsdocOverrideTag1.errors.txt.diff @@ -1,14 +1,13 @@ --- old.jsdocOverrideTag1.errors.txt +++ new.jsdocOverrideTag1.errors.txt @@= skipped -0, +0 lines =@@ --0.js(27,5): error TS4119: This member must have a JSDoc comment with an '@override' tag because it overrides a member in the base class 'A'. ++0.js(23,5): error TS4119: This member must have a JSDoc comment with an '@override' tag because it overrides a member in the base class 'A'. + 0.js(27,5): error TS4119: This member must have a JSDoc comment with an '@override' tag because it overrides a member in the base class 'A'. -0.js(32,5): error TS4122: This member cannot have a JSDoc comment with an '@override' tag because it is not declared in the base class 'A'. -0.js(40,5): error TS4121: This member cannot have a JSDoc comment with an '@override' tag because its containing class 'C' does not extend another class. - - -==== 0.js (3 errors) ==== -+0.js(23,5): error TS4114: This member must have an 'override' modifier because it overrides a member in the base class 'A'. -+0.js(27,5): error TS4114: This member must have an 'override' modifier because it overrides a member in the base class 'A'. + + +==== 0.js (2 errors) ==== @@ -20,16 +19,11 @@ */ foo (a) { + ~~~ -+!!! error TS4114: This member must have an 'override' modifier because it overrides a member in the base class 'A'. ++!!! error TS4119: This member must have a JSDoc comment with an '@override' tag because it overrides a member in the base class 'A'. return super.foo(a) } - bar () { - ~~~ --!!! error TS4119: This member must have a JSDoc comment with an '@override' tag because it overrides a member in the base class 'A'. -+!!! error TS4114: This member must have an 'override' modifier because it overrides a member in the base class 'A'. - - } +@@= skipped -11, +13 lines =@@ /** @override */ baz () { @@ -38,7 +32,7 @@ } } -@@= skipped -21, +21 lines =@@ +@@= skipped -10, +8 lines =@@ class C { /** @override */ foo () { diff --git a/testdata/baselines/reference/submoduleAccepted/conformance/override_js2.errors.txt.diff b/testdata/baselines/reference/submoduleAccepted/conformance/override_js2.errors.txt.diff index 8a0eb8e549..36ce7cb7c4 100644 --- a/testdata/baselines/reference/submoduleAccepted/conformance/override_js2.errors.txt.diff +++ b/testdata/baselines/reference/submoduleAccepted/conformance/override_js2.errors.txt.diff @@ -1,31 +1,26 @@ --- old.override_js2.errors.txt +++ new.override_js2.errors.txt @@= skipped -0, +0 lines =@@ --a.js(7,5): error TS4119: This member must have a JSDoc comment with an '@override' tag because it overrides a member in the base class 'B'. + a.js(7,5): error TS4119: This member must have a JSDoc comment with an '@override' tag because it overrides a member in the base class 'B'. -a.js(11,5): error TS4122: This member cannot have a JSDoc comment with an '@override' tag because it is not declared in the base class 'B'. -a.js(17,5): error TS4121: This member cannot have a JSDoc comment with an '@override' tag because its containing class 'C' does not extend another class. -a.js(19,5): error TS4121: This member cannot have a JSDoc comment with an '@override' tag because its containing class 'C' does not extend another class. - - -==== a.js (4 errors) ==== -+a.js(7,5): error TS4114: This member must have an 'override' modifier because it overrides a member in the base class 'B'. -+a.js(9,5): error TS4114: This member must have an 'override' modifier because it overrides a member in the base class 'B'. ++a.js(9,5): error TS4119: This member must have a JSDoc comment with an '@override' tag because it overrides a member in the base class 'B'. + + +==== a.js (2 errors) ==== class B { foo (v) {} fooo (v) {} -@@= skipped -12, +10 lines =@@ - class D extends B { - foo (v) {} - ~~~ --!!! error TS4119: This member must have a JSDoc comment with an '@override' tag because it overrides a member in the base class 'B'. -+!!! error TS4114: This member must have an 'override' modifier because it overrides a member in the base class 'B'. +@@= skipped -15, +13 lines =@@ + !!! error TS4119: This member must have a JSDoc comment with an '@override' tag because it overrides a member in the base class 'B'. /** @override */ fooo (v) {} + ~~~~ -+!!! error TS4114: This member must have an 'override' modifier because it overrides a member in the base class 'B'. ++!!! error TS4119: This member must have a JSDoc comment with an '@override' tag because it overrides a member in the base class 'B'. /** @override */ bar(v) {} - ~~~ diff --git a/testdata/baselines/reference/submoduleAccepted/conformance/override_js3.errors.txt.diff b/testdata/baselines/reference/submoduleAccepted/conformance/override_js3.errors.txt.diff index dcf4c96831..de27d1c50f 100644 --- a/testdata/baselines/reference/submoduleAccepted/conformance/override_js3.errors.txt.diff +++ b/testdata/baselines/reference/submoduleAccepted/conformance/override_js3.errors.txt.diff @@ -2,7 +2,7 @@ +++ new.override_js3.errors.txt @@= skipped -0, +0 lines =@@ -a.js(7,5): error TS8009: The 'override' modifier can only be used in TypeScript files. -+a.js(9,5): error TS4114: This member must have an 'override' modifier because it overrides a member in the base class 'B'. ++a.js(9,5): error TS4119: This member must have a JSDoc comment with an '@override' tag because it overrides a member in the base class 'B'. ==== a.js (1 errors) ==== @@ -15,6 +15,6 @@ /** @override */ fooo (v) {} + ~~~~ -+!!! error TS4114: This member must have an 'override' modifier because it overrides a member in the base class 'B'. ++!!! error TS4119: This member must have a JSDoc comment with an '@override' tag because it overrides a member in the base class 'B'. } \ No newline at end of file