https://docs.python.org/3/reference/expressions.html#grammar-token-python-grammar-argument_list returns args, keywords
(&mut self)
| 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, |
no test coverage detected