redscript-mc 1.2.30 → 2.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/.claude/commands/build-test.md +10 -0
- package/.claude/commands/deploy-demo.md +12 -0
- package/.claude/commands/stage-status.md +13 -0
- package/.claude/settings.json +12 -0
- package/.github/workflows/ci.yml +1 -0
- package/CLAUDE.md +231 -0
- package/demo.gif +0 -0
- package/dist/cli.js +2 -554
- package/dist/compile.js +2 -266
- package/dist/index.js +2 -159
- package/dist/lowering/index.js +5 -3
- package/dist/src/__tests__/cli.test.d.ts +1 -0
- package/dist/src/__tests__/cli.test.js +104 -0
- package/dist/src/__tests__/codegen.test.d.ts +1 -0
- package/dist/src/__tests__/codegen.test.js +152 -0
- package/dist/src/__tests__/compile-all.test.d.ts +10 -0
- package/dist/src/__tests__/compile-all.test.js +108 -0
- package/dist/src/__tests__/dce.test.d.ts +1 -0
- package/dist/src/__tests__/dce.test.js +102 -0
- package/dist/src/__tests__/diagnostics.test.d.ts +4 -0
- package/dist/src/__tests__/diagnostics.test.js +177 -0
- package/dist/src/__tests__/e2e.test.d.ts +6 -0
- package/dist/src/__tests__/e2e.test.js +1789 -0
- package/dist/src/__tests__/entity-types.test.d.ts +1 -0
- package/dist/src/__tests__/entity-types.test.js +203 -0
- package/dist/src/__tests__/formatter.test.d.ts +1 -0
- package/dist/src/__tests__/formatter.test.js +40 -0
- package/dist/src/__tests__/lexer.test.d.ts +1 -0
- package/dist/src/__tests__/lexer.test.js +343 -0
- package/dist/src/__tests__/lowering.test.d.ts +1 -0
- package/dist/src/__tests__/lowering.test.js +1015 -0
- package/dist/src/__tests__/macro.test.d.ts +8 -0
- package/dist/src/__tests__/macro.test.js +306 -0
- package/dist/src/__tests__/mc-integration.test.d.ts +12 -0
- package/dist/src/__tests__/mc-integration.test.js +817 -0
- package/dist/src/__tests__/mc-syntax.test.d.ts +1 -0
- package/dist/src/__tests__/mc-syntax.test.js +124 -0
- package/dist/src/__tests__/nbt.test.d.ts +1 -0
- package/dist/src/__tests__/nbt.test.js +82 -0
- package/dist/src/__tests__/optimizer-advanced.test.d.ts +1 -0
- package/dist/src/__tests__/optimizer-advanced.test.js +124 -0
- package/dist/src/__tests__/optimizer.test.d.ts +1 -0
- package/dist/src/__tests__/optimizer.test.js +149 -0
- package/dist/src/__tests__/parser.test.d.ts +1 -0
- package/dist/src/__tests__/parser.test.js +807 -0
- package/dist/src/__tests__/repl.test.d.ts +1 -0
- package/dist/src/__tests__/repl.test.js +27 -0
- package/dist/src/__tests__/runtime.test.d.ts +1 -0
- package/dist/src/__tests__/runtime.test.js +289 -0
- package/dist/src/__tests__/stdlib-advanced.test.d.ts +4 -0
- package/dist/src/__tests__/stdlib-advanced.test.js +374 -0
- package/dist/src/__tests__/stdlib-bigint.test.d.ts +7 -0
- package/dist/src/__tests__/stdlib-bigint.test.js +426 -0
- package/dist/src/__tests__/stdlib-math.test.d.ts +7 -0
- package/dist/src/__tests__/stdlib-math.test.js +351 -0
- package/dist/src/__tests__/stdlib-vec.test.d.ts +4 -0
- package/dist/src/__tests__/stdlib-vec.test.js +263 -0
- package/dist/src/__tests__/structure-optimizer.test.d.ts +1 -0
- package/dist/src/__tests__/structure-optimizer.test.js +33 -0
- package/dist/src/__tests__/typechecker.test.d.ts +1 -0
- package/dist/src/__tests__/typechecker.test.js +552 -0
- package/dist/src/__tests__/var-allocator.test.d.ts +1 -0
- package/dist/src/__tests__/var-allocator.test.js +69 -0
- package/dist/src/ast/types.d.ts +515 -0
- package/dist/src/ast/types.js +9 -0
- package/dist/src/builtins/metadata.d.ts +36 -0
- package/dist/src/builtins/metadata.js +1014 -0
- package/dist/src/cli.d.ts +11 -0
- package/dist/src/cli.js +443 -0
- package/dist/src/codegen/cmdblock/index.d.ts +26 -0
- package/dist/src/codegen/cmdblock/index.js +45 -0
- package/dist/src/codegen/mcfunction/index.d.ts +40 -0
- package/dist/src/codegen/mcfunction/index.js +606 -0
- package/dist/src/codegen/structure/index.d.ts +24 -0
- package/dist/src/codegen/structure/index.js +279 -0
- package/dist/src/codegen/var-allocator.d.ts +45 -0
- package/dist/src/codegen/var-allocator.js +104 -0
- package/dist/src/compile.d.ts +37 -0
- package/dist/src/compile.js +165 -0
- package/dist/src/diagnostics/index.d.ts +44 -0
- package/dist/src/diagnostics/index.js +140 -0
- package/dist/src/events/types.d.ts +35 -0
- package/dist/src/events/types.js +59 -0
- package/dist/src/formatter/index.d.ts +1 -0
- package/dist/src/formatter/index.js +26 -0
- package/dist/src/index.d.ts +22 -0
- package/dist/src/index.js +45 -0
- package/dist/src/ir/builder.d.ts +33 -0
- package/dist/src/ir/builder.js +99 -0
- package/dist/src/ir/types.d.ts +132 -0
- package/dist/src/ir/types.js +15 -0
- package/dist/src/lexer/index.d.ts +37 -0
- package/dist/src/lexer/index.js +569 -0
- package/dist/src/lowering/index.d.ts +188 -0
- package/dist/src/lowering/index.js +3405 -0
- package/dist/src/mc-test/client.d.ts +128 -0
- package/dist/src/mc-test/client.js +174 -0
- package/dist/src/mc-test/runner.d.ts +28 -0
- package/dist/src/mc-test/runner.js +151 -0
- package/dist/src/mc-test/setup.d.ts +11 -0
- package/dist/src/mc-test/setup.js +98 -0
- package/dist/src/mc-validator/index.d.ts +17 -0
- package/dist/src/mc-validator/index.js +322 -0
- package/dist/src/nbt/index.d.ts +86 -0
- package/dist/src/nbt/index.js +250 -0
- package/dist/src/optimizer/commands.d.ts +38 -0
- package/dist/src/optimizer/commands.js +451 -0
- package/dist/src/optimizer/dce.d.ts +34 -0
- package/dist/src/optimizer/dce.js +639 -0
- package/dist/src/optimizer/passes.d.ts +34 -0
- package/dist/src/optimizer/passes.js +243 -0
- package/dist/src/optimizer/structure.d.ts +9 -0
- package/dist/src/optimizer/structure.js +356 -0
- package/dist/src/parser/index.d.ts +93 -0
- package/dist/src/parser/index.js +1687 -0
- package/dist/src/repl.d.ts +16 -0
- package/dist/src/repl.js +165 -0
- package/dist/src/runtime/index.d.ts +107 -0
- package/dist/src/runtime/index.js +1409 -0
- package/dist/src/typechecker/index.d.ts +61 -0
- package/dist/src/typechecker/index.js +1034 -0
- package/dist/src/types/entity-hierarchy.d.ts +29 -0
- package/dist/src/types/entity-hierarchy.js +107 -0
- package/dist/src2/__tests__/e2e/basic.test.d.ts +8 -0
- package/dist/src2/__tests__/e2e/basic.test.js +140 -0
- package/dist/src2/__tests__/e2e/macros.test.d.ts +9 -0
- package/dist/src2/__tests__/e2e/macros.test.js +182 -0
- package/dist/src2/__tests__/e2e/migrate.test.d.ts +13 -0
- package/dist/src2/__tests__/e2e/migrate.test.js +2739 -0
- package/dist/src2/__tests__/hir/desugar.test.d.ts +1 -0
- package/dist/src2/__tests__/hir/desugar.test.js +234 -0
- package/dist/src2/__tests__/lir/lower.test.d.ts +1 -0
- package/dist/src2/__tests__/lir/lower.test.js +559 -0
- package/dist/src2/__tests__/lir/types.test.d.ts +1 -0
- package/dist/src2/__tests__/lir/types.test.js +185 -0
- package/dist/src2/__tests__/lir/verify.test.d.ts +1 -0
- package/dist/src2/__tests__/lir/verify.test.js +221 -0
- package/dist/src2/__tests__/mir/arithmetic.test.d.ts +1 -0
- package/dist/src2/__tests__/mir/arithmetic.test.js +130 -0
- package/dist/src2/__tests__/mir/control-flow.test.d.ts +1 -0
- package/dist/src2/__tests__/mir/control-flow.test.js +205 -0
- package/dist/src2/__tests__/mir/verify.test.d.ts +1 -0
- package/dist/src2/__tests__/mir/verify.test.js +223 -0
- package/dist/src2/__tests__/optimizer/block_merge.test.d.ts +1 -0
- package/dist/src2/__tests__/optimizer/block_merge.test.js +78 -0
- package/dist/src2/__tests__/optimizer/branch_simplify.test.d.ts +1 -0
- package/dist/src2/__tests__/optimizer/branch_simplify.test.js +58 -0
- package/dist/src2/__tests__/optimizer/constant_fold.test.d.ts +1 -0
- package/dist/src2/__tests__/optimizer/constant_fold.test.js +131 -0
- package/dist/src2/__tests__/optimizer/copy_prop.test.d.ts +1 -0
- package/dist/src2/__tests__/optimizer/copy_prop.test.js +91 -0
- package/dist/src2/__tests__/optimizer/dce.test.d.ts +1 -0
- package/dist/src2/__tests__/optimizer/dce.test.js +76 -0
- package/dist/src2/__tests__/optimizer/pipeline.test.d.ts +1 -0
- package/dist/src2/__tests__/optimizer/pipeline.test.js +102 -0
- package/dist/src2/emit/compile.d.ts +19 -0
- package/dist/src2/emit/compile.js +80 -0
- package/dist/src2/emit/index.d.ts +17 -0
- package/dist/src2/emit/index.js +172 -0
- package/dist/src2/hir/lower.d.ts +15 -0
- package/dist/src2/hir/lower.js +378 -0
- package/dist/src2/hir/types.d.ts +373 -0
- package/dist/src2/hir/types.js +16 -0
- package/dist/src2/lir/lower.d.ts +15 -0
- package/dist/src2/lir/lower.js +453 -0
- package/dist/src2/lir/types.d.ts +136 -0
- package/dist/src2/lir/types.js +11 -0
- package/dist/src2/lir/verify.d.ts +14 -0
- package/dist/src2/lir/verify.js +113 -0
- package/dist/src2/mir/lower.d.ts +9 -0
- package/dist/src2/mir/lower.js +1030 -0
- package/dist/src2/mir/macro.d.ts +22 -0
- package/dist/src2/mir/macro.js +168 -0
- package/dist/src2/mir/types.d.ts +183 -0
- package/dist/src2/mir/types.js +11 -0
- package/dist/src2/mir/verify.d.ts +16 -0
- package/dist/src2/mir/verify.js +216 -0
- package/dist/src2/optimizer/block_merge.d.ts +12 -0
- package/dist/src2/optimizer/block_merge.js +84 -0
- package/dist/src2/optimizer/branch_simplify.d.ts +9 -0
- package/dist/src2/optimizer/branch_simplify.js +28 -0
- package/dist/src2/optimizer/constant_fold.d.ts +10 -0
- package/dist/src2/optimizer/constant_fold.js +85 -0
- package/dist/src2/optimizer/copy_prop.d.ts +9 -0
- package/dist/src2/optimizer/copy_prop.js +113 -0
- package/dist/src2/optimizer/dce.d.ts +8 -0
- package/dist/src2/optimizer/dce.js +155 -0
- package/dist/src2/optimizer/pipeline.d.ts +10 -0
- package/dist/src2/optimizer/pipeline.js +42 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/docs/compiler-pipeline-redesign.md +2243 -0
- package/docs/optimization-ideas.md +1076 -0
- package/editors/vscode/package-lock.json +3 -3
- package/editors/vscode/package.json +1 -1
- package/jest.config.js +1 -1
- package/package.json +6 -5
- package/scripts/postbuild.js +15 -0
- package/src/__tests__/cli.test.ts +8 -220
- package/src/__tests__/dce.test.ts +11 -56
- package/src/__tests__/diagnostics.test.ts +59 -38
- package/src/__tests__/mc-integration.test.ts +1 -2
- package/src/ast/types.ts +6 -1
- package/src/cli.ts +29 -156
- package/src/compile.ts +6 -162
- package/src/index.ts +14 -178
- package/src/mc-test/runner.ts +4 -3
- package/src/parser/index.ts +1 -1
- package/src/repl.ts +1 -1
- package/src/runtime/index.ts +1 -1
- package/src2/__tests__/e2e/basic.test.ts +154 -0
- package/src2/__tests__/e2e/macros.test.ts +199 -0
- package/src2/__tests__/e2e/migrate.test.ts +3008 -0
- package/src2/__tests__/hir/desugar.test.ts +263 -0
- package/src2/__tests__/lir/lower.test.ts +619 -0
- package/src2/__tests__/lir/types.test.ts +207 -0
- package/src2/__tests__/lir/verify.test.ts +249 -0
- package/src2/__tests__/mir/arithmetic.test.ts +156 -0
- package/src2/__tests__/mir/control-flow.test.ts +242 -0
- package/src2/__tests__/mir/verify.test.ts +254 -0
- package/src2/__tests__/optimizer/block_merge.test.ts +84 -0
- package/src2/__tests__/optimizer/branch_simplify.test.ts +64 -0
- package/src2/__tests__/optimizer/constant_fold.test.ts +145 -0
- package/src2/__tests__/optimizer/copy_prop.test.ts +99 -0
- package/src2/__tests__/optimizer/dce.test.ts +83 -0
- package/src2/__tests__/optimizer/pipeline.test.ts +116 -0
- package/src2/emit/compile.ts +99 -0
- package/src2/emit/index.ts +222 -0
- package/src2/hir/lower.ts +428 -0
- package/src2/hir/types.ts +216 -0
- package/src2/lir/lower.ts +556 -0
- package/src2/lir/types.ts +109 -0
- package/src2/lir/verify.ts +129 -0
- package/src2/mir/lower.ts +1160 -0
- package/src2/mir/macro.ts +167 -0
- package/src2/mir/types.ts +106 -0
- package/src2/mir/verify.ts +218 -0
- package/src2/optimizer/block_merge.ts +93 -0
- package/src2/optimizer/branch_simplify.ts +27 -0
- package/src2/optimizer/constant_fold.ts +88 -0
- package/src2/optimizer/copy_prop.ts +106 -0
- package/src2/optimizer/dce.ts +133 -0
- package/src2/optimizer/pipeline.ts +44 -0
- package/tsconfig.json +2 -2
- package/src/__tests__/codegen.test.ts +0 -161
- package/src/__tests__/e2e.test.ts +0 -2039
- package/src/__tests__/entity-types.test.ts +0 -236
- package/src/__tests__/lowering.test.ts +0 -1185
- package/src/__tests__/macro.test.ts +0 -343
- package/src/__tests__/nbt.test.ts +0 -58
- package/src/__tests__/optimizer-advanced.test.ts +0 -144
- package/src/__tests__/optimizer.test.ts +0 -162
- package/src/__tests__/runtime.test.ts +0 -305
- package/src/__tests__/stdlib-advanced.test.ts +0 -379
- package/src/__tests__/stdlib-bigint.test.ts +0 -427
- package/src/__tests__/stdlib-math.test.ts +0 -374
- package/src/__tests__/stdlib-vec.test.ts +0 -259
- package/src/__tests__/structure-optimizer.test.ts +0 -38
- package/src/__tests__/var-allocator.test.ts +0 -75
- package/src/codegen/cmdblock/index.ts +0 -63
- package/src/codegen/mcfunction/index.ts +0 -662
- package/src/codegen/structure/index.ts +0 -346
- package/src/codegen/var-allocator.ts +0 -104
- package/src/ir/builder.ts +0 -116
- package/src/ir/types.ts +0 -134
- package/src/lowering/index.ts +0 -3876
- package/src/optimizer/commands.ts +0 -534
- package/src/optimizer/dce.ts +0 -679
- package/src/optimizer/passes.ts +0 -250
- package/src/optimizer/structure.ts +0 -450
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# deploy-demo
|
|
2
|
+
|
|
3
|
+
Compile and deploy the readme demo to the local test server.
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
node dist/cli.js compile examples/readme-demo.mcrs \
|
|
7
|
+
-o ~/mc-test-server/world/datapacks/rsdemo \
|
|
8
|
+
--namespace rsdemo
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Then in-game: `/reload` → `/function rsdemo:start`
|
|
12
|
+
Stand ~10 blocks back, face forward.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# stage-status
|
|
2
|
+
|
|
3
|
+
Show the current state of the refactor pipeline.
|
|
4
|
+
|
|
5
|
+
Check what exists in src2/ (if the refactor branch is active), run tests,
|
|
6
|
+
and summarize which pipeline stages are implemented and passing.
|
|
7
|
+
|
|
8
|
+
```bash
|
|
9
|
+
echo "=== Current branch ===" && git branch --show-current
|
|
10
|
+
echo "=== Test status ===" && npm test -- --passWithNoTests 2>&1 | tail -5
|
|
11
|
+
echo "=== src2 exists? ===" && ls src2/ 2>/dev/null || echo "not started"
|
|
12
|
+
echo "=== Design doc ===" && wc -l docs/compiler-pipeline-redesign.md
|
|
13
|
+
```
|
package/.github/workflows/ci.yml
CHANGED
package/CLAUDE.md
ADDED
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
# RedScript Compiler — Claude Project Context
|
|
2
|
+
|
|
3
|
+
RedScript is a statically-typed programming language that compiles to Minecraft
|
|
4
|
+
Java Edition datapacks (`.mcfunction` files). It targets the MC scoreboard/NBT
|
|
5
|
+
runtime and generates commands that run inside the MC game engine.
|
|
6
|
+
|
|
7
|
+
**npm package:** `redscript-mc` | **VSCode extension:** `redscript-vscode`
|
|
8
|
+
**Docs:** https://redscript-docs.pages.dev | **IDE:** https://redscript-ide.pages.dev
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## Build & Test
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
npm run build # tsc compile
|
|
16
|
+
npm test # jest (920 tests, ~35 s)
|
|
17
|
+
npm run build && npm test # always run together after changes
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
**Tests must be green before any commit.** Current baseline: 920/920.
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## Rules
|
|
25
|
+
|
|
26
|
+
- **`trash` not `rm`** — always use `trash` for deletions (recoverable)
|
|
27
|
+
- **Plain `git commit`** — GPG signing is passwordless, no flags needed
|
|
28
|
+
- **`git pull --rebase` before every push**
|
|
29
|
+
- **Remove Co-Authored-By** from commit messages before pushing
|
|
30
|
+
- **Small, frequent commits** — one logical unit per commit; do not batch
|
|
31
|
+
- **Never include Co-Authored-By** — strip it from every commit message before committing
|
|
32
|
+
- **Good commit granularity examples:**
|
|
33
|
+
- ✅ `feat(mir): add MIRInstr type definitions`
|
|
34
|
+
- ✅ `feat(mir): implement HIR→MIR lowering for if/else → branch`
|
|
35
|
+
- ✅ `feat(mir): implement HIR→MIR lowering for while → loop CFG`
|
|
36
|
+
- ✅ `feat(mir): add MIR verifier`
|
|
37
|
+
- ✅ `test(mir): arithmetic lowering tests`
|
|
38
|
+
- ✅ `test(mir): control-flow CFG shape tests`
|
|
39
|
+
- ❌ `feat(stage3): implement Stage 3 MIR` (too big — splits into at least 4-6 commits)
|
|
40
|
+
- **Lowercase MC function names** — MC rejects uppercase paths
|
|
41
|
+
- **File extension:** `.mcrs`
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Current Architecture (v1.2.x — pre-refactor)
|
|
46
|
+
|
|
47
|
+
```
|
|
48
|
+
src/
|
|
49
|
+
lexer/index.ts Tokenizer
|
|
50
|
+
parser/index.ts Recursive-descent parser → AST
|
|
51
|
+
lowering/index.ts AST → IR ⚠️ 3500 lines, stages 2+3+5 merged
|
|
52
|
+
ir/index.ts IR types (2-address)
|
|
53
|
+
optimizer/
|
|
54
|
+
passes.ts Optimization passes (2-addr IR, regex-based)
|
|
55
|
+
commands.ts Scoreboard command regex patterns
|
|
56
|
+
structure.ts Structural analysis
|
|
57
|
+
codegen/
|
|
58
|
+
mcfunction/index.ts IR → .mcfunction text
|
|
59
|
+
compile.ts Top-level compile() entry point
|
|
60
|
+
cli.ts CLI
|
|
61
|
+
runtime/index.ts MCRuntime simulator (used by tests)
|
|
62
|
+
stdlib/ math.mcrs, vec.mcrs, advanced.mcrs, bigint.mcrs, timer.mcrs
|
|
63
|
+
__tests__/ 920 Jest tests
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
**Key identifiers:**
|
|
67
|
+
- Scoreboard objective default: `` `__${namespace}` `` (avoids multi-datapack collision)
|
|
68
|
+
- Macro sentinel: `\x01` at start of raw IR cmd string → codegen converts to `$`
|
|
69
|
+
- IR variable naming: `$fnname_varname` (function-scoped to avoid cross-fn collision)
|
|
70
|
+
- `LOWERING_OBJ` export in `src/lowering/index.ts`: the current objective name
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## Planned Refactor (next major version)
|
|
75
|
+
|
|
76
|
+
**Full specification:** `docs/compiler-pipeline-redesign.md` (1700+ lines)
|
|
77
|
+
**Optimization ideas:** `docs/optimization-ideas.md` (1076 lines)
|
|
78
|
+
|
|
79
|
+
### 7-stage pipeline
|
|
80
|
+
|
|
81
|
+
```
|
|
82
|
+
Source → [Stage 1] AST → [Stage 2] HIR → [Stage 3] MIR (3-addr CFG)
|
|
83
|
+
→ [Stage 4] MIR optimized → [Stage 5] LIR (MC 2-addr)
|
|
84
|
+
→ [Stage 6] LIR optimized → [Stage 7] .mcfunction
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### Implementation approach
|
|
88
|
+
|
|
89
|
+
- New code goes in `src2/` on branch `refactor/pipeline-v2`
|
|
90
|
+
- `src/` (current compiler) stays untouched until `src2/` passes 920/920
|
|
91
|
+
- Stage by stage: write unit tests for each stage, pass them, then move on
|
|
92
|
+
- 920 e2e tests only all-green at Stage 7 completion — partial pass mid-refactor is normal
|
|
93
|
+
- Adapt if stage boundaries feel wrong; design is a guide, not a contract
|
|
94
|
+
|
|
95
|
+
### MIR/LIR specs are in the design doc
|
|
96
|
+
The exact TypeScript types for `MIRInstr`, `LIRInstr`, `MIRBlock`, etc. are
|
|
97
|
+
fully specified in `docs/compiler-pipeline-redesign.md`. Read it before
|
|
98
|
+
implementing any stage.
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## Language Quick Reference
|
|
103
|
+
|
|
104
|
+
```redscript
|
|
105
|
+
// Types: int, float (×1000 fixed-point), bool, string, void
|
|
106
|
+
// MC types: selector<entity>, selector<player>, BlockPos
|
|
107
|
+
|
|
108
|
+
let x: int = 0;
|
|
109
|
+
const MAX: int = 100;
|
|
110
|
+
fn add(a: int, b: int): int { return a + b; }
|
|
111
|
+
|
|
112
|
+
// Structs (value type — fields are scoreboard slots, no heap, no references)
|
|
113
|
+
struct Vec2 { x: int; y: int; }
|
|
114
|
+
impl Vec2 { fn length_sq(self): int { return self.x * self.x + self.y * self.y; } }
|
|
115
|
+
|
|
116
|
+
// Decorators
|
|
117
|
+
@tick fn _tick() { ... } // runs every MC tick
|
|
118
|
+
@load fn _load() { ... } // runs on /reload
|
|
119
|
+
export fn public_api() { ... } // survives DCE
|
|
120
|
+
|
|
121
|
+
// MC-specific
|
|
122
|
+
foreach (p in @e[tag=foo]) at @s { ... }
|
|
123
|
+
kill(@e[tag=screen]);
|
|
124
|
+
particle("minecraft:end_rod", ^px, ^py, ^5, 0.02, 0.02, 0.02, 0.0, 10);
|
|
125
|
+
|
|
126
|
+
// Macro functions (auto-detected when params appear in ^ coords)
|
|
127
|
+
fn draw_pt(px: float, py: float) {
|
|
128
|
+
particle("minecraft:end_rod", ^px, ^py, ^5, 0.02, 0.02, 0.02, 0.0, 10);
|
|
129
|
+
}
|
|
130
|
+
// Compiles to: function ns:draw_pt with storage rs:macro_args
|
|
131
|
+
|
|
132
|
+
// Math stdlib (fixed-point ×1000)
|
|
133
|
+
let s: int = sin_fixed(45); // = 707 (sin(45°) × 1000)
|
|
134
|
+
let r: int = sqrt_fixed(2000); // = 1414 (√2 × 1000)
|
|
135
|
+
let m: int = mulfix(a, b); // = (a × b) / 1000
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## Known Bugs / Technical Debt
|
|
141
|
+
|
|
142
|
+
- `redscript check` hardcodes `namespace = 'redscript'`; doesn't run TypeChecker
|
|
143
|
+
- TypeChecker is "warn mode" — type errors don't block compilation
|
|
144
|
+
- `watch` mode recompiles all files on any change (no incremental)
|
|
145
|
+
- Timer stdlib is single-instance only (shared fake player names)
|
|
146
|
+
- Optimizer passes use regex on raw command strings — fragile
|
|
147
|
+
- All of the above are addressed in the refactor plan
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## Test Server
|
|
152
|
+
|
|
153
|
+
```bash
|
|
154
|
+
# Server: Paper 1.21.4, port 25561
|
|
155
|
+
cd ~/mc-test-server
|
|
156
|
+
/opt/homebrew/opt/openjdk@21/bin/java -jar paper.jar --nogui
|
|
157
|
+
|
|
158
|
+
# Deploy
|
|
159
|
+
node dist/cli.js compile examples/readme-demo.mcrs \
|
|
160
|
+
-o ~/mc-test-server/world/datapacks/rsdemo --namespace rsdemo
|
|
161
|
+
# then in-game: /reload && /function rsdemo:start
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
---
|
|
165
|
+
|
|
166
|
+
## Useful Files
|
|
167
|
+
|
|
168
|
+
| File | Purpose |
|
|
169
|
+
|---|---|
|
|
170
|
+
| `docs/compiler-pipeline-redesign.md` | Full refactor spec (read this first) |
|
|
171
|
+
| `docs/optimization-ideas.md` | Optimization pass catalogue |
|
|
172
|
+
| `examples/readme-demo.mcrs` | Sine wave particle demo |
|
|
173
|
+
| `examples/math-showcase.mcrs` | Math stdlib showcase |
|
|
174
|
+
| `src/stdlib/math.mcrs` | sin/cos/sqrt/mulfix/divfix |
|
|
175
|
+
| `src/__tests__/` | 920 Jest tests — do not break these |
|
|
176
|
+
| `src/runtime/index.ts` | MCRuntime (scoreboard + NBT simulator) |
|
|
177
|
+
|
|
178
|
+
---
|
|
179
|
+
|
|
180
|
+
## Profiler (planned)
|
|
181
|
+
|
|
182
|
+
`MCRuntime` will gain a profiling mode (`{ profiling: { enabled: true } }`):
|
|
183
|
+
- Per-function command counts
|
|
184
|
+
- Error analysis vs JS float ground truth for math functions
|
|
185
|
+
- Coroutine BATCH auto-calibration
|
|
186
|
+
|
|
187
|
+
See `docs/compiler-pipeline-redesign.md` → "MCRuntime Profiler" section.
|
|
188
|
+
|
|
189
|
+
---
|
|
190
|
+
|
|
191
|
+
## VSCode Extension & npm Package Maintenance
|
|
192
|
+
|
|
193
|
+
### npm package (`redscript-mc`)
|
|
194
|
+
|
|
195
|
+
Claude can maintain fully:
|
|
196
|
+
- Version bumps via `npm version patch/minor/major` in root `package.json`
|
|
197
|
+
- Publishing: push to main → CI handles it automatically
|
|
198
|
+
- The 920 tests verify CLI behavior end-to-end
|
|
199
|
+
|
|
200
|
+
### VSCode extension (`editors/vscode/`)
|
|
201
|
+
|
|
202
|
+
**What Claude can verify automatically:**
|
|
203
|
+
```bash
|
|
204
|
+
cd editors/vscode
|
|
205
|
+
npm run build # esbuild bundle must succeed
|
|
206
|
+
vsce package # .vsix must build without errors
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
Grammar unit tests (if set up with `vscode-tmgrammar-test`):
|
|
210
|
+
```bash
|
|
211
|
+
# Tests that specific source lines tokenize as expected
|
|
212
|
+
# e.g. "fn foo(x: int): int" → keyword.fn, entity.function, etc.
|
|
213
|
+
npm test
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
**What Claude cannot verify:** visual rendering, hover UI, color themes,
|
|
217
|
+
real-time IntelliSense behavior. These require a running VS Code instance.
|
|
218
|
+
|
|
219
|
+
**Division of labor:**
|
|
220
|
+
- Claude: grammar files, manifest, version sync, CI publish, update tokens on syntax changes
|
|
221
|
+
- You: visual check before major releases (`code --install-extension *.vsix`)
|
|
222
|
+
|
|
223
|
+
**When syntax changes (e.g. `->` → `:`, `@keep` → `export`):**
|
|
224
|
+
Claude must update `editors/vscode/syntaxes/redscript.tmLanguage.json`
|
|
225
|
+
to match the new grammar, then rebuild and repackage.
|
|
226
|
+
|
|
227
|
+
**CI publish flow:**
|
|
228
|
+
Push to main → `publish-extension-on-ci.yml` auto-bumps patch version and
|
|
229
|
+
publishes via `VSCE_PAT` secret. Manual minor/major bump: edit
|
|
230
|
+
`editors/vscode/package.json` version directly before pushing.
|
|
231
|
+
|
package/demo.gif
CHANGED
|
Binary file
|