Aller au contenu

Formater ce que l'agent écrit

Déclarer une commande de formatage pour le terminal, et savoir ce que l'agent apprend du fichier juste après l'avoir écrit.

Après avoir écrit un fichier, l’agent le relit : il reçoit le fichier tel qu’il est sur le disque après formatage, et les erreurs que l’environnement signale sur ce fichier. Cette page décrit ce qu’il apprend, et ce que vous déclarez pour que le formatage ait lieu au terminal.

Dans cet ordre :

  1. Le fichier est formaté. Dans l’IDE, votre éditeur s’en charge, avec le formatage que vous avez réglé pour l’enregistrement. Au terminal, il n’y a pas d’éditeur : c’est la commande que vous déclarez plus bas.
  2. Les erreurs du fichier sont relues : celles de ce fichier, et d’aucun autre.
  3. L’agent reçoit l’état réel du fichier : la différence qu’on lui montre est celle du fichier tel qu’il est sur le disque, et si le formatage l’a changé, il en est informé.

Sans le troisième point, l’agent enchaîne sur une modification fondée sur le texte qu’il croit avoir écrit, ne retrouve pas la ligne qu’il cherche, et rend une erreur.

Dans le fichier de réglages de votre poste, ~/.lemniscate/workstation.yaml :

formatter:
- command: prettier --write $FILE
extensions: [".ts", ".tsx", ".js", ".json", ".md"]
- command: black $FILE
extensions: [".py"]
  • $FILE est remplacé par le fichier à formater. Sans ce marqueur, le fichier est ajouté à la fin de la commande.
  • Les extensions se lisent avec leur point. La première déclaration qui réclame une extension l’emporte.
  • Sans déclaration, rien ne se passe : le produit n’embarque aucun formateur et n’en installe aucun.
  • La déclaration nomme la commande. Ce qu’elle a le droit de faire est décidé par la politique du projet, décrite ci-dessous.

La commande de formatage et la politique du projet

Section intitulée « La commande de formatage et la politique du projet »

Un formateur est une commande lancée après chaque écriture. Elle passe par la politique de commandes du projet, comme toute autre commande : elle s’exécute sans validation lorsque l’administrateur l’a rangée parmi les commandes libres, où le formatage figure avec la compilation, les tests et l’analyse (livre blanc sécurité V3, section 5.1). Par défaut, aucune commande n’est libre. Quand la politique ne laisse pas passer la commande, le formatage n’a pas lieu et l’agent en reçoit la raison ; voir Quand le formatage n’a pas lieu.

Un fichier .lemniscate/project.yaml qui porte cette déclaration est ignoré sur ce point, et le produit nomme le réglage écarté. Un contenu lu dans le dépôt ne décide pas de ce qui s’exécute (livre blanc sécurité V3, section 5.2).

Le formateur lit ses propres réglages dans le dépôt : fichier de configuration, manifeste qui fixe sa version, hook qui le lance à l’enregistrement d’un commit. Ces fichiers sont exécutés ou lus plus tard par d’autres que la session : l’intégration continue, les postes de vos collègues. Ils relèvent des classes de fichiers sous contrôle dédié, que la politique du projet définit. Leur modification par l’agent est interdite par défaut, ou soumise à une validation distincte de la validation ordinaire d’une différence et signalée comme telle (livre blanc sécurité V3, section 5.3).

Dans VS Code, les erreurs sont celles que votre environnement de développement connaît : celles que vous voyez soulignées dans votre code. L’agent reçoit seulement celles du fichier qu’il vient d’écrire ; un projet réel en contient des centaines d’autres, qui ne le concernent pas.

Un fichier sans erreur ne produit aucune ligne. Le silence veut dire « rien à signaler ».

Dans JetBrains, aucune erreur n’est relue : l’hôte répond sur le fichier sélectionné à l’écran et non sur le fichier demandé, et le produit préfère ne rien dire plutôt que de rapporter les erreurs d’un autre fichier.

Au terminal, il n’y a pas d’erreurs. Le terminal n’a aucun moyen de les connaître, et il ne prétend pas qu’il n’y en a pas.

Votre écriture tient. Le formatage est un service par-dessus ; s’il échoue, il ne défait rien, et l’agent reçoit la raison :

Ce que vous lisezCe qu’il faut faire
la commande est introuvableinstaller le formateur, ou corriger son nom dans vos réglages
la commande s’est arrêtée sur sa borneelle est trop lente pour un formatage automatique ; la restreindre à moins d’extensions
la commande a rendu un code de sortie non nulla première ligne de sa sortie est reprise dans le message ; corriger la commande ou le fichier
la politique ne laisse pas passer la commandela règle est nommée dans le message ; c’est à votre administrateur de trancher
aucun espace d’exécution n’a pu être ouvertle terminal lance cette commande dans son espace confiné, comme toutes les autres ; le message dit ce qui manque sur le poste

Le formatage du terminal s’exécute dans le bac à sable de la session, sans réseau, comme toute commande lancée par l’agent. Le formateur doit donc s’y trouver déjà installé ; voir Préparer le conteneur de session.