* Checks a class member declaration for either a missing or an invalid `override` modifier. * Note: this function can be used for speculative checking, * i.e. checking a member that does not yet exist in the program. * An example of that would be to call this function in a
(node, staticType, baseStaticType, baseWithThis, type, typeWithThis, memberHasOverrideModifier, memberHasAbstractModifier, memberIsStatic, memberIsParameterProperty, memberName, errorNode)
| 84242 | * @param errorNode The node where we should report an error, or undefined if we should not report errors. |
| 84243 | */ |
| 84244 | function checkMemberForOverrideModifier(node, staticType, baseStaticType, baseWithThis, type, typeWithThis, memberHasOverrideModifier, memberHasAbstractModifier, memberIsStatic, memberIsParameterProperty, memberName, errorNode) { |
| 84245 | var isJs = ts.isInJSFile(node); |
| 84246 | var nodeInAmbientContext = !!(node.flags & 16777216 /* NodeFlags.Ambient */); |
| 84247 | if (baseWithThis && (memberHasOverrideModifier || compilerOptions.noImplicitOverride)) { |
| 84248 | var memberEscapedName = ts.escapeLeadingUnderscores(memberName); |
| 84249 | var thisType = memberIsStatic ? staticType : typeWithThis; |
| 84250 | var baseType = memberIsStatic ? baseStaticType : baseWithThis; |
| 84251 | var prop = getPropertyOfType(thisType, memberEscapedName); |
| 84252 | var baseProp = getPropertyOfType(baseType, memberEscapedName); |
| 84253 | var baseClassName = typeToString(baseWithThis); |
| 84254 | if (prop && !baseProp && memberHasOverrideModifier) { |
| 84255 | if (errorNode) { |
| 84256 | var suggestion = getSuggestedSymbolForNonexistentClassMember(memberName, baseType); // Again, using symbol name: note that's different from `symbol.escapedName` |
| 84257 | suggestion ? |
| 84258 | error(errorNode, isJs ? |
| 84259 | ts.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 : |
| 84260 | ts.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)) : |
| 84261 | error(errorNode, isJs ? |
| 84262 | ts.Diagnostics.This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base_class_0 : |
| 84263 | ts.Diagnostics.This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0, baseClassName); |
| 84264 | } |
| 84265 | return 2 /* MemberOverrideStatus.HasInvalidOverride */; |
| 84266 | } |
| 84267 | else if (prop && (baseProp === null || baseProp === void 0 ? void 0 : baseProp.declarations) && compilerOptions.noImplicitOverride && !nodeInAmbientContext) { |
| 84268 | var baseHasAbstract = ts.some(baseProp.declarations, ts.hasAbstractModifier); |
| 84269 | if (memberHasOverrideModifier) { |
| 84270 | return 0 /* MemberOverrideStatus.Ok */; |
| 84271 | } |
| 84272 | if (!baseHasAbstract) { |
| 84273 | if (errorNode) { |
| 84274 | var diag = memberIsParameterProperty ? |
| 84275 | isJs ? |
| 84276 | ts.Diagnostics.This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_class_0 : |
| 84277 | ts.Diagnostics.This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0 : |
| 84278 | isJs ? |
| 84279 | ts.Diagnostics.This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_class_0 : |
| 84280 | ts.Diagnostics.This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0; |
| 84281 | error(errorNode, diag, baseClassName); |
| 84282 | } |
| 84283 | return 1 /* MemberOverrideStatus.NeedsOverride */; |
| 84284 | } |
| 84285 | else if (memberHasAbstractModifier && baseHasAbstract) { |
| 84286 | if (errorNode) { |
| 84287 | error(errorNode, ts.Diagnostics.This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared_in_the_base_class_0, baseClassName); |
| 84288 | } |
| 84289 | return 1 /* MemberOverrideStatus.NeedsOverride */; |
| 84290 | } |
| 84291 | } |
| 84292 | } |
| 84293 | else if (memberHasOverrideModifier) { |
| 84294 | if (errorNode) { |
| 84295 | var className = typeToString(type); |
| 84296 | error(errorNode, isJs ? |
| 84297 | ts.Diagnostics.This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_extend_another_class : |
| 84298 | ts.Diagnostics.This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another_class, className); |
| 84299 | } |
| 84300 | return 2 /* MemberOverrideStatus.HasInvalidOverride */; |
| 84301 | } |
no test coverage detected
searching dependent graphs…