REPL interactive
La REPL exécute du Catnip dans un contexte persistant : les variables, pragmas et modules restent disponibles entre deux entrées.
Lecture, évaluation, affichage. Le runtime répond avant que la question ne devienne un fichier.
Lancement
catnip
catnip repl
catnip-repl
Les trois formes ouvrent la REPL Rust par défaut. Une sortie normale retourne 0 ; une interruption par Ctrl+C au
prompt vide retourne 130.
▸ x = 10
▸ x * 2
20
Le mode pipe n'ouvre pas la REPL :
echo "2 + 3" | catnip
# ⇒ 5
Commandes
Les commandes commencent par / :
| Commande | Description |
|---|---|
/help |
Afficher l'aide |
/exit, /quit |
Quitter |
/clear |
Effacer la sortie |
/history |
Afficher l'historique |
/load FILE |
Charger un fichier .cat |
/context [VAR] |
Inspecter les variables utilisateur |
/stats |
Afficher les statistiques d'exécution |
/jit |
Activer ou désactiver le JIT |
/verbose |
Activer ou désactiver le mode verbeux |
/debug |
Activer ou désactiver le mode debug |
/time EXPR |
Mesurer une expression |
/config |
Ouvrir l'éditeur de configuration |
/version |
Afficher la version |
exit() n'est pas une fonction du langage. Utiliser /exit, /quit ou Ctrl+D. Pour terminer un programme depuis le
code, charger sys puis appeler sys.exit(code).
Éditeur de configuration (/config)
/config ouvre un overlay interactif. Les groupes n'ont pas tous la même durée de vie :
| Groupe | Exemples de clés | Persistance |
|---|---|---|
| execution | executor, optimize, tco, jit |
catnip.toml |
| display | no_color, theme |
catnip.toml |
| cache | enable_cache, taille, TTL |
catnip.toml |
| debug | rapports internes, limite mémoire | catnip.toml |
| format | indentation, longueur de ligne | catnip.toml |
| repl | temps de parsing, debug, taille d'historique | session |
Chaque valeur affiche sa source : default, file, env, cli ou session. Un * signale une valeur différente du
défaut.
Navigation principale :
| Touche | Action |
|---|---|
Up/Down ou k/j |
Changer de clé |
| Tab / Shift+Tab | Changer de groupe |
| Enter / Space | Basculer, cycler ou éditer |
r |
Revenir au défaut |
? |
Afficher l'aide |
Esc, q ou Ctrl+C |
Fermer l'éditeur |
Les commandes textuelles restent disponibles :
/config show
/config get KEY
/config set KEY VALUE
/config path
La référence des clés et de leur précédence est dans CONFIG.
Raccourcis
REPL Rust
| Raccourci | Action |
|---|---|
| Ctrl+D | Quitter sur une ligne vide |
| Ctrl+C | Interrompre l'exécution ou annuler la saisie |
| Ctrl+R | Rechercher dans l'historique |
| Up/Down | Parcourir l'historique |
| Ctrl+A / Home | Aller au début de la ligne |
| Ctrl+E / End | Aller à la fin de la ligne |
| Ctrl+U | Effacer la ligne |
| Ctrl+W | Effacer le mot précédent |
| Ctrl+Left/Right | Se déplacer par mot |
| Ctrl+L | Effacer l'écran |
| Tab | Ouvrir ou accepter la complétion |
| Right | Accepter le ghost text |
| Escape | Fermer le popup de complétion |
Pendant une exécution, Ctrl+C demande l'interruption à la VM. Au prompt, il annule la ligne courante ; sur une ligne vide, il quitte.
REPL Python
| Raccourci | Action |
|---|---|
| Ctrl+D | Quitter sur une ligne vide |
| Ctrl+C | Annuler la saisie ou quitter sur une ligne vide |
Cette REPL minimale n'expose ni popup de complétion ni recherche historique avancée.
Complétion et ghost text
Dans la REPL Rust, Tab ouvre une liste contextuelle :
- variables du contexte ;
- mots-clés ;
- builtins ;
- commandes
/...; - attributs et méthodes après un point.
Après io., la REPL inspecte le module. Après une instance de struct, elle propose ses champs et méthodes. Si la
variable n'est pas connue, elle propose les méthodes usuelles de str, list et dict.
Tab et Down sélectionnent l'entrée suivante ; Shift+Tab et Up sélectionnent la précédente.
Le ghost text complète directement la ligne :
- paramètres restants d'un appel ;
- structure d'un mot-clé ;
- fin d'un identifiant et sa signature.
La flèche droite l'accepte. Tab ouvre le popup et le masque ; Escape ferme le popup.
Historique
L'historique est stocké dans :
$XDG_STATE_HOME/catnip/repl_history
Sans XDG_STATE_HOME, le chemin est ~/.local/state/catnip/repl_history. Si aucun dossier personnel n'est
déterminable, l'historique reste en mémoire pour la session : la REPL fonctionne, mais n'écrit pas dans le répertoire
depuis lequel elle a été lancée.
Ctrl+R ouvre la recherche inverse. Saisir filtre les entrées ; Ctrl+R passe au résultat suivant, Enter l'accepte et Escape annule.
Expressions multilignes
La REPL continue la saisie quand elle détecte :
- un délimiteur non fermé ;
- un opérateur en fin de ligne ;
- une structure de contrôle incomplète.
Elle indente selon les accolades, parenthèses et crochets ouverts :
▸ double = (value) => {
value * 2
}
▸ double(21)
42
Inspection du contexte
/context affiche les variables utilisateur avec leur type et une valeur tronquée. /context NAME affiche une valeur
complète :
▸ x = 42
▸ name = "Alice"
▸ /context
name str 'Alice'
x int 42
▸ /context x
x: int = 42
Les builtins et les noms internes préfixés par _ sont exclus.
Pragmas
Les pragmas persistent entre les évaluations :
▸ pragma("jit", True)
▸ pragma("tco", False)
La précédence est : CLI, puis état de la REPL, puis valeurs par défaut.
Résultats
La REPL affiche le résultat de chaque expression. None ne produit aucune ligne :
▸ 42
42
▸ x = 10
10
▸ while (False) { 1 }
▸
En mode verbose, None reste visible dans l'étape RESULT.
Choix de la REPL
La CLI choisit la REPL selon la présence de modules Python :
| Invocation | REPL utilisée | Propriété principale |
|---|---|---|
catnip |
Rust | TUI, complétion, ghost text, historique |
catnip -m math |
Python | Namespace Python chargé |
catnip -m math -m numpy |
Python | Plusieurs namespaces Python |
La présence de -m ou --module sélectionne donc la REPL Python. Les règles de chargement sont dans
MODULE_LOADING.
Erreurs
Une erreur affiche la position source et la chaîne d'appels :
▸ f = (x) => { x / 0 }
▸ f(42)
File '<repl>', line 2, column 6: division by zero
2 | f(42)
| ^
CatnipRuntimeError: division by zero
La session reste ouverte et les variables définies avant l'erreur restent disponibles.
Coloration syntaxique
La REPL Rust utilise tree-sitter pour coloriser mots-clés, constantes, nombres, chaînes, commentaires, opérateurs, builtins et ponctuation pendant la saisie. Les nœuds incomplets restent parcourus afin de conserver la coloration avant la fermeture d'un bloc.