| 420 | |
| 421 | #[test] |
| 422 | fn nested_arrays() { |
| 423 | bind_context!(let context = "[[1, 2], [3, 4]]"); |
| 424 | bind_state!(let mut state from context); |
| 425 | |
| 426 | let token = state |
| 427 | .advance(SyntaxKind::LBracket) |
| 428 | .expect("should have at least one token"); |
| 429 | assert_eq!(token.kind.syntax(), SyntaxKind::LBracket); |
| 430 | |
| 431 | let mut outer_items = Vec::new(); |
| 432 | let result: Result<_, ArrayDiagnostic> = visit_array(&mut state, token, |state| { |
| 433 | let token = state |
| 434 | .advance(SyntaxKindSet::COMPLETE) |
| 435 | .expect("should have at least one token"); |
| 436 | outer_items.push(token.kind.syntax()); |
| 437 | |
| 438 | if token.kind.syntax() == SyntaxKind::LBracket { |
| 439 | let mut inner_items = Vec::new(); |
| 440 | let inner_result: Result<_, ArrayDiagnostic> = visit_array(state, token, |state| { |
| 441 | let token = state |
| 442 | .advance(SyntaxKindSet::COMPLETE) |
| 443 | .expect("should have at least one token"); |
| 444 | inner_items.push(token.kind.syntax()); |
| 445 | Ok(()) |
| 446 | }); |
| 447 | |
| 448 | inner_result.expect("should be able to parse nested array"); |
| 449 | assert!(!inner_items.is_empty(), "Nested array should have items"); |
| 450 | } |
| 451 | |
| 452 | Ok(()) |
| 453 | }); |
| 454 | |
| 455 | let range = result.expect("should be able to parse nested arrays"); |
| 456 | assert_eq!(range.start(), TextSize::new(0)); |
| 457 | assert_eq!(range.end(), TextSize::new(16)); |
| 458 | assert_eq!(outer_items, [SyntaxKind::LBracket, SyntaxKind::LBracket]); |
| 459 | } |
| 460 | |
| 461 | #[expect(clippy::panic_in_result_fn)] |
| 462 | fn process_nested_array( |