Menu

La CLI Zero : check, run, build, test, fix et explain

Un tour de l'outil en ligne de commande zero : les sous-commandes que vous utiliserez au quotidien, ce que chacune produit, et comment le drapeau --json transforme chaque commande en un flux lisible par les agents.

Ce que la CLI vous offre

Le binaire zero constitue toute la chaîne d'outils de développement. Il n'y a pas de gestionnaire de paquets, de formateur, de linter ou de lanceur de tests séparé — ce sont toutes des sous-commandes de zero. Ça garde la surface petite et prévisible, ce qui est précisément l'objectif.

Un petit menu des commandes que vous toucherez le plus :

CommandeCe qu'elle fait
zero checkVérifie les types du code source sans produire d'exécutable.
zero runCompile et exécute en une étape.
zero buildCompile vers un exécutable natif.
zero testLance les cibles de test d'un package.
zero fixApplique ou prévisualise des plans de réparation structurés.
zero explainConsulte l'explication en prose d'un code de diagnostic.
zero newÉchafaude un nouveau package.
zero --versionAffiche la version de la chaîne d'outils.

Chacune d'elles accepte --json pour émettre une sortie lisible par machine au lieu d'un texte formaté pour les humains.

zero check

Le cheval de bataille. zero check exécute les vérifications statiques du compilateur — parsing, vérification des types, inférence des capacités et effets, détection des imports manquants — et s'arrête avant la génération de code. C'est rapide, ce qui compte parce que les agents et les éditeurs l'appellent en permanence.

zero check hello.0

