Commit 7f7f9c5
authored
fix: handle negative indices, overlapping ranges, and moved content in MagicString remove (#8829)
## Summary
- Rewrote MagicString::remove to iterate by original position
(chunk_by_start) instead of linked-list order, fixing incorrect behavior
with moved content
- Added support for negative indices in remove() by accepting i64 and
using normalize_index (matching reset/slice pattern)
- Fixed overlapping range removal — previously errored, now correctly
handles partially/fully overlapping removes
- Zero-length removals (e.g., remove(0, 0) or remove(9, -3) where
indices resolve to the same position) are now treated as no-ops
## Test plan
- Unskipped 8 previously-skipped tests in MagicString.test.ts:
- should treat zero-length removals as a no-op
- should remove overlapping ranges
- should remove overlapping ranges, redux
- should remove modified ranges
- should remove interior inserts
- removes across moved content
- should accept negative indices
- should throw error when using negative indices with empty string
- Updated offset underflow test expectation to match new error message
🤖 Generated with [Claude Code](https://claude.com/claude-code)1 parent 050cd43 commit 7f7f9c5
File tree
4 files changed
+54
-24
lines changed- crates
- rolldown_binding/src/types
- string_wizard/src/magic_string
- packages/rolldown/tests/magic-string
4 files changed
+54
-24
lines changedLines changed: 19 additions & 5 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
744 | 744 | | |
745 | 745 | | |
746 | 746 | | |
747 | | - | |
| 747 | + | |
| 748 | + | |
| 749 | + | |
| 750 | + | |
| 751 | + | |
| 752 | + | |
| 753 | + | |
| 754 | + | |
| 755 | + | |
| 756 | + | |
| 757 | + | |
| 758 | + | |
748 | 759 | | |
749 | 760 | | |
750 | | - | |
751 | | - | |
| 761 | + | |
| 762 | + | |
| 763 | + | |
| 764 | + | |
752 | 765 | | |
753 | 766 | | |
754 | | - | |
755 | | - | |
| 767 | + | |
| 768 | + | |
| 769 | + | |
756 | 770 | | |
757 | 771 | | |
758 | 772 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | | - | |
2 | | - | |
3 | | - | |
| 1 | + | |
4 | 2 | | |
5 | 3 | | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
6 | 8 | | |
7 | | - | |
8 | | - | |
9 | | - | |
10 | | - | |
11 | | - | |
12 | | - | |
13 | | - | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
14 | 30 | | |
15 | 31 | | |
16 | 32 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1261 | 1261 | | |
1262 | 1262 | | |
1263 | 1263 | | |
1264 | | - | |
| 1264 | + | |
1265 | 1265 | | |
1266 | 1266 | | |
1267 | 1267 | | |
1268 | 1268 | | |
1269 | 1269 | | |
1270 | 1270 | | |
1271 | | - | |
| 1271 | + | |
1272 | 1272 | | |
1273 | 1273 | | |
1274 | 1274 | | |
| |||
1280 | 1280 | | |
1281 | 1281 | | |
1282 | 1282 | | |
1283 | | - | |
| 1283 | + | |
1284 | 1284 | | |
1285 | 1285 | | |
1286 | 1286 | | |
1287 | 1287 | | |
1288 | 1288 | | |
1289 | 1289 | | |
1290 | 1290 | | |
1291 | | - | |
| 1291 | + | |
1292 | 1292 | | |
1293 | 1293 | | |
1294 | 1294 | | |
| |||
1306 | 1306 | | |
1307 | 1307 | | |
1308 | 1308 | | |
1309 | | - | |
| 1309 | + | |
1310 | 1310 | | |
1311 | 1311 | | |
1312 | 1312 | | |
| |||
1330 | 1330 | | |
1331 | 1331 | | |
1332 | 1332 | | |
1333 | | - | |
| 1333 | + | |
1334 | 1334 | | |
1335 | 1335 | | |
1336 | 1336 | | |
| |||
1339 | 1339 | | |
1340 | 1340 | | |
1341 | 1341 | | |
1342 | | - | |
| 1342 | + | |
1343 | 1343 | | |
1344 | 1344 | | |
1345 | 1345 | | |
1346 | 1346 | | |
1347 | 1347 | | |
1348 | 1348 | | |
1349 | 1349 | | |
1350 | | - | |
| 1350 | + | |
1351 | 1351 | | |
1352 | 1352 | | |
1353 | 1353 | | |
| |||
Lines changed: 1 addition & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
11 | 11 | | |
12 | 12 | | |
13 | 13 | | |
14 | | - | |
| 14 | + | |
15 | 15 | | |
16 | 16 | | |
17 | 17 | | |
| |||
0 commit comments