MCPcopy Create free account
hub / github.com/Glyphack/enderpy / parse_target

Method parse_target

parser/src/parser/parser.rs:1721–1813  ·  view source on GitHub ↗

https://docs.python.org/3/reference/simple_stmts.html#grammar-token-python-grammar-target

(&mut self)

Source from the content-addressed store, hash-verified

1719
1720 // https://docs.python.org/3/reference/simple_stmts.html#grammar-token-python-grammar-target
1721 fn parse_target(&mut self) -> Result<Expression, ParsingError> {
1722 let node = self.start_node();
1723 let mut targets = vec![];
1724 let target = match self.cur_kind() {
1725 Kind::Type | Kind::Match | Kind::Identifier => match self.peek_kind() {
1726 Ok(Kind::LeftBrace) => {
1727 let atom = self.parse_atom()?;
1728 self.parse_subscript(node, atom)?
1729 }
1730 Ok(Kind::Dot) => {
1731 let atom = self.parse_atom()?;
1732 self.parse_attribute_ref(node, atom)?
1733 }
1734 _ => {
1735 let identifier = self.cur_token().to_string(self.source);
1736 let mut identifier_node = self.start_node();
1737 identifier_node = self.finish_node(identifier_node);
1738 self.expect(Kind::Identifier)?;
1739 identifier_node = self.finish_node(identifier_node);
1740 return Ok(Expression::Name(Box::new(Name {
1741 node: identifier_node,
1742 id: identifier,
1743 parenthesized: false,
1744 })));
1745 }
1746 },
1747 Kind::LeftBrace => {
1748 let mut elements = vec![];
1749 self.bump(Kind::LeftBrace);
1750 loop {
1751 elements.push(self.parse_target()?);
1752 if !self.eat(Kind::Comma) {
1753 break;
1754 }
1755 }
1756 self.expect(Kind::RightBrace)?;
1757 Expression::List(Box::new(List {
1758 node: self.finish_node(node),
1759 elements,
1760 }))
1761 }
1762 Kind::LeftParen => {
1763 let mut targets = vec![];
1764 self.bump(Kind::LeftParen);
1765 loop {
1766 targets.push(self.parse_target()?);
1767 if !self.eat(Kind::Comma) {
1768 break;
1769 }
1770 }
1771 self.expect(Kind::RightParen)?;
1772 if targets.len() == 1 {
1773 targets.pop().unwrap()
1774 } else {
1775 Expression::Tuple(Box::new(Tuple {
1776 node: self.finish_node(node),
1777 elements: targets,
1778 }))

Callers 2

parse_with_itemMethod · 0.80
parse_target_listMethod · 0.80

Calls 15

NameClass · 0.85
ListClass · 0.85
TupleClass · 0.85
StarredClass · 0.85
start_nodeMethod · 0.80
cur_kindMethod · 0.80
peek_kindMethod · 0.80
parse_atomMethod · 0.80
parse_subscriptMethod · 0.80
parse_attribute_refMethod · 0.80
to_stringMethod · 0.80
cur_tokenMethod · 0.80

Tested by

no test coverage detected