Commit 0e75182
fix: MoLang optimization quick-fix range resolution to prevent malformed rewrites (#497)
MoLang optimization diagnostics were generating correct replacement text
(`math.pi` no longer `math.pi()`), but quick-fix application still used
an incorrect edit range in some cases. This caused partial-token
replacement and corrupted output such as `5*3(math.pi() * 15).pi`.
- **Root cause**
- Optimization code actions relied on `diag.range`, which could point to
an inner/misaligned span instead of the full expression intended for
rewrite.
- **Diagnostic payload now carries source offsets**
-
`packages/bedrock-diagnoser/src/diagnostics/molang/optimizations/registry.ts`
- Added `startOffset` and `endOffset` to optimization diagnostic `data`
when a `replacement` is present.
- Keeps existing replacement behavior while giving code actions an
unambiguous source span.
- **Code action now prefers offset-derived range**
- `ide/base/server/src/lsp/code-action/minecraft/molang/optimization.ts`
- Quick fix computes `editRange` from `startOffset/endOffset` when
available; falls back to `diag.range` for compatibility.
- Ensures rewrite applies to the full expression (`5*3*math.pi`) rather
than a partial segment.
- **Regression coverage**
- Added server-side code-action regression test:
-
`ide/base/server/src/lsp/code-action/minecraft/molang/optimization.test.ts`
- Verifies malformed `diag.range` does not affect replacement when
offsets are present.
- Updated optimization tests to allow expanded diagnostic data shape and
assert offset fields for the `5*3*math.pi` regression path:
-
`packages/bedrock-diagnoser/test/lib/diagnostics/molang/optimizations.test.ts`
```ts
const hasOffsetRange =
typeof startOffset === 'number' &&
typeof endOffset === 'number' &&
endOffset >= startOffset;
const editRange = hasOffsetRange
? {
start: builder.context.document.positionAt(startOffset),
end: builder.context.document.positionAt(endOffset),
}
: diag.range;
```
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: DaanV2 <2393905+DaanV2@users.noreply.github.com>1 parent d2dc29e commit 0e75182
4 files changed
Lines changed: 86 additions & 9 deletions
File tree
- ide/base/server/src/lsp/code-action/minecraft/molang
- packages/bedrock-diagnoser
- src/diagnostics/molang/optimizations
- test/lib/diagnostics/molang
Lines changed: 61 additions & 0 deletions
| 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 | + | |
Lines changed: 11 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| 7 | + | |
| 8 | + | |
7 | 9 | | |
8 | 10 | | |
9 | 11 | | |
| |||
13 | 15 | | |
14 | 16 | | |
15 | 17 | | |
16 | | - | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
17 | 26 | | |
18 | 27 | | |
19 | 28 | | |
| |||
22 | 31 | | |
23 | 32 | | |
24 | 33 | | |
25 | | - | |
| 34 | + | |
26 | 35 | | |
27 | 36 | | |
28 | 37 | | |
| |||
Lines changed: 4 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
72 | 72 | | |
73 | 73 | | |
74 | 74 | | |
75 | | - | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
76 | 79 | | |
77 | 80 | | |
78 | 81 | | |
| |||
Lines changed: 10 additions & 6 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
284 | 284 | | |
285 | 285 | | |
286 | 286 | | |
287 | | - | |
| 287 | + | |
288 | 288 | | |
289 | 289 | | |
290 | 290 | | |
| |||
320 | 320 | | |
321 | 321 | | |
322 | 322 | | |
323 | | - | |
| 323 | + | |
324 | 324 | | |
325 | 325 | | |
326 | 326 | | |
| |||
462 | 462 | | |
463 | 463 | | |
464 | 464 | | |
465 | | - | |
| 465 | + | |
466 | 466 | | |
467 | 467 | | |
468 | 468 | | |
| |||
471 | 471 | | |
472 | 472 | | |
473 | 473 | | |
474 | | - | |
| 474 | + | |
475 | 475 | | |
476 | 476 | | |
477 | 477 | | |
| |||
490 | 490 | | |
491 | 491 | | |
492 | 492 | | |
493 | | - | |
| 493 | + | |
494 | 494 | | |
495 | 495 | | |
496 | 496 | | |
| |||
499 | 499 | | |
500 | 500 | | |
501 | 501 | | |
502 | | - | |
| 502 | + | |
| 503 | + | |
503 | 504 | | |
504 | 505 | | |
505 | 506 | | |
| 507 | + | |
| 508 | + | |
| 509 | + | |
506 | 510 | | |
507 | 511 | | |
508 | 512 | | |
0 commit comments