Une sortie propre (rien d'affiché, code de sortie 0) signifie que le fichier est bien formé. Les erreurs sortent en texte lisible par défaut. Ajoutez --json et vous obtenez la forme structurée que les agents consomment :

zero check hello.0 --json
{
    "ok": false,
    "diagnostics": [
        {
            "code": "NAM003",
            "message": "unknown identifier",
            "line": 3,
            "repair": { "id": "declare-missing-symbol" }
        }
    ]
}

La forme du diagnostic est entièrement documentée dans Diagnostics JSON. Remarquez le champ code stable — NAM003 signifie toujours « identifiant inconnu », quelle que soit la version du compilateur.

Vous pouvez aussi pointer check sur un dossier de package plutôt que sur un seul fichier :

zero check ./mon-package

Il lit zero.json, parcourt l'arborescence des sources et signale chaque problème sur chaque cible.

zero run

run compile et exécute en une étape. Idéal quand vous itérez sur un petit programme et que vous ne tenez pas à produire un binaire sur disque.

zero run hello.0

Équivaut à exécuter zero build puis à invoquer le binaire produit, sauf que l'artefact est jeté. La sortie standard de votre programme est redirigée vers le stdout de votre terminal — les appels world.out.write de votre programme atterrissent à l'écran.

Si votre programme attend des arguments, passez-les après un -- :

zero run greet.0 -- Alice

Le runtime donne au programme accès à ces arguments via la même capacité World qui expose les E/S.

zero build

Quand vous voulez un artefact, utilisez build :

zero build hello.0

Le compilateur produit un exécutable natif à côté de votre fichier source (ou sous le dossier de build du package si vous travaillez dans un package). Vous pouvez le lancer comme n'importe quel autre programme — pas de runtime séparé nécessaire, parce que les binaires Zero sont autonomes.

Les binaires Zero sont petits. L'objectif de conception du projet est des exécutables de moins de 10 Ko pour des programmes triviaux, obtenus en sautant la chaîne d'outils LLVM et en émettant directement des chemins de code compacts.

zero test

Lance les cibles de test d'un package :

zero test

Les tests vivent à côté du code source sous src/, déclarés comme des cibles de test dans le zero.json du package. Le lanceur les découvre, exécute chacun et émet pass/fail. Avec --json, la sortie est structurée par test — nom, statut, durée, diagnostics capturés — pour les agents et les outils de CI.

Packages Zero couvre la façon de déclarer des cibles de test dans zero.json.

zero fix

fix consomme les métadonnées de réparation que check --json produit. Il existe en deux modes :

zero fix --plan --json   # affiche le plan structuré, n'applique pas
zero fix                 # applique le plan sur place

Un plan ressemble à quelque chose comme ça (la forme est illustrative) :

{
    "diagnostic": { "code": "NAM003", "line": 3 },
    "plan": {
        "id": "declare-missing-symbol",
        "edits": [
            { "kind": "insert", "line": 1, "text": "fun answer() -> i32 { return 42 }\n" }
        ]
    }
}

L'idée, c'est qu'un agent récupère le plan, décide s'il lui fait confiance, et soit l'applique directement, soit le confie à une étape de raisonnement de plus haut niveau. Les plans sont des données ; les agents n'ont pas à interpréter de la prose pour agir.

zero explain

explain est le versant prose du système de diagnostics :

zero explain NAM003

Il affiche une explication lisible par un humain du code d'erreur — ce qu'il signifie, pourquoi le compilateur l'émet, à quoi ressemblent les corrections typiques. Utile quand :

  • Un humain débogue et veut une réponse plus longue que le message inline.
  • Un agent tombe sur un code de diagnostic absent de ses données d'entraînement et veut plus de contexte.

Le code lui-même est stable d'une version à l'autre du compilateur, donc les explications mises en cache restent valides.

zero new

Échafaude un nouveau package :

zero new cli hello

Ça crée un dossier hello/ avec un manifeste zero.json et un src/main.0 de départ. Le premier argument (cli ici) choisit un template — une appli en ligne de commande exécutable dans ce cas. Packages Zero explique l'arborescence en détail.

L'habitude --json

Presque toutes les commandes supportent --json. Si vous construisez de l'outillage, un harness d'agent ou un pipeline de CI autour de Zero, prenez l'habitude de la forme JSON par défaut. Elle est :

  • Stable. Le schéma est versionné et l'équipe le traite comme un contrat.
  • Complète. Vous obtenez des champs qui ne sont pas dans la sortie pour humains (étendues précises, identifiants de plans de réparation, données du graphe de dépendances).
  • Parseable. Pas de regex sur de la prose anglaise pour extraire un numéro de ligne.

Pour les humains, laissez --json de côté — le texte formaté est ce que vous voulez dans un terminal.

Autres commandes utiles

Quelques commandes moins fréquentes qu'il vaut le coup de connaître :

  • zero graph --json — émet le graphe de dépendances d'un package sous forme de données structurées. Utile pour comprendre ce qui dépend de quoi, et pour les agents qui veulent raisonner sur les sites d'appel.
  • zero size --json — rapporte la taille sur disque des artefacts compilés, ventilée par cible. Pratique quand l'empreinte binaire vous importe (ce qui est un objectif de conception de Zero).
  • zero --version — affiche la version de la chaîne d'outils. Épinglez-la quelque part si vous travaillez en équipe — Zero est pré-1.0 et des changements cassants atterrissent.

La suite : packages Zero

Un seul fichier .0 convient pour hello-world. Les vrais projets utilisent des packages avec un manifeste zero.json et un dossier src/. Packages Zero montre comment en échafauder un et explique chaque champ.

Questions fréquentes

Quelles sont les principales commandes de la CLI Zero ?

Les commandes principales sont zero check (vérification de types d'un fichier ou d'un package), zero run (compile et exécute), zero build (compile vers un exécutable), zero test (lance les tests), zero fix (applique les réparations proposées) et zero explain (consulte un code de diagnostic). Chacune accepte un drapeau --json pour une sortie lisible par machine.

Que fait zero check ?

zero check <fichier-ou-package> exécute les vérifications statiques du compilateur — parsing, vérification des types, analyse des capacités et effets — sans produire d'exécutable. C'est la façon la plus rapide de savoir si votre code est bien formé. Avec --json, il émet des diagnostics structurés consommables par les agents.

Quelle est la différence entre zero run et zero build ?

zero run <fichier> compile et exécute le programme en une étape, comme go run ou cargo run. zero build compile le programme et s'arrête, en laissant un binaire natif que vous pouvez livrer ou invoquer plus tard. Utilisez run pendant l'itération ; utilisez build quand vous voulez un artefact.

Comment fonctionne zero fix --plan ?

Quand zero check --json rapporte un diagnostic avec un champ repair, zero fix --plan --json renvoie le plan structuré qu'un agent peut appliquer pour le résoudre. Le plan est de la donnée — des opérations d'édition sur la source — pas des instructions en anglais. Un agent peut choisir de l'appliquer ou de le rejeter de manière programmatique.

Que fait zero explain ?

zero explain <code> consulte l'explication lisible par un humain pour un code de diagnostic stable comme NAM003. C'est le pendant en prose du diagnostic JSON — utile quand un humain débogue, et un moyen pour un agent de récupérer du contexte quand il ne reconnaît pas le code depuis son entraînement.

Coddy programming languages illustration

Apprendre à coder avec Coddy

COMMENCER