Skip to content
English

Langages ​

Tout ce que l'IDE sait d'un langage est déclaré au même endroit, dans src/languages/ : un module par langage, réunis dans le registre LANGUAGES. Le reste du code interroge ce registre (languageForFile, runnableLanguageForFile, runnableLanguages) au lieu de tester des extensions de fichiers.

Ce qu'un langage déclare ​

ChampRôlePythonSQLOCaml
extensionsfichiers du langagepy, pywsqlml, mli
syntax()coloration CodeMirror@codemirror/lang-pythonlang-sql (SQLite)mode hérité mllike
runtimeexécution par un noyau Basthon✓✓✓ (ml seulement)
lintanalyse à la frappeRuff——
formatformatage du documentRuff——
outlineplan (classes, fonctions)arbre Lezer——

Chaque fonctionnalité facultative s'active seule quand le langage la fournit : bouton Exécuter et Ctrl+Entrée (runtime), marqueurs et compteur de problèmes (lint), bouton et raccourci de formatage (format), volet Structure (outline).

De plus, ces fonctionnalités sont modulables via le système d'extensions intégrées (src/services/extensions/, src/stores/extensions.ts) :

  • L'exécution de SQL et d'OCaml n'est disponible que si l'extension correspondante est activée (ce qui évite de précharger inutilement leurs gros noyaux WASM) ;
  • Le linter (Ruff), le formateur de code et le plan (Structure) sont également débrayables via leurs extensions.

runtime décrit ce que le noyau attend :

  • kernel : le noyau Basthon (python3, sql, ocaml), qui sert aussi d'identifiant au langage ;
  • workspaceFiles : copier les fichiers du workspace dans le noyau (imports locaux, lecture de fichiers) ;
  • scriptPrelude : code évalué avant un script (Python : répertoire, sys.argv, sys.path, __file__) ;
  • showScriptResult, formatResult : afficher la valeur de la dernière instruction d'un script, et sa mise en forme (table SQL) ;
  • extensions : les fichiers exécutables, s'ils ne sont pas tous ceux du langage (une interface OCaml se colore mais ne s'exécute pas).

Ajouter un langage ​

  1. Créer src/languages/<langage>.ts qui exporte un LanguageSupport.
  2. L'ajouter à LANGUAGES (src/languages/index.ts).
  3. S'il s'exécute, ajouter son noyau à KERNEL_CLASSES (src/services/kernels.ts) et au plugin Vite (vite-plugin-basthon.ts).

Les icônes de fichiers restent dans src/utils/fileIcons.ts, qui couvre aussi les fichiers qui ne sont d'aucun langage (images, JSON, Markdown…).

Place dans les couches ​

languages est au-dessus des services (il assemble Ruff, le linter, le plan, les noyaux) et en dessous des stores : un langage ne connaît ni l'état de l'interface ni Vue. Le linter, par exemple, renvoie ses problèmes ; c'est l'éditeur qui les transmet au store diagnostics.