Skip to content

Commit 2dd4148

Browse files
committed
use symbol links
1 parent 11340da commit 2dd4148

File tree

3 files changed

+40
-38
lines changed

3 files changed

+40
-38
lines changed

src/compiler/checker.ts

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13274,6 +13274,45 @@ namespace ts {
1327413274
undefined;
1327513275
}
1327613276

13277+
function getDeprecatedFlags(symbol: Symbol) {
13278+
if (!(symbol.flags & SymbolFlags.Deprecated)) {
13279+
return DeprecatedFlags.None;
13280+
}
13281+
13282+
const symbolLinks = getSymbolLinks(symbol);
13283+
if (symbolLinks.deprecatedFlags === undefined) {
13284+
let deprecatedFlags = DeprecatedFlags.None;
13285+
let allSignatureLikeDeprecated = true;
13286+
forEach(symbol.declarations, decl => {
13287+
const isTypeDecl = isTypeDeclaration(decl);
13288+
const hasDeprecated = decl.flags & NodeFlags.Deprecated;
13289+
if (hasDeprecated && symbol.flags & SymbolFlags.Type && isTypeDecl) {
13290+
deprecatedFlags |= DeprecatedFlags.Type;
13291+
}
13292+
13293+
if ((symbol.flags & (SymbolFlags.Constructor | SymbolFlags.Signature | SymbolFlags.Function | SymbolFlags.Method)) && isFunctionLike(decl)) {
13294+
if (hasDeprecated) {
13295+
deprecatedFlags |= DeprecatedFlags.Signature;
13296+
}
13297+
else {
13298+
allSignatureLikeDeprecated = false;
13299+
}
13300+
}
13301+
else if (hasDeprecated && symbol.flags & SymbolFlags.Value && !isTypeDecl) {
13302+
deprecatedFlags |= DeprecatedFlags.Value;
13303+
}
13304+
});
13305+
13306+
if (deprecatedFlags & DeprecatedFlags.Signature && allSignatureLikeDeprecated) {
13307+
deprecatedFlags &= DeprecatedFlags.SignatureExcludes;
13308+
deprecatedFlags |= DeprecatedFlags.Value;
13309+
}
13310+
13311+
symbolLinks.deprecatedFlags = deprecatedFlags;
13312+
}
13313+
return symbolLinks.deprecatedFlags;
13314+
}
13315+
1327713316
function getPropertyTypeForIndexType(originalObjectType: Type, objectType: Type, indexType: Type, fullIndexType: Type, suppressNoImplicitAnyError: boolean, accessNode: ElementAccessExpression | IndexedAccessTypeNode | PropertyName | BindingName | SyntheticExpression | undefined, accessFlags: AccessFlags) {
1327813317
const accessExpression = accessNode && accessNode.kind === SyntaxKind.ElementAccessExpression ? accessNode : undefined;
1327913318
const propName = accessNode && isPrivateIdentifier(accessNode) ? undefined : getPropertyNameFromIndex(indexType, accessNode);

src/compiler/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4592,7 +4592,6 @@ namespace ts {
45924592
/* @internal */ isReplaceableByMethod?: boolean; // Can this Javascript class property be replaced by a method symbol?
45934593
/* @internal */ isAssigned?: boolean; // True if the symbol is a parameter with assignments
45944594
/* @internal */ assignmentDeclarationMembers?: Map<number, Declaration>; // detected late-bound assignment declarations associated with the symbol
4595-
/* @internal */ deprecatedFlags?: DeprecatedFlags;
45964595
}
45974596

45984597
/* @internal */
@@ -4645,6 +4644,7 @@ namespace ts {
46454644
typeOnlyDeclaration?: TypeOnlyCompatibleAliasDeclaration | false; // First resolved alias declaration that makes the symbol only usable in type constructs
46464645
isConstructorDeclaredProperty?: boolean; // Property declared through 'this.x = ...' assignment in constructor
46474646
tupleLabelDeclaration?: NamedTupleMember | ParameterDeclaration; // Declaration associated with the tuple's label
4647+
deprecatedFlags?: DeprecatedFlags;
46484648
}
46494649

46504650
/* @internal */

src/compiler/utilities.ts

Lines changed: 0 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -926,43 +926,6 @@ namespace ts {
926926
}
927927
}
928928

929-
export function getDeprecatedFlags(symbol: Symbol) {
930-
if (symbol.flags & SymbolFlags.Deprecated) {
931-
if (symbol.deprecatedFlags === undefined) {
932-
let deprecatedFlags = DeprecatedFlags.None;
933-
let allSignatureLikeDeprecated = true;
934-
forEach(symbol.declarations, decl => {
935-
const isTypeDecl = isTypeDeclaration(decl);
936-
const hasDeprecated = decl.flags & NodeFlags.Deprecated;
937-
if (hasDeprecated && symbol.flags & SymbolFlags.Type && isTypeDecl) {
938-
deprecatedFlags |= DeprecatedFlags.Type;
939-
}
940-
941-
if ((symbol.flags & (SymbolFlags.Constructor | SymbolFlags.Signature | SymbolFlags.Function | SymbolFlags.Method)) && isFunctionLike(decl)) {
942-
if (hasDeprecated) {
943-
deprecatedFlags |= DeprecatedFlags.Signature;
944-
}
945-
else {
946-
allSignatureLikeDeprecated = false;
947-
}
948-
}
949-
else if (hasDeprecated && symbol.flags & SymbolFlags.Value && !isTypeDecl) {
950-
deprecatedFlags |= DeprecatedFlags.Value;
951-
}
952-
});
953-
954-
if (deprecatedFlags & DeprecatedFlags.Signature && allSignatureLikeDeprecated) {
955-
deprecatedFlags &= DeprecatedFlags.SignatureExcludes;
956-
deprecatedFlags |= DeprecatedFlags.Value;
957-
}
958-
959-
symbol.deprecatedFlags = deprecatedFlags;
960-
}
961-
return symbol.deprecatedFlags;
962-
}
963-
return DeprecatedFlags.None;
964-
}
965-
966929
export function createDiagnosticForNode(node: Node, message: DiagnosticMessage, arg0?: string | number, arg1?: string | number, arg2?: string | number, arg3?: string | number): DiagnosticWithLocation {
967930
const sourceFile = getSourceFileOfNode(node);
968931
return createDiagnosticForNodeInSourceFile(sourceFile, node, message, arg0, arg1, arg2, arg3);

0 commit comments

Comments
 (0)