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

Method parse_named_expression

parser/src/parser/parser.rs:1549–1576  ·  view source on GitHub ↗

https://docs.python.org/3/reference/expressions.html#assignment-expressions

(&mut self)

Source from the content-addressed store, hash-verified

1547
1548 // https://docs.python.org/3/reference/expressions.html#assignment-expressions
1549 fn parse_named_expression(&mut self) -> Result<Expression, ParsingError> {
1550 let node = self.start_node();
1551 // TODO: Maybe this walrus check is redundant
1552 if self.at(Kind::Identifier) && matches!(self.peek_kind()?, Kind::Walrus) {
1553 let identifier = self.cur_token().to_string(self.source);
1554 let mut identifier_node = self.start_node();
1555 self.bump_any();
1556 identifier_node = self.finish_node(identifier_node);
1557 if self.eat(Kind::Walrus) {
1558 let value = self.parse_expression()?;
1559 return Ok(Expression::NamedExpr(Box::new(NamedExpression {
1560 node: self.finish_node(node),
1561 target: Expression::Name(Box::new(Name {
1562 node: identifier_node,
1563 id: identifier,
1564 parenthesized: false,
1565 })),
1566 value,
1567 })));
1568 }
1569 return Ok(Expression::Name(Box::new(Name {
1570 node: identifier_node,
1571 id: identifier,
1572 parenthesized: false,
1573 })));
1574 }
1575 self.parse_expression()
1576 }
1577
1578 // https://docs.python.org/3/reference/expressions.html#list-displays
1579 fn parse_list(&mut self) -> Result<Expression, ParsingError> {

Callers 10

parse_if_statementMethod · 0.80
parse_while_statementMethod · 0.80
parse_guardMethod · 0.80
parse_starred_itemMethod · 0.80
parse_primaryMethod · 0.80
parse_argument_listMethod · 0.80
parse_sliceMethod · 0.80

Calls 9

NameClass · 0.85
start_nodeMethod · 0.80
atMethod · 0.80
to_stringMethod · 0.80
cur_tokenMethod · 0.80
bump_anyMethod · 0.80
finish_nodeMethod · 0.80
eatMethod · 0.80
parse_expressionMethod · 0.80

Tested by

no test coverage detected