Files
memecoin-botV2/.pnpm-store/v10/files/a7/eb190ea5bee0ba63c22fd1f92e219e682f6eb11f73441a92157227ea98285308ca65eff76b2b5e85617bb3013284dbec10c0f890b32cea5ec9f1942e314ad9

32 lines
1.3 KiB
Plaintext

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.getBaseTypesOfClassMember = getBaseTypesOfClassMember;
/**
* Given a member of a class which extends another class or implements an interface,
* yields the corresponding member type for each of the base class/interfaces.
*/
function* getBaseTypesOfClassMember(services, memberNode) {
const memberTsNode = services.esTreeNodeToTSNodeMap.get(memberNode);
if (memberTsNode.name == null) {
return;
}
const checker = services.program.getTypeChecker();
const memberSymbol = checker.getSymbolAtLocation(memberTsNode.name);
if (memberSymbol == null) {
return;
}
const classNode = memberTsNode.parent;
for (const clauseNode of classNode.heritageClauses ?? []) {
for (const baseTypeNode of clauseNode.types) {
const baseType = checker.getTypeAtLocation(baseTypeNode);
const baseMemberSymbol = checker.getPropertyOfType(baseType, memberSymbol.name);
if (baseMemberSymbol == null) {
continue;
}
const baseMemberType = checker.getTypeOfSymbolAtLocation(baseMemberSymbol, memberTsNode);
const heritageToken = clauseNode.token;
yield { baseMemberType, baseType, heritageToken };
}
}
}