From df33dd593f82f66446b9061cd67769b5a0ddab2c Mon Sep 17 00:00:00 2001 From: Alex T Date: Wed, 30 Sep 2020 18:26:35 +0300 Subject: [PATCH] fix(40441): show deprecated error for deprecated property in namespace (#40605) --- src/compiler/checker.ts | 5 ++- .../fourslash/jsdocDeprecated_suggestion10.ts | 33 +++++++++++++++++++ 2 files changed, 35 insertions(+), 3 deletions(-) create mode 100644 tests/cases/fourslash/jsdocDeprecated_suggestion10.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 33be831425f..d2a444fca69 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -13702,7 +13702,7 @@ namespace ts { if (propName !== undefined) { const prop = getPropertyOfType(objectType, propName); if (prop) { - if (reportDeprecated && accessNode && prop.valueDeclaration?.flags & NodeFlags.Deprecated && isUncalledFunctionReference(accessNode, prop)) { + if (reportDeprecated && accessNode && getDeclarationNodeFlagsFromSymbol(prop) & NodeFlags.Deprecated && isUncalledFunctionReference(accessNode, prop)) { const deprecatedNode = accessExpression?.argumentExpression ?? (isIndexedAccessTypeNode(accessNode) ? accessNode.indexType : accessNode); errorOrSuggestion(/* isError */ false, deprecatedNode, Diagnostics._0_is_deprecated, propName as string); } @@ -25691,10 +25691,9 @@ namespace ts { propType = (compilerOptions.noUncheckedIndexedAccess && !isAssignmentTarget(node)) ? getUnionType([indexInfo.type, undefinedType]) : indexInfo.type; } else { - if (prop.valueDeclaration?.flags & NodeFlags.Deprecated && isUncalledFunctionReference(node, prop)) { + if (getDeclarationNodeFlagsFromSymbol(prop) & NodeFlags.Deprecated && isUncalledFunctionReference(node, prop)) { errorOrSuggestion(/* isError */ false, right, Diagnostics._0_is_deprecated, right.escapedText as string); } - checkPropertyNotUsedBeforeDeclaration(prop, node, right); markPropertyAsReferenced(prop, node, left.kind === SyntaxKind.ThisKeyword); getNodeLinks(node).resolvedSymbol = prop; diff --git a/tests/cases/fourslash/jsdocDeprecated_suggestion10.ts b/tests/cases/fourslash/jsdocDeprecated_suggestion10.ts new file mode 100644 index 00000000000..f7ef89da199 --- /dev/null +++ b/tests/cases/fourslash/jsdocDeprecated_suggestion10.ts @@ -0,0 +1,33 @@ +/// + +// @filename: foo.ts +////export namespace foo { +//// /** @deprecated */ +//// export const bar = 1; +//// [|bar|]; +////} +////foo.[|bar|]; +////foo[[|"bar"|]]; + +goTo.file('foo.ts'); +const ranges = test.ranges(); +verify.getSuggestionDiagnostics([ + { + "code": 6385, + "message": "'bar' is deprecated", + "reportsDeprecated": true, + "range": ranges[0] + }, + { + "code": 6385, + "message": "'bar' is deprecated", + "reportsDeprecated": true, + "range": ranges[1] + }, + { + "code": 6385, + "message": "'bar' is deprecated", + "reportsDeprecated": true, + "range": ranges[2] + }, +]);