MCPcopy
hub / github.com/microsoft/pyright / _parseAtomExpression

Method _parseAtomExpression

server/src/parser/parser.ts:1576–1641  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

1574 // atom_expr: ['await'] atom trailer*
1575 // trailer: '(' [arglist] ')' | '[' subscriptlist ']' | '.' NAME
1576 private _parseAtomExpression(): ExpressionNode {
1577 let awaitToken: KeywordToken | undefined;
1578 if (this._peekKeywordType() === KeywordType.Await) {
1579 awaitToken = this._getKeywordToken(KeywordType.Await);
1580 if (this._getLanguageVersion() < PythonVersion.V35) {
1581 this._addError(
1582 `Support for 'await' keyword requires Python 3.5 or newer`,
1583 awaitToken);
1584 }
1585 }
1586
1587 let atomExpression = this._parseAtom();
1588 if (atomExpression instanceof ErrorExpressionNode) {
1589 return atomExpression;
1590 }
1591
1592 // Consume trailers.
1593 while (true) {
1594 // Is it a function call?
1595 if (this._consumeTokenIfType(TokenType.OpenParenthesis)) {
1596 let argList = this._parseArgList();
1597 let callNode = new CallExpressionNode(atomExpression);
1598 callNode.arguments = argList;
1599 callNode.extend(argList);
1600
1601 let nextToken = this._peekToken();
1602 if (!this._consumeTokenIfType(TokenType.CloseParenthesis)) {
1603 return this._handleExpressionParseError('Expected ")"');
1604 } else {
1605 callNode.extend(nextToken);
1606 }
1607
1608 atomExpression = callNode;
1609 } else if (this._consumeTokenIfType(TokenType.OpenBracket)) {
1610 // Is it an index operator?
1611 let indexExpr = this._parseSubscriptList();
1612 let indexNode = new IndexExpressionNode(atomExpression, indexExpr);
1613 indexNode.extend(indexNode);
1614
1615 let nextToken = this._peekToken();
1616 if (!this._consumeTokenIfType(TokenType.CloseBracket)) {
1617 return this._handleExpressionParseError('Expected "]"');
1618 } else {
1619 indexNode.extend(nextToken);
1620 }
1621
1622 atomExpression = indexNode;
1623 } else if (this._consumeTokenIfType(TokenType.Dot)) {
1624 // Is it a member access?
1625 let memberName = this._getTokenIfIdentifier();
1626 if (!memberName) {
1627 return this._handleExpressionParseError('Expected member name after "."');
1628 }
1629 atomExpression = new MemberAccessExpressionNode(
1630 atomExpression, new NameNode(memberName));
1631 } else {
1632 break;
1633 }

Callers 1

Calls 12

_peekKeywordTypeMethod · 0.95
_getKeywordTokenMethod · 0.95
_getLanguageVersionMethod · 0.95
_addErrorMethod · 0.95
_parseAtomMethod · 0.95
_consumeTokenIfTypeMethod · 0.95
_parseArgListMethod · 0.95
_peekTokenMethod · 0.95
_parseSubscriptListMethod · 0.95
_getTokenIfIdentifierMethod · 0.95
extendMethod · 0.80

Tested by

no test coverage detected