MCPcopy Create free account
hub / github.com/dprint/jsonc-parser / parse_array

Function parse_array

src/parse_to_ast.rs:399–431  ·  view source on GitHub ↗
(context: &mut Context<'a>)

Source from the content-addressed store, hash-verified

397}
398
399fn parse_array<'a>(context: &mut Context<'a>) -> Result<Array<'a>, ParseError> {
400 debug_assert!(context.token() == Some(Token::OpenBracket));
401 let mut elements = Vec::new();
402
403 context.start_range();
404 context.scan()?;
405
406 loop {
407 match context.token() {
408 Some(Token::CloseBracket) => break,
409 None => return Err(context.create_error_for_current_range(ParseErrorKind::UnterminatedArray)),
410 _ => match parse_value(context)? {
411 Some(value) => elements.push(value),
412 None => return Err(context.create_error_for_current_range(ParseErrorKind::UnterminatedArray)),
413 },
414 }
415
416 // skip the comma
417 if let Some(Token::Comma) = context.scan()? {
418 let comma_range = context.create_range_from_last_token();
419 if let Some(Token::CloseBracket) = context.scan()?
420 && !context.allow_trailing_commas
421 {
422 return Err(context.create_error_for_range(comma_range, ParseErrorKind::TrailingCommasNotAllowed));
423 }
424 }
425 }
426
427 Ok(Array {
428 range: context.end_range(),
429 elements,
430 })
431}
432
433// factory functions
434

Callers 1

parse_valueFunction · 0.70

Calls 8

start_rangeMethod · 0.80
end_rangeMethod · 0.80
parse_valueFunction · 0.70
scanMethod · 0.45
tokenMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…