MCPcopy Create free account
hub / github.com/nodejs/node / getCandidateDiscriminantPropertyAccess

Function getCandidateDiscriminantPropertyAccess

test/fixtures/snapshot/typescript.js:70747–70786  ·  view source on GitHub ↗
(expr)

Source from the content-addressed store, hash-verified

70745 return result;
70746 }
70747 function getCandidateDiscriminantPropertyAccess(expr) {
70748 if (ts.isBindingPattern(reference) || ts.isFunctionExpressionOrArrowFunction(reference) || ts.isObjectLiteralMethod(reference)) {
70749 // When the reference is a binding pattern or function or arrow expression, we are narrowing a pesudo-reference in
70750 // getNarrowedTypeOfSymbol. An identifier for a destructuring variable declared in the same binding pattern or
70751 // parameter declared in the same parameter list is a candidate.
70752 if (ts.isIdentifier(expr)) {
70753 var symbol = getResolvedSymbol(expr);
70754 var declaration = symbol.valueDeclaration;
70755 if (declaration && (ts.isBindingElement(declaration) || ts.isParameter(declaration)) && reference === declaration.parent && !declaration.initializer && !declaration.dotDotDotToken) {
70756 return declaration;
70757 }
70758 }
70759 }
70760 else if (ts.isAccessExpression(expr)) {
70761 // An access expression is a candidate if the reference matches the left hand expression.
70762 if (isMatchingReference(reference, expr.expression)) {
70763 return expr;
70764 }
70765 }
70766 else if (ts.isIdentifier(expr)) {
70767 var symbol = getResolvedSymbol(expr);
70768 if (isConstVariable(symbol)) {
70769 var declaration = symbol.valueDeclaration;
70770 // Given 'const x = obj.kind', allow 'x' as an alias for 'obj.kind'
70771 if (ts.isVariableDeclaration(declaration) && !declaration.type && declaration.initializer && ts.isAccessExpression(declaration.initializer) &&
70772 isMatchingReference(reference, declaration.initializer.expression)) {
70773 return declaration.initializer;
70774 }
70775 // Given 'const { kind: x } = obj', allow 'x' as an alias for 'obj.kind'
70776 if (ts.isBindingElement(declaration) && !declaration.initializer) {
70777 var parent = declaration.parent.parent;
70778 if (ts.isVariableDeclaration(parent) && !parent.type && parent.initializer && (ts.isIdentifier(parent.initializer) || ts.isAccessExpression(parent.initializer)) &&
70779 isMatchingReference(reference, parent.initializer)) {
70780 return declaration;
70781 }
70782 }
70783 }
70784 }
70785 return undefined;
70786 }
70787 function getDiscriminantPropertyAccess(expr, computedType) {
70788 var type = declaredType.flags & 1048576 /* TypeFlags.Union */ ? declaredType : computedType;
70789 if (type.flags & 1048576 /* TypeFlags.Union */) {

Callers 1

Calls 3

getResolvedSymbolFunction · 0.85
isMatchingReferenceFunction · 0.85
isConstVariableFunction · 0.85

Tested by

no test coverage detected