Parse a for loop.
(self)
| 234 | return nodes.AssignBlock(target, filter_node, body, lineno=lineno) |
| 235 | |
| 236 | def parse_for(self) -> nodes.For: |
| 237 | """Parse a for loop.""" |
| 238 | lineno = self.stream.expect("name:for").lineno |
| 239 | target = self.parse_assign_target(extra_end_rules=("name:in",)) |
| 240 | self.stream.expect("name:in") |
| 241 | iter = self.parse_tuple( |
| 242 | with_condexpr=False, extra_end_rules=("name:recursive",) |
| 243 | ) |
| 244 | test = None |
| 245 | if self.stream.skip_if("name:if"): |
| 246 | test = self.parse_expression() |
| 247 | recursive = self.stream.skip_if("name:recursive") |
| 248 | body = self.parse_statements(("name:endfor", "name:else")) |
| 249 | if next(self.stream).value == "endfor": |
| 250 | else_ = [] |
| 251 | else: |
| 252 | else_ = self.parse_statements(("name:endfor",), drop_needle=True) |
| 253 | return nodes.For(target, iter, body, else_, test, recursive, lineno=lineno) |
| 254 | |
| 255 | def parse_if(self) -> nodes.If: |
| 256 | """Parse an if construct.""" |
nothing calls this directly
no test coverage detected