(self)
| 411 | return self.parse_dotted_name() |
| 412 | |
| 413 | def parse_dotted_name(self) -> str: |
| 414 | name = [] |
| 415 | if self.tokens.peek_string('.'): |
| 416 | name.append('.') |
| 417 | self.tokens.pop() |
| 418 | if (self.tokens.peek_name() |
| 419 | and (tok := self.tokens.peek()) |
| 420 | and tok.string not in self._keywords): |
| 421 | name.append(self.tokens.pop_name()) |
| 422 | if not name: |
| 423 | raise ParseError('parse_dotted_name') |
| 424 | while self.tokens.peek_string('.'): |
| 425 | name.append('.') |
| 426 | self.tokens.pop() |
| 427 | if (self.tokens.peek_name() |
| 428 | and (tok := self.tokens.peek()) |
| 429 | and tok.string not in self._keywords): |
| 430 | name.append(self.tokens.pop_name()) |
| 431 | else: |
| 432 | break |
| 433 | |
| 434 | while self.tokens.peek_string('.'): |
| 435 | name.append('.') |
| 436 | self.tokens.pop() |
| 437 | return ''.join(name[::-1]) |
| 438 | |
| 439 | def parse_as_names(self) -> None: |
| 440 | self.parse_as_name() |
no test coverage detected