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

Function symbolToExpression

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

Source from the content-addressed store, hash-verified

53797 }
53798 }
53799 function symbolToExpression(symbol, context, meaning) {
53800 var chain = lookupSymbolChain(symbol, context, meaning);
53801 return createExpressionFromSymbolChain(chain, chain.length - 1);
53802 function createExpressionFromSymbolChain(chain, index) {
53803 var typeParameterNodes = lookupTypeParameterNodes(chain, index, context);
53804 var symbol = chain[index];
53805 if (index === 0) {
53806 context.flags |= 16777216 /* NodeBuilderFlags.InInitialEntityName */;
53807 }
53808 var symbolName = getNameOfSymbolAsWritten(symbol, context);
53809 if (index === 0) {
53810 context.flags ^= 16777216 /* NodeBuilderFlags.InInitialEntityName */;
53811 }
53812 var firstChar = symbolName.charCodeAt(0);
53813 if (ts.isSingleOrDoubleQuote(firstChar) && ts.some(symbol.declarations, hasNonGlobalAugmentationExternalModuleSymbol)) {
53814 return ts.factory.createStringLiteral(getSpecifierForModuleSymbol(symbol, context));
53815 }
53816 var canUsePropertyAccess = firstChar === 35 /* CharacterCodes.hash */ ?
53817 symbolName.length > 1 && ts.isIdentifierStart(symbolName.charCodeAt(1), languageVersion) :
53818 ts.isIdentifierStart(firstChar, languageVersion);
53819 if (index === 0 || canUsePropertyAccess) {
53820 var identifier = ts.setEmitFlags(ts.factory.createIdentifier(symbolName, typeParameterNodes), 16777216 /* EmitFlags.NoAsciiEscaping */);
53821 identifier.symbol = symbol;
53822 return index > 0 ? ts.factory.createPropertyAccessExpression(createExpressionFromSymbolChain(chain, index - 1), identifier) : identifier;
53823 }
53824 else {
53825 if (firstChar === 91 /* CharacterCodes.openBracket */) {
53826 symbolName = symbolName.substring(1, symbolName.length - 1);
53827 firstChar = symbolName.charCodeAt(0);
53828 }
53829 var expression = void 0;
53830 if (ts.isSingleOrDoubleQuote(firstChar) && !(symbol.flags & 8 /* SymbolFlags.EnumMember */)) {
53831 expression = ts.factory.createStringLiteral(ts.stripQuotes(symbolName).replace(/\\./g, function (s) { return s.substring(1); }), firstChar === 39 /* CharacterCodes.singleQuote */);
53832 }
53833 else if (("" + +symbolName) === symbolName) {
53834 expression = ts.factory.createNumericLiteral(+symbolName);
53835 }
53836 if (!expression) {
53837 expression = ts.setEmitFlags(ts.factory.createIdentifier(symbolName, typeParameterNodes), 16777216 /* EmitFlags.NoAsciiEscaping */);
53838 expression.symbol = symbol;
53839 }
53840 return ts.factory.createElementAccessExpression(createExpressionFromSymbolChain(chain, index - 1), expression);
53841 }
53842 }
53843 }
53844 function isStringNamed(d) {
53845 var name = ts.getNameOfDeclaration(d);
53846 return !!name && ts.isStringLiteral(name);

Calls 2

lookupSymbolChainFunction · 0.85

Tested by

no test coverage detected