Parses an atom. See:
(&mut self, context: ExpressionContext)
| 581 | /// |
| 582 | /// See: <https://docs.python.org/3/reference/expressions.html#atoms> |
| 583 | fn parse_atom(&mut self, context: ExpressionContext) -> ParsedExpr { |
| 584 | let start = self.node_start(); |
| 585 | |
| 586 | let lhs = match self.current_token_kind() { |
| 587 | TokenKind::Float => { |
| 588 | let value = self.bump_float(); |
| 589 | |
| 590 | Expr::NumberLiteral(ast::ExprNumberLiteral { |
| 591 | value: Number::Float(value), |
| 592 | range: self.node_range(start), |
| 593 | node_index: AtomicNodeIndex::NONE, |
| 594 | }) |
| 595 | } |
| 596 | TokenKind::Complex => { |
| 597 | let (real, imag) = self.bump_complex(); |
| 598 | Expr::NumberLiteral(ast::ExprNumberLiteral { |
| 599 | value: Number::Complex { real, imag }, |
| 600 | range: self.node_range(start), |
| 601 | node_index: AtomicNodeIndex::NONE, |
| 602 | }) |
| 603 | } |
| 604 | TokenKind::Int => { |
| 605 | let value = self.bump_int(); |
| 606 | Expr::NumberLiteral(ast::ExprNumberLiteral { |
| 607 | value: Number::Int(value), |
| 608 | range: self.node_range(start), |
| 609 | node_index: AtomicNodeIndex::NONE, |
| 610 | }) |
| 611 | } |
| 612 | TokenKind::True => { |
| 613 | self.bump(TokenKind::True); |
| 614 | Expr::BooleanLiteral(ast::ExprBooleanLiteral { |
| 615 | value: true, |
| 616 | range: self.node_range(start), |
| 617 | node_index: AtomicNodeIndex::NONE, |
| 618 | }) |
| 619 | } |
| 620 | TokenKind::False => { |
| 621 | self.bump(TokenKind::False); |
| 622 | Expr::BooleanLiteral(ast::ExprBooleanLiteral { |
| 623 | value: false, |
| 624 | range: self.node_range(start), |
| 625 | node_index: AtomicNodeIndex::NONE, |
| 626 | }) |
| 627 | } |
| 628 | TokenKind::None => { |
| 629 | self.bump(TokenKind::None); |
| 630 | Expr::NoneLiteral(ast::ExprNoneLiteral { |
| 631 | range: self.node_range(start), |
| 632 | node_index: AtomicNodeIndex::NONE, |
| 633 | }) |
| 634 | } |
| 635 | TokenKind::Ellipsis => { |
| 636 | self.bump(TokenKind::Ellipsis); |
| 637 | Expr::EllipsisLiteral(ast::ExprEllipsisLiteral { |
| 638 | range: self.node_range(start), |
| 639 | node_index: AtomicNodeIndex::NONE, |
| 640 | }) |
no test coverage detected