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

Method parse_argument_list

parser/src/parser/parser.rs:2359–2403  ·  view source on GitHub ↗

https://docs.python.org/3/reference/expressions.html#grammar-token-python-grammar-argument_list returns args, keywords

(&mut self)

Source from the content-addressed store, hash-verified

2357 // https://docs.python.org/3/reference/expressions.html#grammar-token-python-grammar-argument_list
2358 // returns args, keywords
2359 fn parse_argument_list(&mut self) -> Result<(Vec<Expression>, Vec<Keyword>), ParsingError> {
2360 let mut seen_keyword = false;
2361 let mut positional_args = vec![];
2362 let mut keyword_args = vec![];
2363 loop {
2364 let node = self.start_node();
2365 if self.at(Kind::RightParen) {
2366 break;
2367 }
2368 if self.at(Kind::Identifier) && matches!(self.peek_kind(), Ok(Kind::Assign)) {
2369 seen_keyword = true;
2370 let keyword_arg = self.parse_keyword_item()?;
2371 keyword_args.push(keyword_arg);
2372 } else if self.at(Kind::Mul) {
2373 let star_arg_node = self.start_node();
2374 self.bump(Kind::Mul);
2375 let star_arg = Expression::Starred(Box::new(Starred {
2376 node: self.finish_node(star_arg_node),
2377 value: self.parse_expression()?,
2378 }));
2379 positional_args.push(star_arg);
2380 } else if self.at(Kind::Pow) {
2381 let kwarg_node = self.start_node();
2382 self.bump(Kind::Pow);
2383 seen_keyword = true;
2384 let kwarg = Keyword {
2385 node: self.finish_node(kwarg_node),
2386 arg: None,
2387 value: self.parse_expression()?,
2388 };
2389 keyword_args.push(kwarg);
2390 } else {
2391 if seen_keyword {
2392 let node_end = self.finish_node(node);
2393 panic!("Positional arguments cannot come after keyword arguments.");
2394 }
2395 let arg = self.parse_named_expression()?;
2396 positional_args.push(arg);
2397 }
2398 if !self.eat(Kind::Comma) {
2399 break;
2400 }
2401 }
2402 Ok((positional_args, keyword_args))
2403 }
2404
2405 fn parse_attribute_ref(
2406 &mut self,

Callers 1

Calls 9

StarredClass · 0.85
start_nodeMethod · 0.80
atMethod · 0.80
parse_keyword_itemMethod · 0.80
bumpMethod · 0.80
finish_nodeMethod · 0.80
parse_expressionMethod · 0.80
eatMethod · 0.80

Tested by

no test coverage detected