redscript-mc 2.6.2 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/ci.yml +11 -0
- package/CHANGELOG.md +18 -9
- package/README-benchmarks.md +48 -0
- package/README-vscode-test.md +251 -0
- package/RELEASE_NOTES.md +74 -0
- package/ROADMAP.md +131 -167
- package/benchmarks/_shared.ts +468 -0
- package/benchmarks/baseline.json +2816 -0
- package/benchmarks/baseline.md +13 -0
- package/benchmarks/compiler-perf.report.json +207 -0
- package/benchmarks/compiler-perf.ts +76 -0
- package/benchmarks/results.md +13 -0
- package/benchmarks/stdlib-complexity.report.json +2606 -0
- package/benchmarks/stdlib-complexity.ts +54 -0
- package/benchmarks/stdlib-size.md +57 -0
- package/benchmarks/stdlib-size.ts +91 -0
- package/coverage-report.md +177 -0
- package/dist/src/__tests__/budget.test.js +4 -0
- package/dist/src/__tests__/cache/cache-behavior.test.d.ts +10 -0
- package/dist/src/__tests__/cache/cache-behavior.test.js +425 -0
- package/dist/src/__tests__/cache-extra.test.d.ts +5 -0
- package/dist/src/__tests__/cache-extra.test.js +211 -0
- package/dist/src/__tests__/cli-init.test.d.ts +1 -0
- package/dist/src/__tests__/cli-init.test.js +97 -0
- package/dist/src/__tests__/cli-publish.test.d.ts +9 -0
- package/dist/src/__tests__/cli-publish.test.js +189 -0
- package/dist/src/__tests__/cli.test.js +76 -0
- package/dist/src/__tests__/compile-preprocess.test.d.ts +11 -0
- package/dist/src/__tests__/compile-preprocess.test.js +328 -0
- package/dist/src/__tests__/compiler/break-stmt.test.d.ts +1 -0
- package/dist/src/__tests__/compiler/break-stmt.test.js +58 -0
- package/dist/src/__tests__/compiler/const-decl.test.d.ts +1 -0
- package/dist/src/__tests__/compiler/const-decl.test.js +123 -0
- package/dist/src/__tests__/compiler/continue-stmt.test.d.ts +1 -0
- package/dist/src/__tests__/compiler/continue-stmt.test.js +67 -0
- package/dist/src/__tests__/compiler/coroutine-extended.test.d.ts +17 -0
- package/dist/src/__tests__/compiler/coroutine-extended.test.js +565 -0
- package/dist/src/__tests__/compiler/deprecated.test.d.ts +4 -0
- package/dist/src/__tests__/compiler/deprecated.test.js +285 -0
- package/dist/src/__tests__/compiler/do-while.test.d.ts +1 -0
- package/dist/src/__tests__/compiler/do-while.test.js +120 -0
- package/dist/src/__tests__/compiler/enum-payload.test.d.ts +9 -0
- package/dist/src/__tests__/compiler/enum-payload.test.js +272 -0
- package/dist/src/__tests__/compiler/interface.test.d.ts +10 -0
- package/dist/src/__tests__/compiler/interface.test.js +258 -0
- package/dist/src/__tests__/compiler/labeled-loops.test.d.ts +1 -0
- package/dist/src/__tests__/compiler/labeled-loops.test.js +263 -0
- package/dist/src/__tests__/compiler/match-string.test.d.ts +1 -0
- package/dist/src/__tests__/compiler/match-string.test.js +43 -0
- package/dist/src/__tests__/compiler/memoize.test.d.ts +1 -0
- package/dist/src/__tests__/compiler/memoize.test.js +113 -0
- package/dist/src/__tests__/compiler/method-chain.test.d.ts +5 -0
- package/dist/src/__tests__/compiler/method-chain.test.js +115 -0
- package/dist/src/__tests__/compiler/module-import.test.d.ts +12 -0
- package/dist/src/__tests__/compiler/module-import.test.js +261 -0
- package/dist/src/__tests__/compiler/option-extensions.test.d.ts +6 -0
- package/dist/src/__tests__/compiler/option-extensions.test.js +191 -0
- package/dist/src/__tests__/compiler/profile-decorator.test.d.ts +1 -0
- package/dist/src/__tests__/compiler/profile-decorator.test.js +69 -0
- package/dist/src/__tests__/compiler/string-advanced.test.d.ts +7 -0
- package/dist/src/__tests__/compiler/string-advanced.test.js +281 -0
- package/dist/src/__tests__/compiler/struct-extends.test.d.ts +1 -0
- package/dist/src/__tests__/compiler/struct-extends.test.js +95 -0
- package/dist/src/__tests__/compiler/throttle-retry.test.d.ts +1 -0
- package/dist/src/__tests__/compiler/throttle-retry.test.js +166 -0
- package/dist/src/__tests__/compiler/tuple-type.test.d.ts +10 -0
- package/dist/src/__tests__/compiler/tuple-type.test.js +229 -0
- package/dist/src/__tests__/compiler/watch-decorator.test.d.ts +1 -0
- package/dist/src/__tests__/compiler/watch-decorator.test.js +65 -0
- package/dist/src/__tests__/config/project-config.test.d.ts +1 -0
- package/dist/src/__tests__/config/project-config.test.js +199 -0
- package/dist/src/__tests__/config-decorator.test.d.ts +8 -0
- package/dist/src/__tests__/config-decorator.test.js +142 -0
- package/dist/src/__tests__/diagnostics-extra.test.d.ts +6 -0
- package/dist/src/__tests__/diagnostics-extra.test.js +132 -0
- package/dist/src/__tests__/emit/compile-branches.test.d.ts +1 -0
- package/dist/src/__tests__/emit/compile-branches.test.js +123 -0
- package/dist/src/__tests__/emit/compile-coverage.test.d.ts +25 -0
- package/dist/src/__tests__/emit/compile-coverage.test.js +617 -0
- package/dist/src/__tests__/emit/compile-extra-branches.test.d.ts +12 -0
- package/dist/src/__tests__/emit/compile-extra-branches.test.js +225 -0
- package/dist/src/__tests__/emit/compile-mocked-branches.test.d.ts +0 -0
- package/dist/src/__tests__/emit/compile-mocked-branches.test.js +238 -0
- package/dist/src/__tests__/emit/execute-chain.test.d.ts +10 -0
- package/dist/src/__tests__/emit/execute-chain.test.js +94 -0
- package/dist/src/__tests__/emit/index.test.js +2 -1
- package/dist/src/__tests__/emit/modules-branches.test.d.ts +1 -0
- package/dist/src/__tests__/emit/modules-branches.test.js +88 -0
- package/dist/src/__tests__/emit/modules-coverage.test.d.ts +15 -0
- package/dist/src/__tests__/emit/modules-coverage.test.js +221 -0
- package/dist/src/__tests__/emit/modules-errors.test.d.ts +12 -0
- package/dist/src/__tests__/emit/modules-errors.test.js +169 -0
- package/dist/src/__tests__/emit/modules-rewrite.test.d.ts +17 -0
- package/dist/src/__tests__/emit/modules-rewrite.test.js +204 -0
- package/dist/src/__tests__/emit/source-map.test.d.ts +1 -0
- package/dist/src/__tests__/emit/source-map.test.js +167 -0
- package/dist/src/__tests__/enum.test.js +9 -4
- package/dist/src/__tests__/error-recovery.test.d.ts +7 -0
- package/dist/src/__tests__/error-recovery.test.js +217 -0
- package/dist/src/__tests__/events-types-extra.test.d.ts +10 -0
- package/dist/src/__tests__/events-types-extra.test.js +91 -0
- package/dist/src/__tests__/events-types.test.d.ts +4 -0
- package/dist/src/__tests__/events-types.test.js +56 -0
- package/dist/src/__tests__/formatter.test.js +13 -5
- package/dist/src/__tests__/hir/lower-extra.test.d.ts +9 -0
- package/dist/src/__tests__/hir/lower-extra.test.js +140 -0
- package/dist/src/__tests__/hir/monomorphize-extra.test.d.ts +15 -0
- package/dist/src/__tests__/hir/monomorphize-extra.test.js +200 -0
- package/dist/src/__tests__/hir/monomorphize-extra2.test.d.ts +16 -0
- package/dist/src/__tests__/hir/monomorphize-extra2.test.js +316 -0
- package/dist/src/__tests__/incremental.test.js +10 -2
- package/dist/src/__tests__/index-extra.test.d.ts +10 -0
- package/dist/src/__tests__/index-extra.test.js +71 -0
- package/dist/src/__tests__/lexer.test.js +2 -2
- package/dist/src/__tests__/lint/rules.test.d.ts +5 -0
- package/dist/src/__tests__/lint/rules.test.js +208 -0
- package/dist/src/__tests__/lir/lower.test.js +29 -0
- package/dist/src/__tests__/lir/verify.test.js +30 -0
- package/dist/src/__tests__/lsp/completion.test.d.ts +7 -0
- package/dist/src/__tests__/lsp/completion.test.js +583 -0
- package/dist/src/__tests__/lsp/definition.test.d.ts +7 -0
- package/dist/src/__tests__/lsp/definition.test.js +454 -0
- package/dist/src/__tests__/lsp/diagnostics.test.d.ts +10 -0
- package/dist/src/__tests__/lsp/diagnostics.test.js +98 -0
- package/dist/src/__tests__/lsp/hover-docs.test.d.ts +10 -0
- package/dist/src/__tests__/lsp/hover-docs.test.js +210 -0
- package/dist/src/__tests__/lsp.test.js +4 -1
- package/dist/src/__tests__/mc-integration/item-entity-events.test.js +4 -0
- package/dist/src/__tests__/mc-integration/stdlib-coverage-2.test.js +4 -0
- package/dist/src/__tests__/mc-integration/stdlib-coverage-3.test.d.ts +13 -0
- package/dist/src/__tests__/mc-integration/stdlib-coverage-3.test.js +1227 -0
- package/dist/src/__tests__/mc-integration/stdlib-coverage-4.test.d.ts +13 -0
- package/dist/src/__tests__/mc-integration/stdlib-coverage-4.test.js +1509 -0
- package/dist/src/__tests__/mc-integration/stdlib-coverage-5.test.d.ts +14 -0
- package/dist/src/__tests__/mc-integration/stdlib-coverage-5.test.js +1374 -0
- package/dist/src/__tests__/mc-integration/stdlib-coverage-6.test.d.ts +10 -0
- package/dist/src/__tests__/mc-integration/stdlib-coverage-6.test.js +759 -0
- package/dist/src/__tests__/mc-integration/stdlib-coverage-7.test.d.ts +13 -0
- package/dist/src/__tests__/mc-integration/stdlib-coverage-7.test.js +855 -0
- package/dist/src/__tests__/mc-integration/stdlib-coverage.test.js +4 -0
- package/dist/src/__tests__/mc-integration/syntax-coverage.test.js +4 -0
- package/dist/src/__tests__/mc-validator-coverage.test.d.ts +13 -0
- package/dist/src/__tests__/mc-validator-coverage.test.js +296 -0
- package/dist/src/__tests__/mc-validator-extra.test.d.ts +13 -0
- package/dist/src/__tests__/mc-validator-extra.test.js +245 -0
- package/dist/src/__tests__/mir/lower-extra.test.d.ts +20 -0
- package/dist/src/__tests__/mir/lower-extra.test.js +361 -0
- package/dist/src/__tests__/mir/lower-extra2.test.d.ts +17 -0
- package/dist/src/__tests__/mir/lower-extra2.test.js +317 -0
- package/dist/src/__tests__/mir/lower-extra3.test.d.ts +19 -0
- package/dist/src/__tests__/mir/lower-extra3.test.js +249 -0
- package/dist/src/__tests__/mir/lower-extra4.test.d.ts +23 -0
- package/dist/src/__tests__/mir/lower-extra4.test.js +606 -0
- package/dist/src/__tests__/mir/lower-extra5.test.d.ts +25 -0
- package/dist/src/__tests__/mir/lower-extra5.test.js +543 -0
- package/dist/src/__tests__/mir/lower-extra6.test.d.ts +16 -0
- package/dist/src/__tests__/mir/lower-extra6.test.js +471 -0
- package/dist/src/__tests__/mir/lower-extra7.test.d.ts +35 -0
- package/dist/src/__tests__/mir/lower-extra7.test.js +921 -0
- package/dist/src/__tests__/mir/lower-extra8.test.d.ts +19 -0
- package/dist/src/__tests__/mir/lower-extra8.test.js +626 -0
- package/dist/src/__tests__/mir/lower-extra9.test.d.ts +14 -0
- package/dist/src/__tests__/mir/lower-extra9.test.js +717 -0
- package/dist/src/__tests__/optimizer/auto-inline.test.d.ts +1 -0
- package/dist/src/__tests__/optimizer/auto-inline.test.js +176 -0
- package/dist/src/__tests__/optimizer/cse.test.d.ts +4 -0
- package/dist/src/__tests__/optimizer/cse.test.js +178 -0
- package/dist/src/__tests__/optimizer/inline_fn.test.d.ts +1 -0
- package/dist/src/__tests__/optimizer/inline_fn.test.js +221 -0
- package/dist/src/__tests__/optimizer/licm.test.d.ts +1 -0
- package/dist/src/__tests__/optimizer/licm.test.js +244 -0
- package/dist/src/__tests__/optimizer/optimizer-extended.test.d.ts +12 -0
- package/dist/src/__tests__/optimizer/optimizer-extended.test.js +993 -0
- package/dist/src/__tests__/optimizer/strength-reduction.test.d.ts +1 -0
- package/dist/src/__tests__/optimizer/strength-reduction.test.js +86 -0
- package/dist/src/__tests__/optimizer/tco.test.d.ts +14 -0
- package/dist/src/__tests__/optimizer/tco.test.js +203 -0
- package/dist/src/__tests__/parser-coverage.test.d.ts +25 -0
- package/dist/src/__tests__/parser-coverage.test.js +491 -0
- package/dist/src/__tests__/parser-extra.test.d.ts +6 -0
- package/dist/src/__tests__/parser-extra.test.js +451 -0
- package/dist/src/__tests__/parser.test.js +12 -0
- package/dist/src/__tests__/repl-extra.test.d.ts +13 -0
- package/dist/src/__tests__/repl-extra.test.js +174 -0
- package/dist/src/__tests__/repl-server-extra.test.d.ts +10 -0
- package/dist/src/__tests__/repl-server-extra.test.js +161 -0
- package/dist/src/__tests__/repl-server.test.d.ts +6 -0
- package/dist/src/__tests__/repl-server.test.js +146 -0
- package/dist/src/__tests__/runtime-extra.test.d.ts +15 -0
- package/dist/src/__tests__/runtime-extra.test.js +732 -0
- package/dist/src/__tests__/singleton-decorator.test.d.ts +11 -0
- package/dist/src/__tests__/singleton-decorator.test.js +260 -0
- package/dist/src/__tests__/sourcemap.test.js +1 -1
- package/dist/src/__tests__/stdlib/advanced.test.d.ts +5 -0
- package/dist/src/__tests__/stdlib/advanced.test.js +301 -0
- package/dist/src/__tests__/stdlib/bigint.test.d.ts +4 -0
- package/dist/src/__tests__/stdlib/bigint.test.js +83 -0
- package/dist/src/__tests__/stdlib/bits.test.d.ts +4 -0
- package/dist/src/__tests__/stdlib/bits.test.js +96 -0
- package/dist/src/__tests__/stdlib/bossbar.test.d.ts +4 -0
- package/dist/src/__tests__/stdlib/bossbar.test.js +72 -0
- package/dist/src/__tests__/stdlib/color.test.d.ts +4 -0
- package/dist/src/__tests__/stdlib/color.test.js +84 -0
- package/dist/src/__tests__/stdlib/combat.test.d.ts +4 -0
- package/dist/src/__tests__/stdlib/combat.test.js +64 -0
- package/dist/src/__tests__/stdlib/cooldown.test.d.ts +4 -0
- package/dist/src/__tests__/stdlib/cooldown.test.js +64 -0
- package/dist/src/__tests__/stdlib/dialog.test.js +15 -7
- package/dist/src/__tests__/stdlib/ecs.test.d.ts +4 -0
- package/dist/src/__tests__/stdlib/ecs.test.js +81 -0
- package/dist/src/__tests__/stdlib/effects.test.d.ts +4 -0
- package/dist/src/__tests__/stdlib/effects.test.js +72 -0
- package/dist/src/__tests__/stdlib/events.test.d.ts +4 -0
- package/dist/src/__tests__/stdlib/events.test.js +55 -0
- package/dist/src/__tests__/stdlib/expr.test.d.ts +4 -0
- package/dist/src/__tests__/stdlib/expr.test.js +77 -0
- package/dist/src/__tests__/stdlib/fft.test.d.ts +4 -0
- package/dist/src/__tests__/stdlib/fft.test.js +82 -0
- package/dist/src/__tests__/stdlib/graph.test.d.ts +4 -0
- package/dist/src/__tests__/stdlib/graph.test.js +102 -0
- package/dist/src/__tests__/stdlib/interactions.test.d.ts +4 -0
- package/dist/src/__tests__/stdlib/interactions.test.js +60 -0
- package/dist/src/__tests__/stdlib/inventory.test.d.ts +4 -0
- package/dist/src/__tests__/stdlib/inventory.test.js +68 -0
- package/dist/src/__tests__/stdlib/linalg.test.d.ts +5 -0
- package/dist/src/__tests__/stdlib/linalg.test.js +78 -0
- package/dist/src/__tests__/stdlib/map.test.d.ts +1 -0
- package/dist/src/__tests__/stdlib/map.test.js +84 -0
- package/dist/src/__tests__/stdlib/math.test.js +19 -6
- package/dist/src/__tests__/stdlib/math_hp.test.d.ts +4 -0
- package/dist/src/__tests__/stdlib/math_hp.test.js +80 -0
- package/dist/src/__tests__/stdlib/mobs.test.d.ts +4 -0
- package/dist/src/__tests__/stdlib/mobs.test.js +61 -0
- package/dist/src/__tests__/stdlib/noise.test.d.ts +4 -0
- package/dist/src/__tests__/stdlib/noise.test.js +73 -0
- package/dist/src/__tests__/stdlib/ode.test.d.ts +4 -0
- package/dist/src/__tests__/stdlib/ode.test.js +68 -0
- package/dist/src/__tests__/stdlib/parabola.test.d.ts +4 -0
- package/dist/src/__tests__/stdlib/parabola.test.js +77 -0
- package/dist/src/__tests__/stdlib/particles.test.d.ts +4 -0
- package/dist/src/__tests__/stdlib/particles.test.js +68 -0
- package/dist/src/__tests__/stdlib/physics.test.d.ts +4 -0
- package/dist/src/__tests__/stdlib/physics.test.js +76 -0
- package/dist/src/__tests__/stdlib/player.test.d.ts +4 -0
- package/dist/src/__tests__/stdlib/player.test.js +64 -0
- package/dist/src/__tests__/stdlib/quaternion.test.d.ts +4 -0
- package/dist/src/__tests__/stdlib/quaternion.test.js +73 -0
- package/dist/src/__tests__/stdlib/queue.test.d.ts +1 -0
- package/dist/src/__tests__/stdlib/queue.test.js +97 -0
- package/dist/src/__tests__/stdlib/random.test.d.ts +4 -0
- package/dist/src/__tests__/stdlib/random.test.js +76 -0
- package/dist/src/__tests__/stdlib/result.test.d.ts +12 -0
- package/dist/src/__tests__/stdlib/result.test.js +329 -0
- package/dist/src/__tests__/stdlib/scheduler.test.js +19 -8
- package/dist/src/__tests__/stdlib/set_int.test.d.ts +1 -0
- package/dist/src/__tests__/stdlib/set_int.test.js +88 -0
- package/dist/src/__tests__/stdlib/sets.test.d.ts +6 -0
- package/dist/src/__tests__/stdlib/sets.test.js +60 -0
- package/dist/src/__tests__/stdlib/signal.test.d.ts +4 -0
- package/dist/src/__tests__/stdlib/signal.test.js +84 -0
- package/dist/src/__tests__/stdlib/spawn.test.d.ts +4 -0
- package/dist/src/__tests__/stdlib/spawn.test.js +68 -0
- package/dist/src/__tests__/stdlib/string.test.d.ts +12 -0
- package/dist/src/__tests__/stdlib/string.test.js +231 -0
- package/dist/src/__tests__/stdlib/strings.test.d.ts +4 -0
- package/dist/src/__tests__/stdlib/strings.test.js +83 -0
- package/dist/src/__tests__/stdlib/tags.test.d.ts +4 -0
- package/dist/src/__tests__/stdlib/tags.test.js +57 -0
- package/dist/src/__tests__/stdlib/teams.test.d.ts +4 -0
- package/dist/src/__tests__/stdlib/teams.test.js +72 -0
- package/dist/src/__tests__/stdlib/timer.test.d.ts +4 -0
- package/dist/src/__tests__/stdlib/timer.test.js +79 -0
- package/dist/src/__tests__/stdlib/vec.test.d.ts +5 -0
- package/dist/src/__tests__/stdlib/vec.test.js +94 -0
- package/dist/src/__tests__/stdlib/world.test.d.ts +4 -0
- package/dist/src/__tests__/stdlib/world.test.js +72 -0
- package/dist/src/__tests__/struct-display.test.d.ts +1 -0
- package/dist/src/__tests__/struct-display.test.js +64 -0
- package/dist/src/__tests__/test-framework/runner.test.d.ts +10 -0
- package/dist/src/__tests__/test-framework/runner.test.js +193 -0
- package/dist/src/__tests__/tuner/adapters.test.d.ts +14 -0
- package/dist/src/__tests__/tuner/adapters.test.js +194 -0
- package/dist/src/__tests__/tuner/simulator-extra.test.d.ts +4 -0
- package/dist/src/__tests__/tuner/simulator-extra.test.js +193 -0
- package/dist/src/__tests__/typechecker-coverage.test.d.ts +30 -0
- package/dist/src/__tests__/typechecker-coverage.test.js +627 -0
- package/dist/src/__tests__/typechecker.test.js +3 -3
- package/dist/src/__tests__/watch-decorator.test.d.ts +1 -0
- package/dist/src/__tests__/watch-decorator.test.js +54 -0
- package/dist/src/ast/types.d.ts +102 -3
- package/dist/src/cache/incremental.d.ts +13 -14
- package/dist/src/cache/incremental.js +106 -89
- package/dist/src/cache/index.d.ts +8 -2
- package/dist/src/cache/index.js +18 -6
- package/dist/src/cli.d.ts +1 -0
- package/dist/src/cli.js +466 -17
- package/dist/src/config/project-config.d.ts +29 -0
- package/dist/src/config/project-config.js +180 -0
- package/dist/src/diagnostics/index.d.ts +9 -0
- package/dist/src/diagnostics/index.js +18 -1
- package/dist/src/emit/compile.d.ts +10 -0
- package/dist/src/emit/compile.js +395 -50
- package/dist/src/emit/index.d.ts +40 -0
- package/dist/src/emit/index.js +307 -14
- package/dist/src/emit/modules.js +21 -3
- package/dist/src/emit/sourcemap.d.ts +23 -27
- package/dist/src/emit/sourcemap.js +52 -30
- package/dist/src/formatter/index.js +33 -8
- package/dist/src/hir/deprecated.d.ts +13 -0
- package/dist/src/hir/deprecated.js +218 -0
- package/dist/src/hir/lower.js +114 -8
- package/dist/src/hir/monomorphize.js +22 -2
- package/dist/src/hir/types.d.ts +65 -1
- package/dist/src/index.d.ts +6 -0
- package/dist/src/index.js +18 -3
- package/dist/src/lexer/index.d.ts +2 -1
- package/dist/src/lexer/index.js +39 -3
- package/dist/src/lint/index.d.ts +45 -0
- package/dist/src/lint/index.js +930 -0
- package/dist/src/lir/lower.js +29 -2
- package/dist/src/lir/types.d.ts +2 -0
- package/dist/src/lsp/server.js +92 -5
- package/dist/src/mir/lower.js +775 -34
- package/dist/src/mir/macro.js +36 -2
- package/dist/src/mir/types.d.ts +12 -0
- package/dist/src/mir/verify.js +9 -0
- package/dist/src/optimizer/auto-inline.d.ts +2 -0
- package/dist/src/optimizer/auto-inline.js +67 -0
- package/dist/src/optimizer/cse.d.ts +20 -0
- package/dist/src/optimizer/cse.js +234 -0
- package/dist/src/optimizer/inline.d.ts +26 -0
- package/dist/src/optimizer/inline.js +286 -0
- package/dist/src/optimizer/interprocedural.js +4 -0
- package/dist/src/optimizer/licm.d.ts +32 -0
- package/dist/src/optimizer/licm.js +371 -0
- package/dist/src/optimizer/pipeline.js +12 -2
- package/dist/src/optimizer/strength_reduction.d.ts +15 -0
- package/dist/src/optimizer/strength_reduction.js +90 -0
- package/dist/src/optimizer/tco.d.ts +53 -0
- package/dist/src/optimizer/tco.js +238 -0
- package/dist/src/parser/index.d.ts +32 -0
- package/dist/src/parser/index.js +421 -59
- package/dist/src/repl-server.d.ts +13 -0
- package/dist/src/repl-server.js +127 -0
- package/dist/src/structs/expand.d.ts +15 -0
- package/dist/src/structs/expand.js +46 -0
- package/dist/src/testing/runner.d.ts +40 -0
- package/dist/src/testing/runner.js +237 -0
- package/dist/src/typechecker/index.d.ts +3 -0
- package/dist/src/typechecker/index.js +254 -9
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/doc-drafts/redscript-docs/docs/en/stdlib/graph.md +104 -0
- package/doc-drafts/redscript-docs/docs/en/stdlib/parabola.md +113 -0
- package/doc-drafts/redscript-docs/docs/en/stdlib/pathfind.md +104 -0
- package/doc-drafts/redscript-docs/docs/en/stdlib/physics.md +134 -0
- package/doc-drafts/redscript-docs/docs/en/stdlib/quaternion.md +135 -0
- package/doc-drafts/redscript-docs/docs/zh/stdlib/graph.md +104 -0
- package/doc-drafts/redscript-docs/docs/zh/stdlib/parabola.md +113 -0
- package/doc-drafts/redscript-docs/docs/zh/stdlib/pathfind.md +104 -0
- package/doc-drafts/redscript-docs/docs/zh/stdlib/physics.md +134 -0
- package/doc-drafts/redscript-docs/docs/zh/stdlib/quaternion.md +135 -0
- package/docs/stdlib/result.md +156 -0
- package/docs/stdlib/result.zh.md +156 -0
- package/editors/vscode/fixtures/test.mcrs +7 -0
- package/editors/vscode/out/extension.js +2095 -225
- package/editors/vscode/out/lsp-server.js +519 -51
- package/editors/vscode/package-lock.json +9 -4
- package/editors/vscode/package.json +1 -1
- package/examples/display-demo.mcrs +64 -0
- package/examples/game/racing.mcrs +301 -0
- package/examples/game/tower_defense.mcrs +311 -0
- package/examples/math/physics_sim.mcrs +322 -0
- package/examples/rpg/boss_fight.mcrs +313 -0
- package/examples/rpg/health_system.mcrs +237 -0
- package/examples/rpg/inventory.mcrs +265 -0
- package/examples/util/debug_hud.mcrs +279 -0
- package/jest.config.js +10 -0
- package/package.json +12 -3
- package/playground/index.html +823 -0
- package/scripts/gen-docs.ts +533 -0
- package/scripts/update-redscript-docs-stdlib.sh +770 -0
- package/src/__tests__/budget.test.ts +5 -0
- package/src/__tests__/cache/cache-behavior.test.ts +480 -0
- package/src/__tests__/cache-extra.test.ts +199 -0
- package/src/__tests__/cli-docs.test.ts +77 -0
- package/src/__tests__/cli-init.test.ts +91 -0
- package/src/__tests__/cli-publish.test.ts +190 -0
- package/src/__tests__/cli.test.ts +117 -1
- package/src/__tests__/compile-preprocess.test.ts +366 -0
- package/src/__tests__/compiler/break-stmt.test.ts +66 -0
- package/src/__tests__/compiler/const-decl.test.ts +141 -0
- package/src/__tests__/compiler/continue-stmt.test.ts +81 -0
- package/src/__tests__/compiler/coroutine-extended.test.ts +723 -0
- package/src/__tests__/compiler/deprecated.test.ts +305 -0
- package/src/__tests__/compiler/do-while.test.ts +130 -0
- package/src/__tests__/compiler/enum-payload.test.ts +299 -0
- package/src/__tests__/compiler/interface.test.ts +287 -0
- package/src/__tests__/compiler/labeled-loops.test.ts +279 -0
- package/src/__tests__/compiler/match-string.test.ts +45 -0
- package/src/__tests__/compiler/memoize.test.ts +126 -0
- package/src/__tests__/compiler/method-chain.test.ts +121 -0
- package/src/__tests__/compiler/module-import.test.ts +240 -0
- package/src/__tests__/compiler/option-extensions.test.ts +207 -0
- package/src/__tests__/compiler/profile-decorator.test.ts +79 -0
- package/src/__tests__/compiler/string-advanced.test.ts +310 -0
- package/src/__tests__/compiler/struct-extends.test.ts +109 -0
- package/src/__tests__/compiler/throttle-retry.test.ts +191 -0
- package/src/__tests__/compiler/tuple-type.test.ts +263 -0
- package/src/__tests__/compiler/watch-decorator.test.ts +72 -0
- package/src/__tests__/config/project-config.test.ts +181 -0
- package/src/__tests__/config-decorator.test.ts +157 -0
- package/src/__tests__/diagnostics-extra.test.ts +155 -0
- package/src/__tests__/emit/compile-branches.test.ts +135 -0
- package/src/__tests__/emit/compile-coverage.test.ts +696 -0
- package/src/__tests__/emit/compile-extra-branches.test.ts +228 -0
- package/src/__tests__/emit/compile-mocked-branches.test.ts +249 -0
- package/src/__tests__/emit/compile.test.ts +6 -1
- package/src/__tests__/emit/execute-chain.test.ts +114 -0
- package/src/__tests__/emit/index.test.ts +2 -1
- package/src/__tests__/emit/modules-branches.test.ts +90 -0
- package/src/__tests__/emit/modules-coverage.test.ts +241 -0
- package/src/__tests__/emit/modules-errors.test.ts +192 -0
- package/src/__tests__/emit/modules-rewrite.test.ts +232 -0
- package/src/__tests__/emit/source-map.test.ts +152 -0
- package/src/__tests__/enum.test.ts +9 -4
- package/src/__tests__/error-recovery.test.ts +226 -0
- package/src/__tests__/events-types-extra.test.ts +110 -0
- package/src/__tests__/events-types.test.ts +66 -0
- package/src/__tests__/formatter.test.ts +15 -5
- package/src/__tests__/generics.test.ts +16 -9
- package/src/__tests__/hir/lower-extra.test.ts +151 -0
- package/src/__tests__/hir/monomorphize-coverage.test.ts +432 -0
- package/src/__tests__/hir/monomorphize-extra.test.ts +220 -0
- package/src/__tests__/hir/monomorphize-extra2.test.ts +350 -0
- package/src/__tests__/impl.test.ts +12 -8
- package/src/__tests__/incremental.test.ts +10 -2
- package/src/__tests__/index-extra.test.ts +79 -0
- package/src/__tests__/lexer.test.ts +2 -2
- package/src/__tests__/lint/hir-coverage.test.ts +1716 -0
- package/src/__tests__/lint/rules-coverage.test.ts +598 -0
- package/src/__tests__/lint/rules.test.ts +230 -0
- package/src/__tests__/lir/lower.test.ts +33 -0
- package/src/__tests__/lir/verify.test.ts +33 -0
- package/src/__tests__/lsp/completion.test.ts +687 -0
- package/src/__tests__/lsp/definition.test.ts +499 -0
- package/src/__tests__/lsp/diagnostics.test.ts +108 -0
- package/src/__tests__/lsp/hover-docs.test.ts +222 -0
- package/src/__tests__/lsp.test.ts +4 -1
- package/src/__tests__/mc-integration/item-entity-events.test.ts +5 -0
- package/src/__tests__/mc-integration/stdlib-coverage-2.test.ts +5 -0
- package/src/__tests__/mc-integration/stdlib-coverage-3.test.ts +1105 -0
- package/src/__tests__/mc-integration/stdlib-coverage-4.test.ts +1366 -0
- package/src/__tests__/mc-integration/stdlib-coverage-5.test.ts +1245 -0
- package/src/__tests__/mc-integration/stdlib-coverage-6.test.ts +755 -0
- package/src/__tests__/mc-integration/stdlib-coverage-7.test.ts +771 -0
- package/src/__tests__/mc-integration/stdlib-coverage.test.ts +5 -0
- package/src/__tests__/mc-integration/syntax-coverage.test.ts +5 -0
- package/src/__tests__/mc-validator-coverage.test.ts +325 -0
- package/src/__tests__/mc-validator-extra.test.ts +252 -0
- package/src/__tests__/mir/lower-extra.test.ts +402 -0
- package/src/__tests__/mir/lower-extra2.test.ts +348 -0
- package/src/__tests__/mir/lower-extra3.test.ts +277 -0
- package/src/__tests__/mir/lower-extra4.test.ts +636 -0
- package/src/__tests__/mir/lower-extra5.test.ts +612 -0
- package/src/__tests__/mir/lower-extra6.test.ts +520 -0
- package/src/__tests__/mir/lower-extra7.test.ts +1045 -0
- package/src/__tests__/mir/lower-extra8.test.ts +704 -0
- package/src/__tests__/mir/lower-extra9.test.ts +821 -0
- package/src/__tests__/optimizer/auto-inline.test.ts +206 -0
- package/src/__tests__/optimizer/cse.test.ts +195 -0
- package/src/__tests__/optimizer/inline_fn.test.ts +263 -0
- package/src/__tests__/optimizer/licm.test.ts +358 -0
- package/src/__tests__/optimizer/nbt-coalesce.test.ts +147 -0
- package/src/__tests__/optimizer/optimizer-extended.test.ts +1081 -0
- package/src/__tests__/optimizer/scoreboard-batch.test.ts +141 -0
- package/src/__tests__/optimizer/strength-reduction.test.ts +111 -0
- package/src/__tests__/optimizer/tco-coverage.test.ts +309 -0
- package/src/__tests__/optimizer/tco.test.ts +238 -0
- package/src/__tests__/option.test.ts +14 -7
- package/src/__tests__/parser-coverage.test.ts +576 -0
- package/src/__tests__/parser-extra.test.ts +531 -0
- package/src/__tests__/parser.test.ts +14 -0
- package/src/__tests__/repl-extra.test.ts +195 -0
- package/src/__tests__/repl-server-extra.test.ts +150 -0
- package/src/__tests__/repl-server.test.ts +122 -0
- package/src/__tests__/runtime-extra.test.ts +862 -0
- package/src/__tests__/singleton-decorator.test.ts +285 -0
- package/src/__tests__/sourcemap.test.ts +1 -1
- package/src/__tests__/stdlib/advanced.test.ts +312 -0
- package/src/__tests__/stdlib/bigint.test.ts +57 -0
- package/src/__tests__/stdlib/bits.test.ts +75 -0
- package/src/__tests__/stdlib/bossbar.test.ts +45 -0
- package/src/__tests__/stdlib/color.test.ts +60 -0
- package/src/__tests__/stdlib/combat.test.ts +35 -0
- package/src/__tests__/stdlib/cooldown.test.ts +35 -0
- package/src/__tests__/stdlib/dialog.test.ts +14 -6
- package/src/__tests__/stdlib/ecs.test.ts +54 -0
- package/src/__tests__/stdlib/effects.test.ts +45 -0
- package/src/__tests__/stdlib/events.test.ts +23 -0
- package/src/__tests__/stdlib/expr.test.ts +48 -0
- package/src/__tests__/stdlib/fft.test.ts +54 -0
- package/src/__tests__/stdlib/graph.test.ts +77 -0
- package/src/__tests__/stdlib/interactions.test.ts +30 -0
- package/src/__tests__/stdlib/inventory.test.ts +40 -0
- package/src/__tests__/stdlib/linalg.test.ts +52 -0
- package/src/__tests__/stdlib/map.test.ts +55 -0
- package/src/__tests__/stdlib/math.test.ts +19 -5
- package/src/__tests__/stdlib/math_hp.test.ts +55 -0
- package/src/__tests__/stdlib/mobs.test.ts +40 -0
- package/src/__tests__/stdlib/noise.test.ts +46 -0
- package/src/__tests__/stdlib/ode.test.ts +40 -0
- package/src/__tests__/stdlib/parabola.test.ts +51 -0
- package/src/__tests__/stdlib/particles.test.ts +40 -0
- package/src/__tests__/stdlib/physics.test.ts +50 -0
- package/src/__tests__/stdlib/player.test.ts +35 -0
- package/src/__tests__/stdlib/quaternion.test.ts +46 -0
- package/src/__tests__/stdlib/queue.test.ts +73 -0
- package/src/__tests__/stdlib/random.test.ts +50 -0
- package/src/__tests__/stdlib/result.test.ts +326 -0
- package/src/__tests__/stdlib/scheduler.test.ts +18 -7
- package/src/__tests__/stdlib/set_int.test.ts +62 -0
- package/src/__tests__/stdlib/sets.test.ts +28 -0
- package/src/__tests__/stdlib/signal.test.ts +60 -0
- package/src/__tests__/stdlib/spawn.test.ts +40 -0
- package/src/__tests__/stdlib/string.test.ts +224 -0
- package/src/__tests__/stdlib/strings.test.ts +55 -0
- package/src/__tests__/stdlib/tags.test.ts +32 -0
- package/src/__tests__/stdlib/teams.test.ts +45 -0
- package/src/__tests__/stdlib/timer.test.ts +53 -0
- package/src/__tests__/stdlib/vec.test.ts +72 -0
- package/src/__tests__/stdlib/world.test.ts +45 -0
- package/src/__tests__/struct-display.test.ts +69 -0
- package/src/__tests__/test-framework/runner.test.ts +208 -0
- package/src/__tests__/tuner/adapters.test.ts +232 -0
- package/src/__tests__/tuner/simulator-extra.test.ts +222 -0
- package/src/__tests__/tuple.test.ts +11 -4
- package/src/__tests__/typechecker-coverage.test.ts +671 -0
- package/src/__tests__/typechecker.test.ts +4 -3
- package/src/__tests__/watch-decorator.test.ts +59 -0
- package/src/ast/types.ts +65 -3
- package/src/cache/incremental.ts +128 -99
- package/src/cache/index.ts +35 -8
- package/src/cli.ts +538 -29
- package/src/config/project-config.ts +176 -0
- package/src/diagnostics/index.ts +22 -0
- package/src/docs.ts +98 -0
- package/src/emit/compile.ts +408 -51
- package/src/emit/index.ts +366 -18
- package/src/emit/modules.ts +19 -3
- package/src/emit/sourcemap.ts +64 -43
- package/src/formatter/index.ts +35 -8
- package/src/hir/deprecated.ts +212 -0
- package/src/hir/lower.ts +128 -8
- package/src/hir/monomorphize.ts +24 -2
- package/src/hir/types.ts +26 -1
- package/src/index.ts +23 -3
- package/src/lexer/index.ts +45 -6
- package/src/lint/index.ts +922 -0
- package/src/lir/lower.ts +30 -2
- package/src/lir/types.ts +4 -0
- package/src/lsp/server.ts +100 -1
- package/src/mir/lower.ts +785 -40
- package/src/mir/macro.ts +30 -2
- package/src/mir/types.ts +13 -0
- package/src/mir/verify.ts +10 -2
- package/src/optimizer/auto-inline.ts +86 -0
- package/src/optimizer/copy_prop.ts +2 -2
- package/src/optimizer/coroutine.ts +3 -3
- package/src/optimizer/cse.ts +205 -0
- package/src/optimizer/dce.ts +2 -2
- package/src/optimizer/inline.ts +335 -0
- package/src/optimizer/interprocedural.ts +5 -1
- package/src/optimizer/licm.ts +454 -0
- package/src/optimizer/nbt-coalesce.ts +109 -0
- package/src/optimizer/pipeline.ts +16 -2
- package/src/optimizer/scoreboard-batch.ts +52 -0
- package/src/optimizer/strength_reduction.ts +95 -0
- package/src/optimizer/tco.ts +267 -0
- package/src/optimizer/unroll.ts +2 -2
- package/src/parser/index.ts +426 -53
- package/src/repl-server.ts +102 -0
- package/src/stdlib/advanced.mcrs +271 -101
- package/src/stdlib/bigint.mcrs +97 -11
- package/src/stdlib/bits.mcrs +75 -12
- package/src/stdlib/bossbar.mcrs +37 -8
- package/src/stdlib/calculus.mcrs +82 -26
- package/src/stdlib/color.mcrs +98 -16
- package/src/stdlib/combat.mcrs +23 -5
- package/src/stdlib/cooldown.mcrs +19 -0
- package/src/stdlib/dialog.mcrs +45 -7
- package/src/stdlib/easing.mcrs +132 -12
- package/src/stdlib/ecs.mcrs +142 -25
- package/src/stdlib/effects.mcrs +88 -12
- package/src/stdlib/events.mcrs +21 -2
- package/src/stdlib/expr.mcrs +18 -3
- package/src/stdlib/fft.mcrs +66 -56
- package/src/stdlib/geometry.mcrs +137 -39
- package/src/stdlib/graph.mcrs +73 -0
- package/src/stdlib/heap.mcrs +49 -8
- package/src/stdlib/i18n/zh.yaml +2891 -0
- package/src/stdlib/interactions.mcrs +43 -20
- package/src/stdlib/inventory.mcrs +14 -3
- package/src/stdlib/linalg.mcrs +185 -30
- package/src/stdlib/list.mcrs +168 -18
- package/src/stdlib/map.mcrs +112 -0
- package/src/stdlib/math.mcrs +68 -18
- package/src/stdlib/math_hp.mcrs +124 -33
- package/src/stdlib/matrix.mcrs +133 -20
- package/src/stdlib/mobs.mcrs +87 -0
- package/src/stdlib/noise.mcrs +65 -21
- package/src/stdlib/ode.mcrs +96 -0
- package/src/stdlib/parabola.mcrs +104 -29
- package/src/stdlib/particles.mcrs +78 -21
- package/src/stdlib/pathfind.mcrs +89 -35
- package/src/stdlib/physics.mcrs +134 -26
- package/src/stdlib/player.mcrs +18 -0
- package/src/stdlib/quaternion.mcrs +213 -9
- package/src/stdlib/queue.mcrs +123 -0
- package/src/stdlib/random.mcrs +63 -18
- package/src/stdlib/result.mcrs +111 -0
- package/src/stdlib/scheduler.mcrs +59 -10
- package/src/stdlib/set_int.mcrs +240 -0
- package/src/stdlib/sets.mcrs +49 -19
- package/src/stdlib/signal.mcrs +151 -79
- package/src/stdlib/sort.mcrs +44 -24
- package/src/stdlib/spawn.mcrs +30 -7
- package/src/stdlib/state.mcrs +40 -5
- package/src/stdlib/strings.mcrs +131 -3
- package/src/stdlib/tags.mcrs +2 -2
- package/src/stdlib/teams.mcrs +22 -10
- package/src/stdlib/timer.mcrs +36 -6
- package/src/stdlib/vec.mcrs +44 -9
- package/src/stdlib/world.mcrs +57 -25
- package/src/structs/expand.ts +64 -0
- package/src/testing/runner.ts +271 -0
- package/src/typechecker/index.ts +273 -9
package/.github/workflows/ci.yml
CHANGED
|
@@ -10,6 +10,11 @@ jobs:
|
|
|
10
10
|
runs-on: ubuntu-latest
|
|
11
11
|
steps:
|
|
12
12
|
- uses: actions/checkout@v4
|
|
13
|
+
- name: Checkout redscript-docs
|
|
14
|
+
uses: actions/checkout@v4
|
|
15
|
+
with:
|
|
16
|
+
repository: bkmashiro/redscript-docs
|
|
17
|
+
path: redscript-docs
|
|
13
18
|
- uses: actions/setup-node@v4
|
|
14
19
|
with:
|
|
15
20
|
node-version: 20
|
|
@@ -17,6 +22,12 @@ jobs:
|
|
|
17
22
|
- run: npm install
|
|
18
23
|
- run: npm run build
|
|
19
24
|
- run: npm test
|
|
25
|
+
- name: Run MC integration tests (offline - graceful skip)
|
|
26
|
+
run: npx jest --testPathPattern="mc-integration" --forceExit
|
|
27
|
+
env:
|
|
28
|
+
MC_OFFLINE: "true"
|
|
29
|
+
- name: Check stdlib docs are up to date
|
|
30
|
+
run: npx ts-node scripts/gen-docs.ts --check --docs-dir redscript-docs
|
|
20
31
|
|
|
21
32
|
build:
|
|
22
33
|
runs-on: ubuntu-latest
|
package/CHANGELOG.md
CHANGED
|
@@ -2,31 +2,40 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to RedScript will be documented in this file.
|
|
4
4
|
|
|
5
|
-
## [Unreleased]
|
|
5
|
+
## [Unreleased]
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
## [3.0.0] - 2026-03-21
|
|
8
8
|
|
|
9
9
|
### Added
|
|
10
10
|
|
|
11
11
|
#### Language / Compiler
|
|
12
12
|
- **`match` expression** — pattern-match on int / enum values; compiles to `execute if score` chains with exhaustiveness checking
|
|
13
|
+
- **`break` / `continue` statements** — structured loop control now lowers cleanly through HIR/MIR/LIR and is covered by unit, e2e, and MC integration tests
|
|
14
|
+
- **`do { ... } while (...)` and `repeat N { ... }` loops** — post-test and fixed-count loop forms added to the parser, lowering pipeline, and compiler tests
|
|
15
|
+
- **`const` declarations** — compile-time constants inline at use sites for simpler generated datapacks and cleaner constant propagation
|
|
16
|
+
- **`@deprecated("message")` decorator** — compile-time warnings for deprecated APIs and migration guidance at call sites
|
|
13
17
|
- **`for item in array` iteration** — `for x in arr { … }` syntax sugar; desugars to `while idx < arr.len() { let x = arr[idx]; idx++ }` in HIR; generates loop-header / loop-body / loop-exit mcfunction splits
|
|
14
18
|
- **`arr.len()` — literal constant + dynamic runtime** — literal arrays (`[1,2,3].len()`) fold to a compile-time constant (`scoreboard players set`); function-parameter and heap arrays use the new `nbt_list_len` MIR instruction which lowers to `execute store result score … run data get storage`
|
|
19
|
+
- **`@on(EventType)` full compiler implementation** — compiler generates Minecraft function-tag JSON and wires an `events.mcrs` dispatcher automatically; supported events: `PlayerJoin`, `PlayerDeath`, `EntityKill`, `ItemUse` (each with correctly typed parameters)
|
|
20
|
+
|
|
21
|
+
#### Standard Library
|
|
22
|
+
- **`Result<T>`** — new stdlib result type with `Ok` / `Err` variants and helper functions for explicit error handling
|
|
15
23
|
- **`state.mcrs`** — persistent entity/global state management stdlib module
|
|
16
24
|
- **`dialog.mcrs`** — NPC dialog trees with choice branching and callback support
|
|
17
25
|
- **`scheduler.mcrs`** — tick-budget-aware task scheduler (coroutine-compatible)
|
|
18
|
-
|
|
19
|
-
#### Tests
|
|
20
|
-
- **Coverage: 80% → 85%** — new unit tests for builtins, runtime, emit pipeline, and stdlib modules; arr.len() compile-time and dynamic paths fully covered
|
|
21
|
-
|
|
22
|
-
#### stdlib
|
|
23
26
|
- **`linalg.mcrs`** — double-precision linear algebra: `vec2_add/sub/scale/dot/length/normalize`, `vec3_cross`, `mat2x2 / mat3x3 / mat4x4` multiply, Cramer's rule solver for 2×2 and 3×3 systems
|
|
24
27
|
- **`fft.mcrs`** — Discrete Fourier Transform with a `@coroutine` variant for in-game use; supports transforms up to n=64; quarter-wave symmetry test now enabled after related compiler fix
|
|
25
28
|
- **`ecs.mcrs`** — Entity Component System: `register_component`, `get_component`, `has_component`; built-in Health and Velocity components; `@tick` system iteration via `foreach(entity[tag=has_<component>])`; fills the gap that Java datapacks have vs Bedrock's native component model
|
|
26
29
|
- **`sort.mcrs` v2** — coroutine-based bottom-up merge sort for large arrays (n > 64); yields every 20 comparisons to stay within the 20 ms tick budget
|
|
27
30
|
|
|
28
|
-
####
|
|
29
|
-
-
|
|
31
|
+
#### Examples
|
|
32
|
+
- **7 new example programs** — `rpg/health_system`, `rpg/boss_fight`, `rpg/inventory`, `game/tower_defense`, `game/racing`, `math/physics_sim`, and `util/debug_hud`
|
|
33
|
+
|
|
34
|
+
#### Documentation
|
|
35
|
+
- **Language reference expansion** — `docs/LANGUAGE_REFERENCE.md` now documents the current type system plus expression, statement, decorator, execute-context, selector, coordinate, and builtin semantics in one place
|
|
36
|
+
|
|
37
|
+
#### Tests
|
|
38
|
+
- **Coverage increased further across compiler subsystems** — `src/typechecker/index.ts` branch coverage reached **88.33%**, `src/optimizer/**` line coverage reached **96.21%** (~97%), and `src/optimizer/coroutine.ts` function coverage reached **94.23%**
|
|
30
39
|
- **MC integration tests** for `@on(PlayerJoin)` and `@on(PlayerDeath)` added to the test suite
|
|
31
40
|
|
|
32
41
|
#### Runtime
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Benchmark Suite
|
|
2
|
+
|
|
3
|
+
RedScript now ships two benchmark entrypoints under `benchmarks/`.
|
|
4
|
+
|
|
5
|
+
## What They Measure
|
|
6
|
+
|
|
7
|
+
`benchmarks/compiler-perf.ts`
|
|
8
|
+
|
|
9
|
+
- Generates synthetic RedScript programs at roughly 10, 100, and 1000 lines.
|
|
10
|
+
- Measures end-to-end compiler stage time for:
|
|
11
|
+
- `parse`: preprocess, lex, parse, import merge, typecheck
|
|
12
|
+
- `HIR`: AST to HIR lowering and monomorphization
|
|
13
|
+
- `MIR`: MIR lowering, optimization, coroutine transform, and LIR lowering/optimization
|
|
14
|
+
- `emit`: datapack file emission
|
|
15
|
+
- Emits a JSON report to stdout.
|
|
16
|
+
|
|
17
|
+
`benchmarks/stdlib-complexity.ts`
|
|
18
|
+
|
|
19
|
+
- Compiles every file in `src/stdlib/`.
|
|
20
|
+
- Reports emitted instruction count, file count, and artifact size.
|
|
21
|
+
- Compares three optimization presets:
|
|
22
|
+
- `O0`: no MIR/LIR optimization passes
|
|
23
|
+
- `O1`: current default optimization pipeline
|
|
24
|
+
- `O2`: `O1` plus a second MIR/LIR optimization round after coroutine lowering
|
|
25
|
+
|
|
26
|
+
## How To Run
|
|
27
|
+
|
|
28
|
+
Run the default compiler benchmark:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
npm run bench
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Write the compiler benchmark report to a file:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
npx ts-node benchmarks/compiler-perf.ts --iterations 5 --output benchmarks/compiler-perf.report.json
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Run the stdlib complexity benchmark:
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
npx ts-node benchmarks/stdlib-complexity.ts --output benchmarks/stdlib-complexity.report.json
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Baseline
|
|
47
|
+
|
|
48
|
+
`benchmarks/baseline.json` stores one recorded run of both benchmarks on the local machine. Treat it as a local baseline, not a cross-machine performance target.
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
# VSCode Extension Manual Test Guide
|
|
2
|
+
|
|
3
|
+
The RedScript VSCode extension (`editors/vscode/`) provides syntax highlighting,
|
|
4
|
+
code completion, hover documentation, and error diagnostics for `.mcrs` files.
|
|
5
|
+
Because the extension runs inside a VS Code host process, automated integration
|
|
6
|
+
tests require the `@vscode/test-electron` or `@vscode/test-cli` harness and an
|
|
7
|
+
Xvfb display server (or Electron headless mode). The steps below describe how
|
|
8
|
+
to run the manual test cases by hand, plus a scaffold for future automation.
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## 1. Prerequisites
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
cd editors/vscode
|
|
16
|
+
npm install
|
|
17
|
+
npm run build # produces out/ from src/
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Install the extension from VSIX into VS Code:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
code --install-extension redscript-vscode-*.vsix
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Or open `editors/vscode/` in VS Code and press **F5** to launch an Extension
|
|
27
|
+
Development Host.
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## 2. Test Cases
|
|
32
|
+
|
|
33
|
+
### 2.1 Syntax Highlighting – `.mcrs` file loaded
|
|
34
|
+
|
|
35
|
+
**File to open:** any `.mcrs` file, e.g. `examples/hello.mcrs`.
|
|
36
|
+
|
|
37
|
+
Expected token colourisation (use **Developer: Inspect Editor Tokens and Scopes**):
|
|
38
|
+
|
|
39
|
+
| Token | Expected scope |
|
|
40
|
+
|------------------------|---------------------------------------------|
|
|
41
|
+
| `fn` | `keyword.declaration.redscript` |
|
|
42
|
+
| `let` | `keyword.declaration.redscript` |
|
|
43
|
+
| `if`, `while`, `return`| `keyword.control.redscript` |
|
|
44
|
+
| `true`, `false` | `constant.language.boolean.redscript` |
|
|
45
|
+
| `self` | `variable.language.self.redscript` |
|
|
46
|
+
| `int`, `bool`, `string`| `support.type.primitive.redscript` |
|
|
47
|
+
| `@keep`, `@load` | `meta.decorator.redscript` |
|
|
48
|
+
| `// comment` | `comment.line.double-slash.redscript` |
|
|
49
|
+
| `"hello"` | `string.quoted.double.redscript` |
|
|
50
|
+
| `42`, `3.14` | `constant.numeric.redscript` |
|
|
51
|
+
| `@p`, `@a`, `@e` | `entity.name.selector.redscript` |
|
|
52
|
+
|
|
53
|
+
**Pass criteria:** every token above shows the expected scope in the inspector.
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
### 2.2 Code Completion – keywords and builtins
|
|
58
|
+
|
|
59
|
+
1. Create a new file `test.mcrs` with:
|
|
60
|
+
```redscript
|
|
61
|
+
fn example() {
|
|
62
|
+
sc
|
|
63
|
+
```
|
|
64
|
+
2. Place the cursor after `sc` and press **Ctrl+Space**.
|
|
65
|
+
|
|
66
|
+
**Expected:** `scoreboard_get`, `scoreboard_set`, `scoreboard_add` appear in the
|
|
67
|
+
completion list with their signatures.
|
|
68
|
+
|
|
69
|
+
3. Type `say(` and hover over it.
|
|
70
|
+
|
|
71
|
+
**Expected:** completion or IntelliSense shows `say(msg: string)` signature.
|
|
72
|
+
|
|
73
|
+
4. Type `fn ` at the top level.
|
|
74
|
+
|
|
75
|
+
**Expected:** snippet for a function declaration is offered.
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
### 2.3 Error Diagnostics – red underline on syntax errors
|
|
80
|
+
|
|
81
|
+
1. Open or create `test.mcrs` with an intentional error:
|
|
82
|
+
```redscript
|
|
83
|
+
fn broken() {
|
|
84
|
+
let x: int = ; // missing right-hand side
|
|
85
|
+
}
|
|
86
|
+
```
|
|
87
|
+
2. Wait ≤ 600 ms (the debounce interval).
|
|
88
|
+
|
|
89
|
+
**Expected:** the `;` (or the assignment) is underlined in red; the Problems
|
|
90
|
+
panel shows an error from the RedScript compiler.
|
|
91
|
+
|
|
92
|
+
3. Fix the error (`let x: int = 42;`) and save.
|
|
93
|
+
|
|
94
|
+
**Expected:** the red underline disappears within ~600 ms.
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
### 2.4 Hover Documentation
|
|
99
|
+
|
|
100
|
+
1. Open any `.mcrs` file that uses a builtin, e.g.:
|
|
101
|
+
```redscript
|
|
102
|
+
fn t() { scoreboard_set("@s", "score", 10); }
|
|
103
|
+
```
|
|
104
|
+
2. Hover over `scoreboard_set`.
|
|
105
|
+
|
|
106
|
+
**Expected:** a Markdown hover card appears showing:
|
|
107
|
+
- Signature: `scoreboard_set(target, objective, value)`
|
|
108
|
+
- Description from the builtin docs table in `src/hover.ts`
|
|
109
|
+
- Example usage (if present)
|
|
110
|
+
|
|
111
|
+
3. Hover over a user-defined function in the same file.
|
|
112
|
+
|
|
113
|
+
**Expected:** if the function has a `///` doc comment immediately above it,
|
|
114
|
+
that comment text appears in the hover.
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## 3. Automated Test Scaffold (future)
|
|
119
|
+
|
|
120
|
+
The following test file can be placed at
|
|
121
|
+
`editors/vscode/src/test/extension.test.ts` once `@vscode/test-electron` is
|
|
122
|
+
added as a dev dependency and a Mocha runner is configured in `package.json`.
|
|
123
|
+
|
|
124
|
+
```typescript
|
|
125
|
+
// editors/vscode/src/test/extension.test.ts
|
|
126
|
+
// Automated integration tests for the RedScript VSCode extension.
|
|
127
|
+
// Run via: npx @vscode/test-electron --extensionDevelopmentPath=. --extensionTestsPath=./out/test
|
|
128
|
+
//
|
|
129
|
+
// Requires: @vscode/test-electron, mocha, @types/mocha
|
|
130
|
+
|
|
131
|
+
import * as assert from 'assert'
|
|
132
|
+
import * as path from 'path'
|
|
133
|
+
import * as vscode from 'vscode'
|
|
134
|
+
|
|
135
|
+
const FIXTURE = path.join(__dirname, '..', '..', 'fixtures', 'test.mcrs')
|
|
136
|
+
|
|
137
|
+
suite('RedScript VSCode Extension', function () {
|
|
138
|
+
this.timeout(10_000)
|
|
139
|
+
|
|
140
|
+
let document: vscode.TextDocument
|
|
141
|
+
|
|
142
|
+
suiteSetup(async () => {
|
|
143
|
+
// Ensure the extension is activated before tests run.
|
|
144
|
+
await vscode.extensions.getExtension('redscript.redscript-vscode')?.activate()
|
|
145
|
+
document = await vscode.workspace.openTextDocument(FIXTURE)
|
|
146
|
+
await vscode.window.showTextDocument(document)
|
|
147
|
+
// Allow diagnostics to settle (debounce is 600 ms).
|
|
148
|
+
await new Promise(r => setTimeout(r, 800))
|
|
149
|
+
})
|
|
150
|
+
|
|
151
|
+
// ── 2.1 Syntax Highlighting ─────────────────────────────────────────────────
|
|
152
|
+
test('grammar is registered for .mcrs files', () => {
|
|
153
|
+
assert.strictEqual(document.languageId, 'redscript')
|
|
154
|
+
})
|
|
155
|
+
|
|
156
|
+
// ── 2.2 Completions ─────────────────────────────────────────────────────────
|
|
157
|
+
test('completion list includes scoreboard_set', async () => {
|
|
158
|
+
const pos = new vscode.Position(5, 10) // after "sc" on line 5
|
|
159
|
+
const list = await vscode.commands.executeCommand<vscode.CompletionList>(
|
|
160
|
+
'vscode.executeCompletionItemProvider',
|
|
161
|
+
document.uri,
|
|
162
|
+
pos
|
|
163
|
+
)
|
|
164
|
+
const labels = (list?.items ?? []).map(i =>
|
|
165
|
+
typeof i.label === 'string' ? i.label : i.label.label
|
|
166
|
+
)
|
|
167
|
+
assert.ok(labels.some(l => l.includes('scoreboard_set')), `Expected scoreboard_set in: ${labels.join(', ')}`)
|
|
168
|
+
})
|
|
169
|
+
|
|
170
|
+
test('completion list includes keyword "fn"', async () => {
|
|
171
|
+
const pos = new vscode.Position(0, 0)
|
|
172
|
+
const list = await vscode.commands.executeCommand<vscode.CompletionList>(
|
|
173
|
+
'vscode.executeCompletionItemProvider',
|
|
174
|
+
document.uri,
|
|
175
|
+
pos
|
|
176
|
+
)
|
|
177
|
+
const labels = (list?.items ?? []).map(i =>
|
|
178
|
+
typeof i.label === 'string' ? i.label : i.label.label
|
|
179
|
+
)
|
|
180
|
+
assert.ok(labels.some(l => l === 'fn'), `Expected "fn" keyword in completions`)
|
|
181
|
+
})
|
|
182
|
+
|
|
183
|
+
// ── 2.3 Diagnostics ─────────────────────────────────────────────────────────
|
|
184
|
+
test('no diagnostics on valid file', async () => {
|
|
185
|
+
const diags = vscode.languages.getDiagnostics(document.uri)
|
|
186
|
+
assert.strictEqual(diags.length, 0, `Unexpected diagnostics: ${diags.map(d => d.message).join('; ')}`)
|
|
187
|
+
})
|
|
188
|
+
|
|
189
|
+
test('syntax error produces a diagnostic', async () => {
|
|
190
|
+
const edit = new vscode.WorkspaceEdit()
|
|
191
|
+
const errorLine = 'fn broken() { let x: int = ; }\n'
|
|
192
|
+
edit.insert(document.uri, new vscode.Position(document.lineCount, 0), errorLine)
|
|
193
|
+
await vscode.workspace.applyEdit(edit)
|
|
194
|
+
await new Promise(r => setTimeout(r, 800))
|
|
195
|
+
|
|
196
|
+
const diags = vscode.languages.getDiagnostics(document.uri)
|
|
197
|
+
assert.ok(diags.length > 0, 'Expected at least one error diagnostic for broken syntax')
|
|
198
|
+
})
|
|
199
|
+
|
|
200
|
+
// ── 2.4 Hover ───────────────────────────────────────────────────────────────
|
|
201
|
+
test('hover on scoreboard_set returns documentation', async () => {
|
|
202
|
+
// Position on "scoreboard_set" in the fixture file (line 2, col 4)
|
|
203
|
+
const pos = new vscode.Position(2, 6)
|
|
204
|
+
const hovers = await vscode.commands.executeCommand<vscode.Hover[]>(
|
|
205
|
+
'vscode.executeHoverProvider',
|
|
206
|
+
document.uri,
|
|
207
|
+
pos
|
|
208
|
+
)
|
|
209
|
+
const text = (hovers ?? [])
|
|
210
|
+
.flatMap(h => h.contents)
|
|
211
|
+
.map(c => (typeof c === 'string' ? c : c.value))
|
|
212
|
+
.join('\n')
|
|
213
|
+
assert.ok(text.includes('scoreboard'), `Expected hover docs to mention 'scoreboard', got: ${text}`)
|
|
214
|
+
})
|
|
215
|
+
})
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
A matching fixture file (`editors/vscode/fixtures/test.mcrs`):
|
|
219
|
+
|
|
220
|
+
```redscript
|
|
221
|
+
// Fixture for VSCode extension integration tests
|
|
222
|
+
fn example() {
|
|
223
|
+
scoreboard_set("@s", "score", 10);
|
|
224
|
+
say("hello");
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
// sc ← cursor here for completion test (line 5, col 10)
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
---
|
|
231
|
+
|
|
232
|
+
## 4. Build & Run (CI)
|
|
233
|
+
|
|
234
|
+
Add to `editors/vscode/package.json` scripts when the automated scaffold is ready:
|
|
235
|
+
|
|
236
|
+
```json
|
|
237
|
+
"test": "node ./out/test/runTests.js"
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
And install:
|
|
241
|
+
|
|
242
|
+
```bash
|
|
243
|
+
npm install --save-dev @vscode/test-electron mocha @types/mocha
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
For headless CI:
|
|
247
|
+
|
|
248
|
+
```bash
|
|
249
|
+
Xvfb :99 -screen 0 1024x768x24 &
|
|
250
|
+
DISPLAY=:99 npm test
|
|
251
|
+
```
|
package/RELEASE_NOTES.md
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# RedScript v3.0.0 — Release Notes
|
|
2
|
+
|
|
3
|
+
## Highlights
|
|
4
|
+
|
|
5
|
+
RedScript v3.0.0 is a major release that brings a comprehensive optimization pipeline, new language features, improved tooling, and complete stdlib documentation.
|
|
6
|
+
|
|
7
|
+
## What's New
|
|
8
|
+
|
|
9
|
+
### 🚀 Optimizer Pipeline (7 new passes)
|
|
10
|
+
|
|
11
|
+
| Pass | Description |
|
|
12
|
+
|------|-------------|
|
|
13
|
+
| Tail Call Optimization (TCO) | Converts tail-recursive functions to loops, avoiding MC's ~512-depth call limit |
|
|
14
|
+
| Common Subexpression Elimination (CSE) | Caches repeated expressions, eliminating redundant computation |
|
|
15
|
+
| Auto-Inline | Automatically inlines functions ≤5 MIR instructions |
|
|
16
|
+
| Execute Chain Optimization | Merges `execute if A run execute if B` → `execute if A if B` |
|
|
17
|
+
| Strength Reduction | `x * 2` → `x + x`, algebraic simplifications |
|
|
18
|
+
| Scoreboard Read Batching | Deduplicates redundant scoreboard reads within a block |
|
|
19
|
+
| NBT Write Coalescing | Removes overwritten NBT writes (backward analysis) |
|
|
20
|
+
|
|
21
|
+
### 🆕 Language Features
|
|
22
|
+
|
|
23
|
+
- **`struct extends`** — compile-time field inheritance, zero runtime overhead
|
|
24
|
+
- **`break <label>` / `continue <label>`** — jump out of nested loops
|
|
25
|
+
- **`@memoize`** — LRU-1 function result caching for single-arg int functions
|
|
26
|
+
- **`@throttle(ticks)`** — rate-limit function execution to once per N ticks
|
|
27
|
+
- **`@retry(max)`** — auto-retry on failure, up to N times
|
|
28
|
+
|
|
29
|
+
### 🛠️ CLI Commands
|
|
30
|
+
|
|
31
|
+
| Command | Description |
|
|
32
|
+
|---------|-------------|
|
|
33
|
+
| `redscript test` | Run `@test`-annotated functions with built-in `assert` |
|
|
34
|
+
| `redscript publish` | Package compiled output as standard Minecraft datapack `.zip` |
|
|
35
|
+
| `redscript docs [module]` | Open stdlib documentation in browser |
|
|
36
|
+
| `redscript lint` | 5 static analysis rules (unused-var, magic-number, dead-branch, ...) |
|
|
37
|
+
| `redscript.toml` | Project configuration file — replaces CLI flags |
|
|
38
|
+
|
|
39
|
+
### 🔧 Tooling & LSP
|
|
40
|
+
|
|
41
|
+
- **LSP hover**: Shows `///` doc comments on hover (description, @param, @returns)
|
|
42
|
+
- **LSP diagnostics**: Lint warnings pushed to editor Problems panel in real-time
|
|
43
|
+
- **Source map**: Generated `.sourcemap.json` traces `.mcfunction` back to `.mcrs` lines
|
|
44
|
+
- **Playground share**: URL-encoded shareable links via lz-string compression
|
|
45
|
+
|
|
46
|
+
### 📚 Stdlib (50 modules, complete documentation)
|
|
47
|
+
|
|
48
|
+
All 50 stdlib modules now have:
|
|
49
|
+
- `///` doc comment annotations with `@since`, `@param`, `@returns`, `@example`
|
|
50
|
+
- Auto-generated English + Chinese documentation
|
|
51
|
+
- VitePress `<Badge>` version tags
|
|
52
|
+
|
|
53
|
+
New modules added: `queue`, `map`, `set_int`, `sets`
|
|
54
|
+
|
|
55
|
+
### 🧪 Testing
|
|
56
|
+
|
|
57
|
+
- **3,886 unit tests passing**, 0 failing
|
|
58
|
+
- **430 MC integration tests** (with live Minecraft server)
|
|
59
|
+
- Overall branch coverage: **81.5%**
|
|
60
|
+
|
|
61
|
+
## Breaking Changes
|
|
62
|
+
|
|
63
|
+
- `format_string` type is now unified as `string` — remove any `as string` workarounds
|
|
64
|
+
- `arr.len()` for literal arrays returns compile-time constants — some dynamic expectations changed
|
|
65
|
+
|
|
66
|
+
## Migration from v2.x
|
|
67
|
+
|
|
68
|
+
1. Update package: `npm install redscript-mc@3.0.0`
|
|
69
|
+
2. Replace `as string` on format strings (no longer needed)
|
|
70
|
+
3. Add `redscript.toml` to your project (optional, run `redscript init` to generate)
|
|
71
|
+
|
|
72
|
+
## Full Changelog
|
|
73
|
+
|
|
74
|
+
See [CHANGELOG.md](./CHANGELOG.md) for detailed commit history.
|