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

Method parse_atom

parser/src/parser/parser.rs:2442–2800  ·  view source on GitHub ↗

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

(&mut self)

Source from the content-addressed store, hash-verified

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 }))

Callers 2

parse_targetMethod · 0.80
parse_primaryMethod · 0.80

Calls 15

NameClass · 0.85
ConstantClass · 0.85
extract_string_insideFunction · 0.85
JoinedStrClass · 0.85
concat_string_exprsFunction · 0.85
start_nodeMethod · 0.80
atMethod · 0.80
parse_listMethod · 0.80
parse_dict_or_setMethod · 0.80
parse_identifierMethod · 0.80

Tested by

no test coverage detected