Skip to content

fix: add corresponding message for override error in js files #45656

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 5 commits into from
Sep 15, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 26 additions & 5 deletions src/compiler/checker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37702,6 +37702,7 @@ namespace ts {
function checkClassMember(member: ClassElement | ParameterPropertyDeclaration, memberIsParameterProperty?: boolean) {
const hasOverride = hasOverrideModifier(member);
const hasStatic = isStatic(member);
const isJs = isInJSFile(member);
if (baseWithThis && (hasOverride || compilerOptions.noImplicitOverride)) {
const declaredProp = member.name && getSymbolAtLocation(member.name) || getSymbolAtLocation(member);
if (!declaredProp) {
Expand All @@ -37717,8 +37718,19 @@ namespace ts {
if (prop && !baseProp && hasOverride) {
const suggestion = getSuggestedSymbolForNonexistentClassMember(symbolName(declaredProp), baseType);
suggestion ?
error(member, Diagnostics.This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you_mean_1, baseClassName, symbolToString(suggestion)) :
error(member, Diagnostics.This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0, baseClassName);
error(
member,
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,
baseClassName,
symbolToString(suggestion)) :
error(
member,
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,
baseClassName);
}
else if (prop && baseProp?.declarations && compilerOptions.noImplicitOverride && !nodeInAmbientContext) {
const baseHasAbstract = some(baseProp.declarations, hasAbstractModifier);
Expand All @@ -37728,8 +37740,12 @@ namespace ts {

if (!baseHasAbstract) {
const diag = memberIsParameterProperty ?
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;
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 :
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;
error(member, diag, baseClassName);
}
else if (hasAbstractModifier(member) && baseHasAbstract) {
Expand All @@ -37739,7 +37755,12 @@ namespace ts {
}
else if (hasOverride) {
const className = typeToString(type);
error(member, Diagnostics.This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another_class, className);
error(
member,
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,
className);
}
}
}
Expand Down
21 changes: 20 additions & 1 deletion src/compiler/diagnosticMessages.json
Original file line number Diff line number Diff line change
Expand Up @@ -3817,7 +3817,26 @@
"category": "Error",
"code": 4118
},

"This member must have a JSDoc comment with an '@override' tag because it overrides a member in the base class '{0}'.": {
"category": "Error",
"code": 4119
},
"This parameter property must have a JSDoc comment with an '@override' tag because it overrides a member in the base class '{0}'.": {
"category": "Error",
"code": 4120
},
"This member cannot have a JSDoc comment with an '@override' tag because its containing class '{0}' does not extend another class.": {
"category": "Error",
"code": 4121
},
"This member cannot have a JSDoc comment with an '@override' tag because it is not declared in the base class '{0}'.": {
"category": "Error",
"code": 4122
},
"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}'?": {
"category": "Error",
"code": 4123
},
"The current host does not support the '{0}' option.": {
"category": "Error",
"code": 5001
Expand Down
1 change: 1 addition & 0 deletions src/services/codefixes/fixSpelling.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ namespace ts.codefix {
Diagnostics.Cannot_find_name_0_Did_you_mean_the_static_member_1_0.code,
Diagnostics._0_has_no_exported_member_named_1_Did_you_mean_2.code,
Diagnostics.This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you_mean_1.code,
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.code,
// for JSX class components
Diagnostics.No_overload_matches_this_call.code,
// for JSX FC
Expand Down
12 changes: 6 additions & 6 deletions tests/baselines/reference/jsdocOverrideTag1.errors.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
tests/cases/conformance/jsdoc/0.js(27,5): error TS4114: This member must have an 'override' modifier because it overrides a member in the base class 'A'.
tests/cases/conformance/jsdoc/0.js(32,5): error TS4113: This member cannot have an 'override' modifier because it is not declared in the base class 'A'.
tests/cases/conformance/jsdoc/0.js(40,5): error TS4112: This member cannot have an 'override' modifier because its containing class 'C' does not extend another class.
tests/cases/conformance/jsdoc/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'.
tests/cases/conformance/jsdoc/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'.
tests/cases/conformance/jsdoc/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.


==== tests/cases/conformance/jsdoc/0.js (3 errors) ====
Expand Down Expand Up @@ -32,14 +32,14 @@ tests/cases/conformance/jsdoc/0.js(40,5): error TS4112: This member cannot have

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'.

}

/** @override */
baz () {
~~~
!!! error TS4113: This member cannot have an 'override' modifier because it is not declared in the base class 'A'.
!!! error TS4122: This member cannot have a JSDoc comment with an '@override' tag because it is not declared in the base class 'A'.

}
}
Expand All @@ -49,7 +49,7 @@ tests/cases/conformance/jsdoc/0.js(40,5): error TS4112: This member cannot have
/** @override */
foo () {
~~~
!!! error TS4112: This member cannot have an 'override' modifier because its containing class 'C' does not extend another class.
!!! error TS4121: This member cannot have a JSDoc comment with an '@override' tag because its containing class 'C' does not extend another class.

}
}
16 changes: 8 additions & 8 deletions tests/baselines/reference/override_js2.errors.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
tests/cases/conformance/override/a.js(7,5): error TS4114: This member must have an 'override' modifier because it overrides a member in the base class 'B'.
tests/cases/conformance/override/a.js(11,5): error TS4113: This member cannot have an 'override' modifier because it is not declared in the base class 'B'.
tests/cases/conformance/override/a.js(17,5): error TS4112: This member cannot have an 'override' modifier because its containing class 'C' does not extend another class.
tests/cases/conformance/override/a.js(19,5): error TS4112: This member cannot have an 'override' modifier because its containing class 'C' does not extend another class.
tests/cases/conformance/override/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'.
tests/cases/conformance/override/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'.
tests/cases/conformance/override/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.
tests/cases/conformance/override/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.


==== tests/cases/conformance/override/a.js (4 errors) ====
Expand All @@ -13,23 +13,23 @@ tests/cases/conformance/override/a.js(19,5): error TS4112: This member cannot ha
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) {}
/** @override */
bar(v) {}
~~~
!!! error TS4113: This member cannot have an 'override' modifier because it is not declared in the base class 'B'.
!!! error TS4122: This member cannot have a JSDoc comment with an '@override' tag because it is not declared in the base class 'B'.
}

class C {
foo () {}
/** @override */
fooo (v) {}
~~~~
!!! error TS4112: This member cannot have an 'override' modifier because its containing class 'C' does not extend another class.
!!! error TS4121: This member cannot have a JSDoc comment with an '@override' tag because its containing class 'C' does not extend another class.
/** @override */
bar(v) {}
~~~
!!! error TS4112: This member cannot have an 'override' modifier because its containing class 'C' does not extend another class.
!!! error TS4121: This member cannot have a JSDoc comment with an '@override' tag because its containing class 'C' does not extend another class.
}
4 changes: 2 additions & 2 deletions tests/baselines/reference/override_js4.errors.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
tests/cases/conformance/override/a.js(7,5): error TS4117: This member cannot have an 'override' modifier because it is not declared in the base class 'A'. Did you mean 'doSomething'?
tests/cases/conformance/override/a.js(7,5): error TS4123: This member cannot have a JSDoc comment with an 'override' tag because it is not declared in the base class 'A'. Did you mean 'doSomething'?


==== tests/cases/conformance/override/a.js (1 errors) ====
Expand All @@ -10,6 +10,6 @@ tests/cases/conformance/override/a.js(7,5): error TS4117: This member cannot hav
/** @override */
doSomethang() {}
~~~~~~~~~~~
!!! error TS4117: This member cannot have an 'override' modifier because it is not declared in the base class 'A'. Did you mean 'doSomething'?
!!! error TS4123: This member cannot have a JSDoc comment with an 'override' tag because it is not declared in the base class 'A'. Did you mean 'doSomething'?
}