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

Method _parseSubscript

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

Source from the content-addressed store, hash-verified

1665 // subscript: test | [test] ':' [test] [sliceop]
1666 // sliceop: ':' [test]
1667 private _parseSubscript(): ExpressionNode {
1668 let firstToken = this._peekToken();
1669 let sliceExpressions: (ExpressionNode | undefined)[] = [undefined, undefined, undefined];
1670 let sliceIndex = 0;
1671 let sawColon = false;
1672
1673 while (true) {
1674 let nextTokenType = this._peekTokenType();
1675 if (nextTokenType === TokenType.CloseBracket ||
1676 nextTokenType === TokenType.Comma) {
1677 break;
1678 }
1679
1680 if (nextTokenType !== TokenType.Colon) {
1681 sliceExpressions[sliceIndex] = this._parseTestExpression();
1682 }
1683 sliceIndex++;
1684
1685 if (sliceIndex >= 3 || !this._consumeTokenIfType(TokenType.Colon)) {
1686 break;
1687 }
1688 sawColon = true;
1689 }
1690
1691 // If this was a simple expression with no colons return it.
1692 if (!sawColon) {
1693 return sliceExpressions[0]!;
1694 }
1695
1696 let sliceNode = new SliceExpressionNode(firstToken);
1697 sliceNode.startValue = sliceExpressions[0];
1698 sliceNode.endValue = sliceExpressions[1];
1699 sliceNode.stepValue = sliceExpressions[2];
1700 sliceNode.extend(sliceExpressions[2] || sliceExpressions[1] || sliceExpressions[0]);
1701
1702 return sliceNode;
1703 }
1704
1705 // arglist: argument (',' argument)* [',']
1706 private _parseArgList(): ArgumentNode[] {

Callers 1

_parseSubscriptListMethod · 0.95

Calls 5

_peekTokenMethod · 0.95
_peekTokenTypeMethod · 0.95
_parseTestExpressionMethod · 0.95
_consumeTokenIfTypeMethod · 0.95
extendMethod · 0.80

Tested by

no test coverage detected