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

Function parseMemberExpressionRest

test/fixtures/snapshot/typescript.js:35516–35557  ·  view source on GitHub ↗
(pos, expression, allowOptionalChain)

Source from the content-addressed store, hash-verified

35514 return finishNode(indexedAccess, pos);
35515 }
35516 function parseMemberExpressionRest(pos, expression, allowOptionalChain) {
35517 while (true) {
35518 var questionDotToken = void 0;
35519 var isPropertyAccess = false;
35520 if (allowOptionalChain && isStartOfOptionalPropertyOrElementAccessChain()) {
35521 questionDotToken = parseExpectedToken(28 /* SyntaxKind.QuestionDotToken */);
35522 isPropertyAccess = ts.tokenIsIdentifierOrKeyword(token());
35523 }
35524 else {
35525 isPropertyAccess = parseOptional(24 /* SyntaxKind.DotToken */);
35526 }
35527 if (isPropertyAccess) {
35528 expression = parsePropertyAccessExpressionRest(pos, expression, questionDotToken);
35529 continue;
35530 }
35531 // when in the [Decorator] context, we do not parse ElementAccess as it could be part of a ComputedPropertyName
35532 if ((questionDotToken || !inDecoratorContext()) && parseOptional(22 /* SyntaxKind.OpenBracketToken */)) {
35533 expression = parseElementAccessExpressionRest(pos, expression, questionDotToken);
35534 continue;
35535 }
35536 if (isTemplateStartOfTaggedTemplate()) {
35537 // Absorb type arguments into TemplateExpression when preceding expression is ExpressionWithTypeArguments
35538 expression = !questionDotToken && expression.kind === 228 /* SyntaxKind.ExpressionWithTypeArguments */ ?
35539 parseTaggedTemplateRest(pos, expression.expression, questionDotToken, expression.typeArguments) :
35540 parseTaggedTemplateRest(pos, expression, questionDotToken, /*typeArguments*/ undefined);
35541 continue;
35542 }
35543 if (!questionDotToken) {
35544 if (token() === 53 /* SyntaxKind.ExclamationToken */ && !scanner.hasPrecedingLineBreak()) {
35545 nextToken();
35546 expression = finishNode(factory.createNonNullExpression(expression), pos);
35547 continue;
35548 }
35549 var typeArguments = tryParse(parseTypeArgumentsInExpression);
35550 if (typeArguments) {
35551 expression = finishNode(factory.createExpressionWithTypeArguments(expression, typeArguments), pos);
35552 continue;
35553 }
35554 }
35555 return expression;
35556 }
35557 }
35558 function isTemplateStartOfTaggedTemplate() {
35559 return token() === 14 /* SyntaxKind.NoSubstitutionTemplateLiteral */ || token() === 15 /* SyntaxKind.TemplateHead */;
35560 }

Callers 4

parseCallExpressionRestFunction · 0.85
parseDecoratorExpressionFunction · 0.85

Calls 12

parseExpectedTokenFunction · 0.85
parseOptionalFunction · 0.85
inDecoratorContextFunction · 0.85
parseTaggedTemplateRestFunction · 0.85
nextTokenFunction · 0.85
finishNodeFunction · 0.85
tryParseFunction · 0.85
tokenFunction · 0.70

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…