Bonjour à tous ! La version 1.2.0 de Gram est disponible, et marque une étape importante dans l’évolution de ce projet. Jusqu’ici, les recettes s’écrivaient obligatoirement sous la forme de fichiers uniques et autonomes. Cette mise à jour introduit la modularité grâce à la directive @use, permettant enfin de structurer et de composer des plats à partir de sous-recettes et de préparations de base réutilisables.
Voici un aperçu des nouveautés et du fonctionnement de ces recettes modulaires en pratique.
Recettes modulaires & imports @use
En cuisine comme en pâtisserie, les recettes un peu élaborées s’appuient presque toujours sur des bases récurrentes : pâte sablée, crème pâtissière, levain rafraîchi ou bouillon maison. Plutôt que de recopier ces étapes dans chaque recette, la directive @use permet désormais d’importer directement un fichier .gram externe :
Plutôt qu’un simple collage de texte brut, le compilateur assemble les fichiers dans un graphe de recette cohérent :
- Entrelacement du planning : Les étapes de la base importée s’intercalent directement dans la chronologie globale ALAP (rétro-planning). Les temps de repos et de cuisson d’une pâte s’ajustent naturellement au milieu des autres préparations actives.
- Mise à l’échelle automatique du rendement : Demander une quantité précise (comme
&pâte{250g}pour une pâte qui produit initialement 500 g) recalcule automatiquement toutes les proportions de la base sans avoir à faire le calcul soi-même. - Imports destructurés : Lorsqu’une base produit plusieurs éléments distincts, ils peuvent être extraits séparément :
@use "./bases/elements-tarte.gram" as { &pâte, &frangipane }. Chaque élément est alors dimensionné selon son propre rendement. - Chemins absolus et alias : En plus des chemins relatifs classiques (
./,../), il est possible d’importer directement depuis la racine du projet (@/bases/...) ou de déclarer des raccourcis dans la sectionpaths:du fichier.gram/config.yaml. - Mode Stock (
--stock) : Si une préparation est déjà disponible au réfrigérateur ou achetée toute faite, l’option--stock @bases/pate-sablee.grammasque ses étapes dans le planning pour ne pas encombrer le déroulé, tout en conservant ses ingrédients et valeurs nutritionnelles réelles dans les totaux de la recette. - Anticipation et rétro-planning : Si une préparation doit démarrer en avance (un levain à rafraîchir ou une pâte à laisser reposer deux jours), le décalage peut s’écrire directement sur la ligne d’import :
@use "./bases/levain.gram" as &levain ~{-2d}.
Intégration dans VS Code & le serveur de langage
L’extension VS Code et le Language Server gèrent désormais les imports @use en temps réel :
- Aperçu et chronologie en direct : L’aperçu dans l’éditeur et le diagramme de Gantt résolvent les imports à la volée. Les étapes importées et les quantités ajustées apparaissent instantanément dans le rendu.
- Aller à la définition (Go to Definition) : Cliquer sur une variable importée (
&pâte) ouvre directement le fichier source à l’endroit précis où elle est préparée. - Autocomplétion des chemins : Taper
@use "suggère automatiquement les dossiers, les alias configurés et les fichiers.gramdisponibles. - Correction rapide : Si vous tentez d’importer une variable qui n’a pas été déclarée avec une clause d’export (
-> &), l’éditeur propose une action rapide pour l’ajouter automatiquement dans le fichier source.
À tester directement dans le Playground
Le Playground en ligne a lui aussi été mis à jour pour prendre en charge les recettes multi-fichiers :
- Vous pouvez désormais éditer plusieurs fichiers
.gramcôte à côte grâce à un système d’onglets, et visualiser en temps réel la résolution des imports@useet du diagramme de Gantt directement dans votre navigateur, sans rien installer. - Un exemple complet multi-fichiers (Tarte au Citron) est disponible dans le sélecteur d’exemples pour découvrir concrètement l’agencement des imports, de la mise à l’échelle et de la chronologie.
- N’hésitez pas à créer vos propres onglets pour tester vos bases et sous-recettes !
Vérification des mises à jour & commande gram upgrade
- Notification discrète : La CLI vérifie désormais la présence d’une nouvelle version sur npm en arrière-plan et affiche un message informatif en fin d’exécution (désactivé dans les environnements non-interactifs et en CI). Vous pouvez désactiver ce comportement dans votre configuration via
updateCheck: falseou avec la variable d’environnementGRAM_NO_UPDATE_CHECK=1. - Mise à niveau simplifiée : La nouvelle commande
gram upgradepermet de vérifier et d’installer directement la dernière version de Gram.
Console de diagnostic & améliorations du Playground
- Console de débogage unifiée : Le playground intègre un panneau rétractable en bas de page regroupant tous les retours du compilateur, avec des filtres (Erreurs, Avertissements, Remarques) et la possibilité de cliquer sur un message pour naviguer vers la ligne concernée.
- Adaptation mobile : Une navigation par onglets (
[Éditeur]/[Aperçu]) et une barre d’outils condensée rendent le playground plus confortable sur smartphone. - Clarification des messages : Les avertissements ont été retravaillés pour fournir des indications culinaires concrètes. Les signalements purement informatifs (valeurs macro manquantes dans la base, contention de matériel) passent en statut informatif pour ne pas alourdir le compteur d’alertes.
Autres correctifs & ajustements
- Conflits de noms sur les ingrédients composites : Le compilateur et
gram db syncpréviennent désormais si un même sous-ingrédient générique (ex.@jus<@citron) est rattaché à des ingrédients parents différents dans une même recette ou entre plusieurs recettes. - Mise à l’échelle des alternatives et parents : La commande
gram scaleajuste désormais fidèlement les alternatives (@beurre|@margarine) ainsi que les quantités de référence des ingrédients parents composites. - Totaux nutritionnels complets : La masse des intermédiaires injectés (
-> &) est maintenant bien prise en compte dans le calcul du poids total et des macronutriments de la recette. - Détection des cycles par section : Suppression d’une fausse alerte de référence circulaire qui pouvait survenir lorsque deux sections distinctes utilisaient des pourcentages relatifs sur des ingrédients portant le même nom.
Pour retrouver le détail de tous les changements techniques, n’hésitez pas à consulter le Changelog. Comme toujours, vos retours et suggestions sont les bienvenus !