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

Method parse_fstring_replacement_field

parser/src/parser/parser.rs:3365–3409  ·  view source on GitHub ↗
(&mut self)

Source from the content-addressed store, hash-verified

3363 }
3364
3365 fn parse_fstring_replacement_field(&mut self) -> Result<Expression, ParsingError> {
3366 let node = self.start_node();
3367 self.bump(Kind::LeftBracket);
3368
3369 let expr = if self.at(Kind::Yield) {
3370 self.parse_yield_expression()?
3371 } else {
3372 self.parse_expressions()?
3373 };
3374
3375 let mut conversion = -1;
3376 if self.eat(Kind::Assign) {
3377 conversion = 114;
3378 }
3379 if self.eat(Kind::Exclamation) {
3380 conversion = match self.cur_token.as_str(self.source) {
3381 "s" => 115,
3382 "r" => 114,
3383 "a" => 97,
3384 _ => panic!("should not happen"),
3385 };
3386 self.bump_any();
3387 }
3388 let format_spec_node = self.start_node();
3389 let format_spec = if self.eat(Kind::Colon) {
3390 let mut specs = vec![];
3391 while matches!(self.cur_kind(), Kind::FStringMiddle | Kind::LeftBracket) {
3392 specs.push(self.parse_fstring_middle()?);
3393 }
3394 Some(Expression::JoinedStr(Box::new(JoinedStr {
3395 node: self.finish_node(format_spec_node),
3396 values: specs,
3397 })))
3398 } else {
3399 None
3400 };
3401
3402 self.expect(Kind::RightBracket)?;
3403 Ok(Expression::FormattedValue(Box::new(FormattedValue {
3404 node: self.finish_node(node),
3405 value: expr,
3406 conversion,
3407 format_spec,
3408 })))
3409 }
3410
3411 fn parse_fstring_middle(&mut self) -> Result<Expression, ParsingError> {
3412 let node = self.start_node();

Callers 1

parse_fstring_middleMethod · 0.80

Calls 13

JoinedStrClass · 0.85
FormattedValueClass · 0.85
start_nodeMethod · 0.80
bumpMethod · 0.80
atMethod · 0.80
parse_expressionsMethod · 0.80
eatMethod · 0.80
as_strMethod · 0.80
bump_anyMethod · 0.80
parse_fstring_middleMethod · 0.80
finish_nodeMethod · 0.80

Tested by

no test coverage detected