Serveur de langage (Language Server)
Le Serveur de Langage Gram (@gram-lang/language-server) est le cerveau derrière l’intégration de Gram dans vos éditeurs. En implémentant le standard Language Server Protocol (LSP), il déploie des fonctionnalités d’IDE avancées pour les fichiers .gram sur une multitude d’éditeurs (et pas uniquement VS Code).
Architecture
Section intitulée « Architecture »Le serveur agit comme un processus de fond persistant, qui analyse vos fichiers .gram à l’aide des paquets @gram-lang/parser et @gram-lang/kitchen.
Le workflow en temps réel :
-
Éditeur ➔ Dispatche les modifications du fichier à chaque frappe au clavier.
-
Serveur de Langage ➔ Intercepte les diffs et demande au Compilateur Gram de réévaluer l’AST en mémoire.
-
Compilateur Gram ➔ Analyse la nouvelle structure et émet les avertissements, les macros, et les dépendances.
-
Serveur de Langage ➔ Traduit ces données en requêtes LSP standards (Diagnostics, Jetons sémantiques, Inlay Hints) et les renvoie à l’éditeur.
Fonctionnalités LSP supportées
Section intitulée « Fonctionnalités LSP supportées »Le Serveur de Langage Gram couvre les capacités standards suivantes :
| Capacité LSP | Implémentation Gram |
|---|---|
| Diagnostics | Remontée en temps réel des erreurs de syntaxe et de structure (ex : dépendances circulaires). |
| Semantic Tokens | Coloration syntaxique pilotée par l’AST, idéale pour différencier les modificateurs, unités et ingrédients composites. |
| Completion | Autocomplétion intelligente pour les ingrédients, les unités et les variables. |
| Hover | Affiche les macros nutritionnels et les conversions volume-masse au survol de la souris. |
| Go to Definition | Navigue d’une référence intermédiaire directement vers sa déclaration initiale. |
| Find References | Localiser toutes les utilisations d’une variable intermédiaire spécifique. |
| Rename | Renomme de manière sûre et atomique une variable intermédiaire (partout où elle est utilisée). |
| Code Actions | Suggestions de corrections rapides (quick fixes : déclarer une variable manquante, convertir un volume en masse). |
| Document Formatting | Nettoie les espaces, la syntaxe des composites et les en-têtes via @gram-lang/format (13 règles canoniques). |
| Inlay Hints | Affiche les temps de préparation cumulés directement inline dans l’éditeur. |
| Code Lens | Injecte des boutons d’action interactifs (comme le calcul des Macros). |
| Document Symbol | Alimente la vue Plan (Outline) de l’éditeur pour naviguer dans la structure de la recette. |
| Folding Range | Permet de replier proprement le frontmatter YAML et les ## Sections de la recette. |