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

Function lookupSymbolChainWorker

test/fixtures/snapshot/typescript.js:53411–53490  ·  view source on GitHub ↗
(symbol, context, meaning, yieldModuleSymbol)

Source from the content-addressed store, hash-verified

53409 return lookupSymbolChainWorker(symbol, context, meaning, yieldModuleSymbol);
53410 }
53411 function lookupSymbolChainWorker(symbol, context, meaning, yieldModuleSymbol) {
53412 // Try to get qualified name if the symbol is not a type parameter and there is an enclosing declaration.
53413 var chain;
53414 var isTypeParameter = symbol.flags & 262144 /* SymbolFlags.TypeParameter */;
53415 if (!isTypeParameter && (context.enclosingDeclaration || context.flags & 64 /* NodeBuilderFlags.UseFullyQualifiedType */) && !(context.flags & 134217728 /* NodeBuilderFlags.DoNotIncludeSymbolChain */)) {
53416 chain = ts.Debug.checkDefined(getSymbolChain(symbol, meaning, /*endOfChain*/ true));
53417 ts.Debug.assert(chain && chain.length > 0);
53418 }
53419 else {
53420 chain = [symbol];
53421 }
53422 return chain;
53423 /** @param endOfChain Set to false for recursive calls; non-recursive calls should always output something. */
53424 function getSymbolChain(symbol, meaning, endOfChain) {
53425 var accessibleSymbolChain = getAccessibleSymbolChain(symbol, context.enclosingDeclaration, meaning, !!(context.flags & 128 /* NodeBuilderFlags.UseOnlyExternalAliasing */));
53426 var parentSpecifiers;
53427 if (!accessibleSymbolChain ||
53428 needsQualification(accessibleSymbolChain[0], context.enclosingDeclaration, accessibleSymbolChain.length === 1 ? meaning : getQualifiedLeftMeaning(meaning))) {
53429 // Go up and add our parent.
53430 var parents_1 = getContainersOfSymbol(accessibleSymbolChain ? accessibleSymbolChain[0] : symbol, context.enclosingDeclaration, meaning);
53431 if (ts.length(parents_1)) {
53432 parentSpecifiers = parents_1.map(function (symbol) {
53433 return ts.some(symbol.declarations, hasNonGlobalAugmentationExternalModuleSymbol)
53434 ? getSpecifierForModuleSymbol(symbol, context)
53435 : undefined;
53436 });
53437 var indices = parents_1.map(function (_, i) { return i; });
53438 indices.sort(sortByBestName);
53439 var sortedParents = indices.map(function (i) { return parents_1[i]; });
53440 for (var _i = 0, sortedParents_1 = sortedParents; _i < sortedParents_1.length; _i++) {
53441 var parent = sortedParents_1[_i];
53442 var parentChain = getSymbolChain(parent, getQualifiedLeftMeaning(meaning), /*endOfChain*/ false);
53443 if (parentChain) {
53444 if (parent.exports && parent.exports.get("export=" /* InternalSymbolName.ExportEquals */) &&
53445 getSymbolIfSameReference(parent.exports.get("export=" /* InternalSymbolName.ExportEquals */), symbol)) {
53446 // parentChain root _is_ symbol - symbol is a module export=, so it kinda looks like it's own parent
53447 // No need to lookup an alias for the symbol in itself
53448 accessibleSymbolChain = parentChain;
53449 break;
53450 }
53451 accessibleSymbolChain = parentChain.concat(accessibleSymbolChain || [getAliasForSymbolInContainer(parent, symbol) || symbol]);
53452 break;
53453 }
53454 }
53455 }
53456 }
53457 if (accessibleSymbolChain) {
53458 return accessibleSymbolChain;
53459 }
53460 if (
53461 // If this is the last part of outputting the symbol, always output. The cases apply only to parent symbols.
53462 endOfChain ||
53463 // If a parent symbol is an anonymous type, don't write it.
53464 !(symbol.flags & (2048 /* SymbolFlags.TypeLiteral */ | 4096 /* SymbolFlags.ObjectLiteral */))) {
53465 // If a parent symbol is an external module, don't write it. (We prefer just `x` vs `"foo/bar".x`.)
53466 if (!endOfChain && !yieldModuleSymbol && !!ts.forEach(symbol.declarations, hasNonGlobalAugmentationExternalModuleSymbol)) {
53467 return;
53468 }

Callers 2

lookupSymbolChainFunction · 0.85

Calls 2

getSymbolChainFunction · 0.85
assertMethod · 0.80

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…