Commit 40de798
committed
feat(rust-cli): wire IFS word splitting into for-loops and read builtin
Two key POSIX §2.6.5 integration points for $IFS word splitting:
1. **for-loop word list** — `for x in $var; do ... done` now expands
each word in the `in` clause, then applies `ifs_split` using the
current `$IFS` (defaulting to space/tab/newline). This means
`ITEMS="a b c"; for x in $ITEMS; do mkdir $x; done` creates three
directories instead of one named "a b c".
2. **read builtin** — `read a b c` now splits stdin input by `$IFS`
and assigns fields to named variables. The last variable receives
the remainder (POSIX behaviour). The parser now collects multiple
variable names instead of just one. `read` with no args still
defaults to `$REPLY`.
The existing `ifs_split()` function in posix_builtins.rs (which had
full POSIX semantics — whitespace/non-whitespace IFS handling, empty
IFS preventing splitting, leading/trailing delimiter handling) was
already tested but not wired into any execution path. Now it is.
Tests: 8 new tests covering default IFS, custom IFS (comma-separated),
empty IFS, newline splitting, literal word lists, and multi-variable
read parsing.
Test results: 729 passing, 0 failing, 14 ignored (up from 721).
https://claude.ai/code/session_01EMHrh5Jq32pb98KXoSKLA41 parent 7695b83 commit 40de798
3 files changed
Lines changed: 210 additions & 17 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
674 | 674 | | |
675 | 675 | | |
676 | 676 | | |
677 | | - | |
678 | | - | |
679 | | - | |
| 677 | + | |
680 | 678 | | |
681 | 679 | | |
682 | 680 | | |
| |||
691 | 689 | | |
692 | 690 | | |
693 | 691 | | |
694 | | - | |
| 692 | + | |
| 693 | + | |
| 694 | + | |
| 695 | + | |
| 696 | + | |
| 697 | + | |
| 698 | + | |
| 699 | + | |
| 700 | + | |
| 701 | + | |
| 702 | + | |
| 703 | + | |
| 704 | + | |
| 705 | + | |
| 706 | + | |
| 707 | + | |
| 708 | + | |
| 709 | + | |
| 710 | + | |
| 711 | + | |
| 712 | + | |
| 713 | + | |
| 714 | + | |
| 715 | + | |
| 716 | + | |
| 717 | + | |
| 718 | + | |
| 719 | + | |
| 720 | + | |
| 721 | + | |
| 722 | + | |
| 723 | + | |
| 724 | + | |
| 725 | + | |
| 726 | + | |
695 | 727 | | |
696 | 728 | | |
697 | 729 | | |
| |||
891 | 923 | | |
892 | 924 | | |
893 | 925 | | |
894 | | - | |
895 | | - | |
896 | | - | |
| 926 | + | |
| 927 | + | |
| 928 | + | |
| 929 | + | |
| 930 | + | |
| 931 | + | |
| 932 | + | |
| 933 | + | |
| 934 | + | |
| 935 | + | |
| 936 | + | |
| 937 | + | |
| 938 | + | |
| 939 | + | |
| 940 | + | |
| 941 | + | |
897 | 942 | | |
898 | | - | |
| 943 | + | |
899 | 944 | | |
900 | 945 | | |
901 | 946 | | |
| |||
1282 | 1327 | | |
1283 | 1328 | | |
1284 | 1329 | | |
1285 | | - | |
| 1330 | + | |
1286 | 1331 | | |
1287 | 1332 | | |
1288 | 1333 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
294 | 294 | | |
295 | 295 | | |
296 | 296 | | |
297 | | - | |
| 297 | + | |
298 | 298 | | |
299 | | - | |
| 299 | + | |
300 | 300 | | |
301 | 301 | | |
302 | 302 | | |
| |||
3446 | 3446 | | |
3447 | 3447 | | |
3448 | 3448 | | |
3449 | | - | |
3450 | | - | |
| 3449 | + | |
| 3450 | + | |
3451 | 3451 | | |
3452 | 3452 | | |
3453 | 3453 | | |
3454 | 3454 | | |
3455 | 3455 | | |
3456 | 3456 | | |
3457 | 3457 | | |
3458 | | - | |
| 3458 | + | |
3459 | 3459 | | |
3460 | 3460 | | |
3461 | 3461 | | |
3462 | | - | |
3463 | | - | |
| 3462 | + | |
| 3463 | + | |
3464 | 3464 | | |
3465 | | - | |
| 3465 | + | |
3466 | 3466 | | |
3467 | 3467 | | |
3468 | 3468 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
0 commit comments