Commit d32a7b2
authored
feat: dictionary iteration and computed key access (#3)
* feat(ast): add LoopKey to TemplateContext for dictionary iteration
* feat(ast): add @key loop variable to ExpressionEvaluator
* feat(ast): add ObjectValue iteration to TemplateExpander
* feat(ast): add ObjectValue iteration to inline {{#each}} blocks
* feat(ast): trim keys in SetLoopKey to ensure clean @key values
* feat(ast): trim keys in ObjectValue for consistent key handling
* feat(ast): add computed key access [expr] to expression system
Add IndexAccessExpression AST node, Pratt parser postfix operator for
bracket notation, and evaluator support for dynamic key/index access
on ObjectValue and ArrayValue.
* test: add end-to-end integration tests for dictionary iteration with computed key access
Add scope walking to ExpressionEvaluator.Resolve so variables from
parent scopes (e.g. root data) are accessible inside each loops.
This enables patterns like {{values[@key]}} where @key comes from
the loop and values lives at root level.
* docs: fix inverted XML doc comment on TemplateContext.Scopes
* docs: add dictionary iteration and computed key access to wiki1 parent 109e5fa commit d32a7b2
16 files changed
Lines changed: 1025 additions & 39 deletions
File tree
- docs/wiki
- src/FlexRender.Core
- TemplateEngine
- Values
- tests/FlexRender.Tests
- Expressions
- TemplateEngine
- Values
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
26 | 26 | | |
27 | 27 | | |
28 | 28 | | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
29 | 49 | | |
30 | 50 | | |
31 | 51 | | |
| |||
243 | 263 | | |
244 | 264 | | |
245 | 265 | | |
246 | | - | |
| 266 | + | |
| 267 | + | |
247 | 268 | | |
248 | 269 | | |
249 | 270 | | |
| |||
364 | 385 | | |
365 | 386 | | |
366 | 387 | | |
367 | | - | |
| 388 | + | |
368 | 389 | | |
369 | 390 | | |
370 | 391 | | |
371 | 392 | | |
372 | 393 | | |
373 | 394 | | |
| 395 | + | |
374 | 396 | | |
375 | 397 | | |
376 | 398 | | |
| |||
379 | 401 | | |
380 | 402 | | |
381 | 403 | | |
| 404 | + | |
| 405 | + | |
| 406 | + | |
| 407 | + | |
| 408 | + | |
| 409 | + | |
| 410 | + | |
| 411 | + | |
| 412 | + | |
| 413 | + | |
| 414 | + | |
| 415 | + | |
| 416 | + | |
| 417 | + | |
382 | 418 | | |
383 | 419 | | |
384 | 420 | | |
| |||
443 | 479 | | |
444 | 480 | | |
445 | 481 | | |
446 | | - | |
| 482 | + | |
447 | 483 | | |
448 | 484 | | |
449 | 485 | | |
| |||
458 | 494 | | |
459 | 495 | | |
460 | 496 | | |
461 | | - | |
| 497 | + | |
462 | 498 | | |
463 | 499 | | |
464 | 500 | | |
| |||
471 | 507 | | |
472 | 508 | | |
473 | 509 | | |
| 510 | + | |
474 | 511 | | |
475 | 512 | | |
476 | 513 | | |
| |||
534 | 571 | | |
535 | 572 | | |
536 | 573 | | |
| 574 | + | |
| 575 | + | |
| 576 | + | |
| 577 | + | |
| 578 | + | |
| 579 | + | |
| 580 | + | |
| 581 | + | |
| 582 | + | |
| 583 | + | |
| 584 | + | |
| 585 | + | |
| 586 | + | |
| 587 | + | |
| 588 | + | |
| 589 | + | |
| 590 | + | |
| 591 | + | |
| 592 | + | |
| 593 | + | |
| 594 | + | |
| 595 | + | |
| 596 | + | |
| 597 | + | |
| 598 | + | |
| 599 | + | |
| 600 | + | |
| 601 | + | |
| 602 | + | |
| 603 | + | |
| 604 | + | |
| 605 | + | |
| 606 | + | |
| 607 | + | |
| 608 | + | |
| 609 | + | |
| 610 | + | |
| 611 | + | |
| 612 | + | |
| 613 | + | |
| 614 | + | |
| 615 | + | |
| 616 | + | |
| 617 | + | |
| 618 | + | |
537 | 619 | | |
538 | 620 | | |
539 | 621 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
56 | 56 | | |
57 | 57 | | |
58 | 58 | | |
59 | | - | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
60 | 71 | | |
61 | 72 | | |
62 | 73 | | |
| |||
68 | 79 | | |
69 | 80 | | |
70 | 81 | | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
71 | 85 | | |
72 | 86 | | |
73 | 87 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
152 | 152 | | |
153 | 153 | | |
154 | 154 | | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
Lines changed: 25 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
88 | 88 | | |
89 | 89 | | |
90 | 90 | | |
| 91 | + | |
91 | 92 | | |
92 | 93 | | |
93 | 94 | | |
| |||
243 | 244 | | |
244 | 245 | | |
245 | 246 | | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
| 251 | + | |
| 252 | + | |
| 253 | + | |
| 254 | + | |
| 255 | + | |
| 256 | + | |
| 257 | + | |
| 258 | + | |
| 259 | + | |
| 260 | + | |
| 261 | + | |
| 262 | + | |
| 263 | + | |
| 264 | + | |
| 265 | + | |
| 266 | + | |
| 267 | + | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
246 | 271 | | |
247 | 272 | | |
248 | 273 | | |
| |||
Lines changed: 69 additions & 3 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
7 | 7 | | |
8 | 8 | | |
9 | 9 | | |
10 | | - | |
| 10 | + | |
| 11 | + | |
11 | 12 | | |
12 | 13 | | |
13 | 14 | | |
| |||
20 | 21 | | |
21 | 22 | | |
22 | 23 | | |
| 24 | + | |
23 | 25 | | |
24 | 26 | | |
25 | 27 | | |
| |||
94 | 96 | | |
95 | 97 | | |
96 | 98 | | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
97 | 110 | | |
98 | 111 | | |
99 | 112 | | |
| |||
326 | 339 | | |
327 | 340 | | |
328 | 341 | | |
| 342 | + | |
| 343 | + | |
329 | 344 | | |
330 | 345 | | |
331 | 346 | | |
| |||
641 | 656 | | |
642 | 657 | | |
643 | 658 | | |
644 | | - | |
| 659 | + | |
645 | 660 | | |
646 | 661 | | |
647 | 662 | | |
| |||
697 | 712 | | |
698 | 713 | | |
699 | 714 | | |
| 715 | + | |
| 716 | + | |
700 | 717 | | |
701 | 718 | | |
702 | 719 | | |
703 | 720 | | |
| 721 | + | |
| 722 | + | |
| 723 | + | |
| 724 | + | |
| 725 | + | |
| 726 | + | |
| 727 | + | |
| 728 | + | |
| 729 | + | |
| 730 | + | |
| 731 | + | |
| 732 | + | |
| 733 | + | |
| 734 | + | |
| 735 | + | |
| 736 | + | |
| 737 | + | |
| 738 | + | |
| 739 | + | |
| 740 | + | |
| 741 | + | |
| 742 | + | |
| 743 | + | |
| 744 | + | |
| 745 | + | |
| 746 | + | |
| 747 | + | |
| 748 | + | |
| 749 | + | |
| 750 | + | |
| 751 | + | |
| 752 | + | |
| 753 | + | |
| 754 | + | |
| 755 | + | |
| 756 | + | |
| 757 | + | |
| 758 | + | |
| 759 | + | |
| 760 | + | |
| 761 | + | |
| 762 | + | |
| 763 | + | |
| 764 | + | |
| 765 | + | |
| 766 | + | |
| 767 | + | |
| 768 | + | |
704 | 769 | | |
705 | 770 | | |
706 | 771 | | |
| |||
724 | 789 | | |
725 | 790 | | |
726 | 791 | | |
727 | | - | |
| 792 | + | |
| 793 | + | |
728 | 794 | | |
729 | 795 | | |
0 commit comments