https://docs.python.org/3/reference/expressions.html#atoms
(&mut self)
| 2440 | |
| 2441 | // https://docs.python.org/3/reference/expressions.html#atoms |
| 2442 | fn parse_atom(&mut self) -> Result<Expression, ParsingError> { |
| 2443 | let node = self.start_node(); |
| 2444 | if self.at(Kind::Yield) { |
| 2445 | self.parse_yield_expression() |
| 2446 | } else if self.at(Kind::LeftBrace) { |
| 2447 | let list_expr = self.parse_list(); |
| 2448 | return list_expr; |
| 2449 | } else if self.at(Kind::LeftBracket) { |
| 2450 | let dict_or_set_expr = self.parse_dict_or_set(); |
| 2451 | return dict_or_set_expr; |
| 2452 | } else if self.at(Kind::LeftParen) { |
| 2453 | let tuple_or_named_expr = self.parse_paren_form_or_generator(); |
| 2454 | return tuple_or_named_expr; |
| 2455 | } else if self.at(Kind::Identifier) { |
| 2456 | return self.parse_identifier(); |
| 2457 | // Try to map to one of atoms like: number, string, ... |
| 2458 | } else { |
| 2459 | // value must be cloned to be assigned to the node |
| 2460 | let atom_is_string = self.cur_kind().is_string(); |
| 2461 | let start = self.start_node(); |
| 2462 | let mut expr = match self.cur_kind() { |
| 2463 | Kind::Match | Kind::Type | Kind::Identifier => { |
| 2464 | let val = self.cur_token.to_string(self.source); |
| 2465 | self.bump_any(); |
| 2466 | Expression::Name(Box::new(Name { |
| 2467 | node: self.finish_node(start), |
| 2468 | id: val, |
| 2469 | parenthesized: false, |
| 2470 | })) |
| 2471 | } |
| 2472 | Kind::Integer => { |
| 2473 | let val = self.cur_token.to_string(self.source); |
| 2474 | self.bump_any(); |
| 2475 | Expression::Constant(Box::new(Constant { |
| 2476 | node: self.finish_node(start), |
| 2477 | value: ConstantValue::Int, |
| 2478 | })) |
| 2479 | } |
| 2480 | Kind::None => { |
| 2481 | self.bump_any(); |
| 2482 | Expression::Constant(Box::new(Constant { |
| 2483 | node: self.finish_node(start), |
| 2484 | value: ConstantValue::None, |
| 2485 | })) |
| 2486 | } |
| 2487 | Kind::True => { |
| 2488 | self.bump_any(); |
| 2489 | Expression::Constant(Box::new(Constant { |
| 2490 | node: self.finish_node(start), |
| 2491 | value: ConstantValue::Bool(true), |
| 2492 | })) |
| 2493 | } |
| 2494 | Kind::False => { |
| 2495 | self.bump_any(); |
| 2496 | Expression::Constant(Box::new(Constant { |
| 2497 | node: self.finish_node(start), |
| 2498 | value: ConstantValue::Bool(false), |
| 2499 | })) |
no test coverage detected