MCPcopy Index your code
hub / github.com/nodejs/node / createAccessFromSymbolChain

Function createAccessFromSymbolChain

test/fixtures/snapshot/typescript.js:53677–53733  ·  view source on GitHub ↗
(chain, index, stopper)

Source from the content-addressed store, hash-verified

53675 return ts.factory.createTypeReferenceNode(entityName, lastTypeArgs);
53676 }
53677 function createAccessFromSymbolChain(chain, index, stopper) {
53678 var typeParameterNodes = index === (chain.length - 1) ? overrideTypeArguments : lookupTypeParameterNodes(chain, index, context);
53679 var symbol = chain[index];
53680 var parent = chain[index - 1];
53681 var symbolName;
53682 if (index === 0) {
53683 context.flags |= 16777216 /* NodeBuilderFlags.InInitialEntityName */;
53684 symbolName = getNameOfSymbolAsWritten(symbol, context);
53685 context.approximateLength += (symbolName ? symbolName.length : 0) + 1;
53686 context.flags ^= 16777216 /* NodeBuilderFlags.InInitialEntityName */;
53687 }
53688 else {
53689 if (parent && getExportsOfSymbol(parent)) {
53690 var exports_2 = getExportsOfSymbol(parent);
53691 ts.forEachEntry(exports_2, function (ex, name) {
53692 if (getSymbolIfSameReference(ex, symbol) && !isLateBoundName(name) && name !== "export=" /* InternalSymbolName.ExportEquals */) {
53693 symbolName = ts.unescapeLeadingUnderscores(name);
53694 return true;
53695 }
53696 });
53697 }
53698 }
53699 if (symbolName === undefined) {
53700 var name = ts.firstDefined(symbol.declarations, ts.getNameOfDeclaration);
53701 if (name && ts.isComputedPropertyName(name) && ts.isEntityName(name.expression)) {
53702 var LHS = createAccessFromSymbolChain(chain, index - 1, stopper);
53703 if (ts.isEntityName(LHS)) {
53704 return ts.factory.createIndexedAccessTypeNode(ts.factory.createParenthesizedType(ts.factory.createTypeQueryNode(LHS)), ts.factory.createTypeQueryNode(name.expression));
53705 }
53706 return LHS;
53707 }
53708 symbolName = getNameOfSymbolAsWritten(symbol, context);
53709 }
53710 context.approximateLength += symbolName.length + 1;
53711 if (!(context.flags & 16 /* NodeBuilderFlags.ForbidIndexedAccessSymbolReferences */) && parent &&
53712 getMembersOfSymbol(parent) && getMembersOfSymbol(parent).get(symbol.escapedName) &&
53713 getSymbolIfSameReference(getMembersOfSymbol(parent).get(symbol.escapedName), symbol)) {
53714 // Should use an indexed access
53715 var LHS = createAccessFromSymbolChain(chain, index - 1, stopper);
53716 if (ts.isIndexedAccessTypeNode(LHS)) {
53717 return ts.factory.createIndexedAccessTypeNode(LHS, ts.factory.createLiteralTypeNode(ts.factory.createStringLiteral(symbolName)));
53718 }
53719 else {
53720 return ts.factory.createIndexedAccessTypeNode(ts.factory.createTypeReferenceNode(LHS, typeParameterNodes), ts.factory.createLiteralTypeNode(ts.factory.createStringLiteral(symbolName)));
53721 }
53722 }
53723 var identifier = ts.setEmitFlags(ts.factory.createIdentifier(symbolName, typeParameterNodes), 16777216 /* EmitFlags.NoAsciiEscaping */);
53724 identifier.symbol = symbol;
53725 if (index > stopper) {
53726 var LHS = createAccessFromSymbolChain(chain, index - 1, stopper);
53727 if (!ts.isEntityName(LHS)) {
53728 return ts.Debug.fail("Impossible construct - an export of an indexed access cannot be reachable");
53729 }
53730 return ts.factory.createQualifiedName(LHS, identifier);
53731 }
53732 return identifier;
53733 }
53734 }

Callers 1

symbolToTypeNodeFunction · 0.85

Calls 8

lookupTypeParameterNodesFunction · 0.85
getNameOfSymbolAsWrittenFunction · 0.85
getExportsOfSymbolFunction · 0.85
getSymbolIfSameReferenceFunction · 0.85
isLateBoundNameFunction · 0.85
getMembersOfSymbolFunction · 0.85
getMethod · 0.65
failMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…