Sira — support VSCode
Coloration, complétion, diagnostics et formatage pour les mini-backends Sira.
Principe
L'extension possède la surface éditeur, et rien d'autre. Le parsing, le formatage et le catalogue des builtins viennent du binaire sira — il y a donc une seule implémentation de chacun, et elle ne peut pas diverger du langage.
La version précédente embarquait son propre parseur et sa propre liste de builtins en TypeScript. Les deux avaient dérivé : quatorze fonctions date.* existaient sans jamais être proposées.
| Fonction |
Source |
| Diagnostics |
sira check -json |
| Formatage |
sira fmt -stdin |
| Complétion, survol, signatures |
sira builtins -json + une table de documentation |
| Coloration |
sira builtins -json, via npm run grammar |
Complétion du contrat input() |
le littéral lui-même, lu dans le tampon |
| Plan du document |
lecture directe du tampon |
| Aller à la définition |
lecture directe du tampon |
La grammaire portait la dernière liste écrite à la main. Elle avait dérivé de la même façon : problem n'était jamais coloré, et event l'était bien qu'aucun espace de noms de ce nom n'existe. npm run grammar la réécrit depuis le catalogue, et npm test échoue si elle s'en écarte.
Le contrat d'entrée
Un input() est un schéma écrit trois lignes plus haut, et c'est le seul que l'éditeur puisse connaître sans rien exécuter. Il sert dans les deux sens.
En l'écrivant. Les sections à la racine, puis les contraintes de chaque règle — mais seulement celles que le type déclaré admet :
let entree = input({
query: { page: { type: "int", ▮ } } // min, max, values — jamais minLen ni pattern
})
minLen sur un int est une erreur de build ; la proposer serait y avoir poussé. Le spec entier est lu, pas seulement ce qui précède le curseur : un type écrit après décide quand même.
En le lisant. Ce que le contrat produit se complète, typé :
| Frappe |
Proposé |
entree. |
params query headers body, avec le nombre de champs de chacune |
entree.body. |
les champs déclarés, leur type et leur caractère facultatif |
entree.body.adresse. |
les fields de l'objet |
entree.headers[" |
les en-têtes déclarés, seule forme qui atteint un nom à trait d'union |
Les champs non déclarés du corps passent aussi — un proxy relaie plus qu'il ne connaît — et ne sont donc pas proposés.
Aller à la définition
Cmd/Ctrl + clic résout quatre choses :
| Sous le curseur |
Destination |
Le chemin d'un import |
le fichier importé |
L'alias d'un import |
le fichier importé |
alias.membre |
le export let membre dans ce fichier |
| Un nom local |
son let, ou le paramètre de fn qui le lie |
Un builtin ne résout vers rien : sa définition est en Go. La résolution des chemins reproduit module.resolveImport du langage — un saut qui atterrirait où le build ne regarde pas serait pire que pas de saut.
sira.json
Le manifeste est complété et vérifié dans l'éditeur : chaque clé porte sa description, residency propose ses deux valeurs, et une durée ou une taille mal écrite est soulignée.
Le schéma ne signale que ce que la plateforme ne peut pas honorer. Un limits.time illisible, un egress sans hôte ou une clé de trigger sans son kind: sont soulignés bien que le build les accepte : chacun est un réglage dont l'auteur n'apprendra jamais qu'il a été ignoré. À l'inverse, un prefix sans barre oblique de tête ne l'est pas — le moteur le monte au même endroit.
Prérequis
Le binaire sira doit être dans le PATH, ou son chemin indiqué dans le réglage sira.path.
sira -h
Réglages
| Clé |
Défaut |
Effet |
sira.path |
sira |
Chemin de l'exécutable. |
sira.checkOnSave |
true |
Lance sira check à l'enregistrement. |
sira.devAddress |
127.0.0.1:8080 |
Adresse d'écoute de sira dev. |
Le formatage à l'enregistrement est actif par défaut pour les fichiers .sira, sans modifier vos réglages globaux.
sira fmt normalise l'indentation, les espaces et les guillemets. Il conserve vos retours à la ligne : il ne décide jamais où une instruction doit se couper.
Il refuse d'écrire ce qu'il ne peut pas prouver identique : littéral non terminé, délimiteur non fermé, ou flux de tokens modifié par la réécriture. À l'enregistrement, un fichier en cours de frappe est laissé intact.
Commandes
Sira: Construire le bundle, Vérifier le projet, Serveur de développement, Pousser vers le manager, Nouveau handler, Recharger le catalogue de builtins.
Développement
npm install
npm run compile
npm test
npm test compile, exerce les fournisseurs hors éditeur (test/harness.js bouchonne vscode), valide le schéma de sira.json, et vérifie que la grammaire n'a pas dérivé du catalogue. Sans le binaire sira, cette dernière étape se contente de le dire.
L'icône est un SVG : images/icon.svg est l'original, npm run icon en tire le PNG que la marketplace exige.
F5 ouvre une fenêtre d'extension. npm run package produit le .vsix.