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

Method _parseForStatement

server/src/parser/parser.ts:308–339  ·  view source on GitHub ↗
(asyncToken?: KeywordToken)

Source from the content-addressed store, hash-verified

306
307 // for_stmt: [async] 'for' exprlist 'in' testlist suite ['else' suite]
308 private _parseForStatement(asyncToken?: KeywordToken): ForNode {
309 let forToken = this._getKeywordToken(KeywordType.For);
310
311 let exprListResult = this._parseExpressionList(true);
312 let targetExpr = this._makeExpressionOrTuple(exprListResult);
313 let seqExpr: ExpressionNode;
314 let forSuite: SuiteNode;
315 let elseSuite: SuiteNode | undefined;
316
317 if (!this._consumeTokenIfKeyword(KeywordType.In)) {
318 seqExpr = this._handleExpressionParseError('Expected "in"');
319 forSuite = new SuiteNode(this._peekToken());
320 } else {
321 seqExpr = this._parseTestListAsExpression('Expected expression after "in"');
322 forSuite = this._parseLoopSuite();
323
324 if (this._consumeTokenIfKeyword(KeywordType.Else)) {
325 elseSuite = this._parseSuite();
326 }
327 }
328
329 let forNode = new ForNode(forToken, targetExpr, seqExpr, forSuite);
330 forNode.elseSuite = elseSuite;
331 forNode.extend(elseSuite);
332
333 if (asyncToken) {
334 forNode.isAsync = true;
335 forNode.extend(asyncToken);
336 }
337
338 return forNode;
339 }
340
341 // comp_iter: comp_for | comp_if
342 private _tryParseListComprehension<T extends ParseNode>(target: T): ListComprehensionNode<T> | undefined {

Callers 2

_parseStatementMethod · 0.95
_parseAsyncStatementMethod · 0.95

Calls 10

_getKeywordTokenMethod · 0.95
_parseExpressionListMethod · 0.95
_peekTokenMethod · 0.95
_parseLoopSuiteMethod · 0.95
_parseSuiteMethod · 0.95
extendMethod · 0.80

Tested by

no test coverage detected