compiler/.claude/skills/compiler-port/SKILL.md MARKDOWN 102 lines View on github.com → Search inside
1---2name: compiler-port3description: Port a compiler pass from TypeScript to Rust. Gathers context, plans the port, implements in a subagent with test-fix loop, then reviews.4---56# Port Compiler Pass78Port a compiler pass from TypeScript to Rust end-to-end.910Arguments:11- $ARGUMENTS: Pass name exactly as it appears in Pipeline.ts log entries (e.g., `PruneMaybeThrows`, `SSA`, `ConstantPropagation`)1213## Step 0: Validate pass name14151. Read `compiler/packages/babel-plugin-react-compiler/src/Entrypoint/Pipeline.ts`162. Search for `name: '$ARGUMENTS'` in log entries173. If not found, list all available pass names from the `log({...name: '...'})` calls and stop184. Check the `kind` field of the matching log entry:19   - If `kind: 'ast'`, report that test-rust-port only supports `hir` and `reactive` kind passes currently and stop20   - If `kind: 'hir'` or `kind: 'reactive'`, proceed2122## Step 1: Determine TS source files and Rust crate23241. Follow the import in Pipeline.ts to find the actual TypeScript file(s) for the pass252. Map the TS folder to a Rust crate using this mapping:2627| TypeScript Path | Rust Crate |28|---|---|29| `src/HIR/` (excluding `BuildHIR.ts`, `HIRBuilder.ts`) | `react_compiler_hir` |30| `src/HIR/BuildHIR.ts`, `src/HIR/HIRBuilder.ts` | `react_compiler_lowering` |31| `src/Babel/`, `src/Entrypoint/` | `react_compiler` |32| `src/CompilerError.ts` | `react_compiler_diagnostics` |33| `src/ReactiveScopes/` | `react_compiler_reactive_scopes` |34| `src/<Name>/` | `react_compiler_<name>` (1:1, e.g., `src/Optimization/` -> `react_compiler_optimization`) |35363. Check if the pass is already ported:37   - Check if the corresponding Rust file exists in the target crate38   - Check if `compiler/crates/react_compiler/src/entrypoint/pipeline.rs` already calls it39   - If both are true, report the pass is already ported and stop4041## Step 2: Gather context4243Read the following files (all reads happen in main context):44451. **Architecture guide**: `compiler/docs/rust-port/rust-port-architecture.md`462. **Pass documentation**: Check `compiler/packages/babel-plugin-react-compiler/docs/passes/` for docs about this pass473. **TypeScript source**: All TypeScript source files for the pass + any helpers imported from the same folder484. **Rust pipeline**: `compiler/crates/react_compiler/src/entrypoint/pipeline.rs`495. **Rust HIR types**: Key type files in `compiler/crates/react_compiler_hir/src/` (especially `hir.rs`, `environment.rs`)506. **Rust reactive types**: For reactive passes, also read `compiler/crates/react_compiler_hir/src/reactive_function.rs`517. **Target crate**: If the target crate already exists, read its `Cargo.toml`, `src/lib.rs`, and existing files to understand the current structure5253## Step 3: Create implementation plan5455Based on the gathered context, create and present a plan covering:56571. **New types needed**: Any Rust types that need to be added or modified582. **Files to create**: List of new Rust files with their TS counterparts593. **Crate setup**: Whether a new crate is needed or adding to an existing one604. **Pipeline wiring**: How the pass will be called from `pipeline.rs`615. **Key translation decisions**: Any non-obvious TS-to-Rust translations6263Present the plan to the user, then proceed to implementation.6465## Step 4: Implementation6667Launch the `port-pass` agent with all gathered context:6869- Pass name: `$ARGUMENTS`70- TypeScript source file content(s)71- Target Rust crate name and path72- Pipeline wiring details73- Implementation plan from Step 374- Architecture guide content75- Current pipeline.rs content76- Existing crate structure (if any)7778The agent will:791. Port the TypeScript code to Rust802. Create or update the crate as needed813. Wire the pass into pipeline.rs824. Run the test-fix loop until 0 failures (see agent prompt for details)8384## Step 5: Review loop85861. Run `/compiler-review` on the changes872. If issues are found:88   - Launch the `port-pass` agent again with:89     - The review findings90     - Instruction to fix the issues91     - Instruction to re-run `bash compiler/scripts/test-rust-port.sh` (no args, auto-detects last ported pass) to confirm 0 failures still hold92   - After the agent completes, run `/compiler-review` again933. Repeat until review is clean9495## Step 6: Final report9697Report to the user:98- Files created and modified99- Test results (pass count)100- Review status101- Do NOT auto-commit (user should review and commit manually, or use `/compiler-commit`)

Findings

✓ No findings reported for this file.

Get this view in your editor

Same data, no extra tab — call code_get_file + code_get_findings over MCP from Claude/Cursor/Copilot.