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

Method parse_starred_expression

parser/src/parser/parser.rs:2873–2910  ·  view source on GitHub ↗

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

(
        &mut self,
        node: Node,
        first_elm: Expression,
    )

Source from the content-addressed store, hash-verified

2871
2872 // https://docs.python.org/3/reference/expressions.html#expression-lists
2873 fn parse_starred_expression(
2874 &mut self,
2875 node: Node,
2876 first_elm: Expression,
2877 ) -> Result<Expression, ParsingError> {
2878 let mut elements = vec![];
2879 // if tuple has one element but there's a comma after
2880 // it, it's a tuple
2881 let mut seen_comma = false;
2882 elements.push(first_elm);
2883 while !self.at(Kind::Eof) && !self.at(Kind::RightParen) {
2884 self.expect(Kind::Comma)?;
2885 seen_comma = true;
2886 if self.at(Kind::RightParen) {
2887 break;
2888 }
2889 let expr = self.parse_starred_item()?;
2890 elements.push(expr);
2891 }
2892 if elements.len() == 1 && !seen_comma {
2893 self.bump(Kind::RightParen);
2894 let expr = elements.pop().unwrap();
2895 if let Expression::Name(name) = expr {
2896 return Ok(Expression::Name(Box::new(Name {
2897 node: name.node,
2898 id: name.id,
2899 parenthesized: true,
2900 })));
2901 } else {
2902 return Ok(expr);
2903 }
2904 }
2905 self.expect(Kind::RightParen)?;
2906 Ok(Expression::Tuple(Box::new(Tuple {
2907 node: self.finish_node(node),
2908 elements,
2909 })))
2910 }
2911
2912 // https://docs.python.org/3/reference/expressions.html#slicings
2913 // Closing will be consumed by this function

Callers 1

Calls 8

NameClass · 0.85
TupleClass · 0.85
atMethod · 0.80
expectMethod · 0.80
parse_starred_itemMethod · 0.80
bumpMethod · 0.80
finish_nodeMethod · 0.80
lenMethod · 0.45

Tested by

no test coverage detected