Commit bcfc0fd
committed
fix(parser): handle heredoc pipe ordering and edge cases
- Lexer saves rest-of-line after heredoc delimiter and re-injects it via
a VecDeque buffer, so `cat <<EOF | sort` correctly pipes heredoc content
- Pipe continuation (`cat <<EOF |\nsort`) also works via the same mechanism
- Quote-aware rest-of-line scanning handles `cat <<EOF; echo "two\nthree"`
where double-quoted strings span physical lines
- read_continuation_into concatenates adjacent quoted/unquoted segments
after single-quoted strings, enabling partial-quote delimiters like
`<<'EOF'"2"` -> delimiter `EOF2`
- Multiple heredocs on one line work naturally via repeated rest-of-line
save/reinject (e.g., `while cat <<E1 && cat <<E2; do ... done`)
- While/until condition stdout is now captured and emitted, fixing
`while cat <<EOF; do ... done` producing no condition output
Enables all 6 previously-skipped heredoc-edge spec tests.
Closes #3591 parent 72768ec commit bcfc0fd
File tree
4 files changed
+162
-13
lines changed- crates/bashkit
- src
- interpreter
- parser
- tests/spec_cases/bash
4 files changed
+162
-13
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1420 | 1420 | | |
1421 | 1421 | | |
1422 | 1422 | | |
| 1423 | + | |
1423 | 1424 | | |
1424 | 1425 | | |
1425 | 1426 | | |
| 1427 | + | |
| 1428 | + | |
| 1429 | + | |
| 1430 | + | |
| 1431 | + | |
| 1432 | + | |
| 1433 | + | |
| 1434 | + | |
1426 | 1435 | | |
1427 | 1436 | | |
1428 | 1437 | | |
| |||
1505 | 1514 | | |
1506 | 1515 | | |
1507 | 1516 | | |
| 1517 | + | |
1508 | 1518 | | |
1509 | 1519 | | |
1510 | 1520 | | |
| 1521 | + | |
| 1522 | + | |
| 1523 | + | |
| 1524 | + | |
| 1525 | + | |
| 1526 | + | |
| 1527 | + | |
| 1528 | + | |
1511 | 1529 | | |
1512 | 1530 | | |
1513 | 1531 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
| 5 | + | |
| 6 | + | |
5 | 7 | | |
6 | 8 | | |
7 | 9 | | |
| |||
19 | 21 | | |
20 | 22 | | |
21 | 23 | | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
22 | 27 | | |
23 | 28 | | |
24 | 29 | | |
| |||
28 | 33 | | |
29 | 34 | | |
30 | 35 | | |
| 36 | + | |
31 | 37 | | |
32 | 38 | | |
33 | 39 | | |
| |||
43 | 49 | | |
44 | 50 | | |
45 | 51 | | |
46 | | - | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
47 | 57 | | |
48 | 58 | | |
49 | 59 | | |
50 | | - | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
51 | 65 | | |
52 | 66 | | |
53 | 67 | | |
| |||
704 | 718 | | |
705 | 719 | | |
706 | 720 | | |
| 721 | + | |
| 722 | + | |
| 723 | + | |
| 724 | + | |
707 | 725 | | |
708 | 726 | | |
709 | 727 | | |
710 | 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 | + | |
| 769 | + | |
| 770 | + | |
| 771 | + | |
| 772 | + | |
| 773 | + | |
| 774 | + | |
| 775 | + | |
| 776 | + | |
| 777 | + | |
| 778 | + | |
| 779 | + | |
| 780 | + | |
| 781 | + | |
711 | 782 | | |
712 | 783 | | |
713 | 784 | | |
| |||
1208 | 1279 | | |
1209 | 1280 | | |
1210 | 1281 | | |
1211 | | - | |
| 1282 | + | |
| 1283 | + | |
| 1284 | + | |
| 1285 | + | |
| 1286 | + | |
| 1287 | + | |
| 1288 | + | |
| 1289 | + | |
| 1290 | + | |
1212 | 1291 | | |
1213 | 1292 | | |
1214 | | - | |
| 1293 | + | |
1215 | 1294 | | |
1216 | 1295 | | |
| 1296 | + | |
| 1297 | + | |
| 1298 | + | |
| 1299 | + | |
| 1300 | + | |
| 1301 | + | |
| 1302 | + | |
| 1303 | + | |
| 1304 | + | |
| 1305 | + | |
| 1306 | + | |
| 1307 | + | |
| 1308 | + | |
| 1309 | + | |
1217 | 1310 | | |
1218 | 1311 | | |
1219 | 1312 | | |
| |||
1246 | 1339 | | |
1247 | 1340 | | |
1248 | 1341 | | |
| 1342 | + | |
| 1343 | + | |
| 1344 | + | |
| 1345 | + | |
| 1346 | + | |
| 1347 | + | |
| 1348 | + | |
| 1349 | + | |
| 1350 | + | |
1249 | 1351 | | |
1250 | 1352 | | |
1251 | 1353 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
466 | 466 | | |
467 | 467 | | |
468 | 468 | | |
469 | | - | |
| 469 | + | |
| 470 | + | |
| 471 | + | |
470 | 472 | | |
471 | 473 | | |
472 | 474 | | |
| |||
1810 | 1812 | | |
1811 | 1813 | | |
1812 | 1814 | | |
1813 | | - | |
1814 | | - | |
| 1815 | + | |
| 1816 | + | |
| 1817 | + | |
| 1818 | + | |
1815 | 1819 | | |
1816 | 1820 | | |
1817 | 1821 | | |
| |||
2740 | 2744 | | |
2741 | 2745 | | |
2742 | 2746 | | |
| 2747 | + | |
| 2748 | + | |
| 2749 | + | |
| 2750 | + | |
| 2751 | + | |
| 2752 | + | |
| 2753 | + | |
| 2754 | + | |
| 2755 | + | |
| 2756 | + | |
| 2757 | + | |
| 2758 | + | |
| 2759 | + | |
| 2760 | + | |
| 2761 | + | |
| 2762 | + | |
| 2763 | + | |
| 2764 | + | |
| 2765 | + | |
| 2766 | + | |
| 2767 | + | |
| 2768 | + | |
| 2769 | + | |
| 2770 | + | |
| 2771 | + | |
| 2772 | + | |
| 2773 | + | |
| 2774 | + | |
| 2775 | + | |
| 2776 | + | |
| 2777 | + | |
2743 | 2778 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
28 | 28 | | |
29 | 29 | | |
30 | 30 | | |
31 | | - | |
32 | 31 | | |
33 | 32 | | |
34 | 33 | | |
| |||
40 | 39 | | |
41 | 40 | | |
42 | 41 | | |
43 | | - | |
44 | 42 | | |
45 | 43 | | |
46 | 44 | | |
| |||
54 | 52 | | |
55 | 53 | | |
56 | 54 | | |
57 | | - | |
58 | 55 | | |
59 | 56 | | |
60 | 57 | | |
| |||
94 | 91 | | |
95 | 92 | | |
96 | 93 | | |
97 | | - | |
98 | 94 | | |
99 | 95 | | |
100 | 96 | | |
| |||
110 | 106 | | |
111 | 107 | | |
112 | 108 | | |
113 | | - | |
114 | 109 | | |
115 | 110 | | |
116 | 111 | | |
| |||
130 | 125 | | |
131 | 126 | | |
132 | 127 | | |
133 | | - | |
134 | 128 | | |
135 | 129 | | |
136 | 130 | | |
| |||
0 commit comments