Port Compiler Pass
Porter un compiler pass de TypeScript à Rust end-to-end.
Arguments :
- $ARGUMENTS : Nom du pass exactement comme il apparaît dans les logs de Pipeline.ts (ex.
PruneMaybeThrows,SSA,ConstantPropagation)
Step 0: Valider le nom du pass
- Lire
compiler/packages/babel-plugin-react-compiler/src/Entrypoint/Pipeline.ts - Chercher
name: '$ARGUMENTS'dans les logs - Si non trouvé, lister tous les noms de pass disponibles depuis les appels
log({...name: '...'})et s'arrêter - Vérifier le champ
kindde l'entrée log correspondante :- Si
kind: 'ast', signaler que test-rust-port supporte uniquement les passes de typehiretreactivepour l'instant et s'arrêter - Si
kind: 'hir'oukind: 'reactive', procéder
- Si
Step 1: Déterminer les fichiers sources TS et la crate Rust
- Suivre l'import dans Pipeline.ts pour trouver le(s) fichier(s) TypeScript du pass
- Mapper le dossier TS à une crate Rust en utilisant ce tableau :
| Chemin TypeScript | Crate Rust |
|---|---|
src/HIR/ (excluant BuildHIR.ts, HIRBuilder.ts) |
react_compiler_hir |
src/HIR/BuildHIR.ts, src/HIR/HIRBuilder.ts |
react_compiler_lowering |
src/Babel/, src/Entrypoint/ |
react_compiler |
src/CompilerError.ts |
react_compiler_diagnostics |
src/ReactiveScopes/ |
react_compiler_reactive_scopes |
src/<Name>/ |
react_compiler_<name> (1:1, ex. src/Optimization/ -> react_compiler_optimization) |
- Vérifier si le pass est déjà porté :
- Vérifier que le fichier Rust correspondant existe dans la crate cible
- Vérifier que
compiler/crates/react_compiler/src/entrypoint/pipeline.rsl'appelle déjà - Si les deux sont vrais, signaler que le pass est déjà porté et s'arrêter
Step 2: Rassembler le contexte
Lire les fichiers suivants (toutes les lectures se font dans le contexte principal) :
- Guide d'architecture :
compiler/docs/rust-port/rust-port-architecture.md - Documentation du pass : Vérifier
compiler/packages/babel-plugin-react-compiler/docs/passes/pour la documentation sur ce pass - Source TypeScript : Tous les fichiers sources TypeScript du pass + tout helper importé depuis le même dossier
- Pipeline Rust :
compiler/crates/react_compiler/src/entrypoint/pipeline.rs - Types HIR Rust : Fichiers de types clés dans
compiler/crates/react_compiler_hir/src/(notammenthir.rs,environment.rs) - Types reactive Rust : Pour les passes reactive, lire aussi
compiler/crates/react_compiler_hir/src/reactive_function.rs - Crate cible : Si la crate cible existe déjà, lire son
Cargo.toml,src/lib.rs, et les fichiers existants pour comprendre la structure courante
Step 3: Créer un plan d'implémentation
En fonction du contexte rassemblé, créer et présenter un plan couvrant :
- Nouveaux types nécessaires : Tous les types Rust qui doivent être ajoutés ou modifiés
- Fichiers à créer : Liste des nouveaux fichiers Rust avec leurs homologues TS
- Configuration de la crate : Faut-il une nouvelle crate ou ajouter à une existante
- Câblage du pipeline : Comment le pass sera appelé depuis
pipeline.rs - Décisions de traduction clés : Toute traduction TS-to-Rust non évidente
Présenter le plan à l'utilisateur, puis procéder à l'implémentation.
Step 4: Implémentation
Lancer l'agent port-pass avec tout le contexte rassemblé :
- Nom du pass :
$ARGUMENTS - Contenu du(des) fichier(s) source TypeScript
- Nom et chemin de la crate Rust cible
- Détails du câblage du pipeline
- Plan d'implémentation de Step 3
- Contenu du guide d'architecture
- Contenu courant de pipeline.rs
- Structure de crate existante (si applicable)
L'agent va :
- Porter le code TypeScript à Rust
- Créer ou mettre à jour la crate selon les besoins
- Câbler le pass dans pipeline.rs
- Exécuter la boucle test-fix jusqu'à 0 échecs (voir le prompt de l'agent pour les détails)
Step 5: Boucle de révision
- Exécuter
/compiler-reviewsur les changements - Si des problèmes sont trouvés :
- Lancer l'agent
port-passà nouveau avec :- Les résultats de la révision
- Instruction de corriger les problèmes
- Instruction de re-exécuter
bash compiler/scripts/test-rust-port.sh(sans arguments, auto-détecte le dernier pass porté) pour confirmer que 0 échecs sont maintenus
- Après que l'agent finisse, exécuter
/compiler-reviewà nouveau
- Lancer l'agent
- Répéter jusqu'à révision clean
Step 6: Rapport final
Signaler à l'utilisateur :
- Fichiers créés et modifiés
- Résultats des tests (nombre de passes)
- Statut de la révision
- NE PAS auto-commiter (l'utilisateur doit réviser et commiter manuellement, ou utiliser
/compiler-commit)