Rhai Language Support pour VS Code
Extension VS Code dédiée au langage de scripting Rhai, offrant une coloration syntaxique complète, une structure/outline des fichiers, un formateur de code et des snippets pour une productivité optimale.
🐛 Limitations connues
- La coloration syntaxique est basique et pourrait être améliorée
- L'autocomplétion est limitée aux snippets
- Le formateur de code est rudimentaire
- Windsurf uniquement : Le hover peut parfois afficher la documentation deux fois de manière intermittente (race condition dans Windsurf). Ce problème n'existe pas sur VS Code standard.
Auteur
jhenriot alias lemeran81
Fonctionnalités
🎨 Coloration Syntaxique
Support complet de la syntaxe Rhai :
- Mots-clés :
fn, const, let, if, else, for, in, while, switch, import, as, export, private, break, continue, return, throw, try, catch
- Types : nombres entiers, flottants, hexadécimaux, binaires, octaux
- Opérateurs :
and, or, not, is, is_empty, is_undefined
- Fonctions : définitions
fn nom() et appels nom()
- Objets : maps
#{}, closures |...| {}
- Chaînes : interpolation
${...} dans les strings double-quote "" et templates `...`
- Commentaires :
//, /* */, documentation /// et //!
- Constantes :
true, false, ()
📋 Structure / Outline
L'outline affiche dans la barre latérale :
- Fonctions (
fn) — avec nom et paramètres (ex: creer_arme(nom, description))
- Constantes (
const) — en majuscules
- Imports (
import "module" as alias) — avec alias et module source
- Régions (
// region: Nom) — pliables, avec hiérarchie
🔗 Navigation par définition (Ctrl+Click)
Naviguez rapidement dans votre code Rhai, même entre fichiers :
- Ctrl+Click (ou F12) sur un nom de fonction → saute à sa définition
fn nom()
- Ctrl+Click sur une constante → saute à sa définition
const NOM
- Ctrl+Click sur
module::fonction (ex: p::get_equipement) → ouvre le fichier importé et saute à la définition
- Supporte les imports via
import "fichier" as alias
Exemple :
import "personnage" as p;
// Ctrl+Click sur get_equipement ouvre personnage.rhai
let equipement = p::get_equipement(personnage);
📖 Documentation au survol (Hover)
Survolez une fonction pour voir sa documentation instantanée avec un affichage enrichi :
Fonctions natives Rhai : 🔷
- Hover sur
type_of(), print(), debug(), len(), etc.
- Affichage coloré avec emoji et lien vers la documentation officielle
Fonctions utilisateur (locales et importées) : 🟢
- Hover sur une fonction affiche sa documentation JSDoc formatée
- Fonctions locales : documentation extraite du fichier courant
- Fonctions importées :
module::fonction() ouvre le fichier importé et affiche sa doc
- Mise en forme intelligente :
- 📌 Titres (
# Arguments, # Returns) en gras
- • Puces pour les listes de paramètres
`Code` mis en évidence
- Séparateurs visuels pour une meilleure lisibilité
Exemple :
// Dans personnage.rhai :
/// Calcule les points de vie d'un personnage
///
/// # Arguments
/// * `constitution` - Valeur de constitution (8-18)
/// * `niveau` - Niveau du personnage (1-20)
///
/// # Returns
/// Nombre de points de vie calculés
fn calculer_pv(constitution, niveau) {
return constitution * 2 + niveau * 5
}
// Dans un autre fichier :
import "personnage" as p;
// Survoler p::calculer_pv() affiche :
// 🟢 calculer_pv()
// Calcule les points de vie d'un personnage
// ...
// 🔗 Importée depuis personnage
let pv = p::calculer_pv(12, 3);
🧩 Snippets
| Snippet |
Description |
fn |
Fonction avec documentation JSDoc complète |
const |
Déclaration de constante |
region |
Marqueurs de région avec nom |
import |
Import de module avec alias |
map |
Object map #{} |
closure |
Closure \|...\| {} |
for |
Boucle for |
if |
Condition if/else |
Formate les signatures de fonctions avec un paramètre par ligne :
Avant :
fn creer_arme(nom, description, points_impact) {
Après (Shift+Alt+F) :
fn creer_arme(
nom,
description,
points_impact,
) {
Règles du formateur :
- Chaque paramètre sur sa propre ligne avec virgule finale
- Indentation respectée (tab ou espaces selon les settings VS Code)
- Les fonctions déjà bien formatées ne sont pas modifiées
- Les fonctions sans paramètres restent
fn nom() {
- Supporte les signatures multi-lignes existantes
Configuration :
rhai.format.enable : Active/désactive le formateur (activé par défaut)
�🗂️ Configuration Langage
- Commentaires :
// ligne, /* */ bloc
- Brackets :
{}, [], (), #{}
- Auto-fermeture : paires de caractères automatiques
- Folding : régions
// region: / // endregion:
- Indentation : automatique sur
{ et }
Installation
Méthode 1 : Fichier VSIX
code --install-extension vscode-rhai-0.1.0.vsix
Ou via l'interface :
- Ouvrir Extensions (Ctrl+Shift+X)
- Cliquer sur
... (plus d'actions)
- Install from VSIX...
- Sélectionner
vscode-rhai-0.1.0.vsix
Méthode 2 : Développement local
cd vscode-rhai
npm install
npm run compile
# F5 pour lancer dans VS Code
Utilisation
Coloration automatique
Les fichiers .rhai sont automatiquement reconnus avec la coloration syntaxique dédiée.
Outline
- Ouvrir un fichier
.rhai
- La structure apparaît dans la barre latérale Explorer → section Outline
- Cliquer sur un élément pour naviguer
Snippets
Commencer à taper le nom du snippet, puis Tab pour l'insérer :
fn [Tab] → Génère une fonction avec documentation
Exemple de code coloré
//! Module de gestion des personnages
// region: Types
const CLASSE_GUERRIER = #{
"nom": "Guerrier",
"pv_base": 10
};
// endregion: Types
/// Crée un nouveau personnage
///
/// # Arguments
///
/// * `nom` - Nom du personnage
/// * `classe` - Clé de la classe
fn creer_personnage(
nom,
classe,
) {
let perso = #{
"nom": nom,
"classe": CLASSE_GUERRIER,
"inventaire": []
};
for item in perso.inventaire {
if item.cle == "epee" {
print("Épée trouvée !");
}
}
perso
}
import "utilitaires" as u;
Structure du projet
vscode-rhai/
├── package.json # Manifest extension
├── language-configuration.json # Configuration langage
├── tsconfig.json # Configuration TypeScript
├── README.md # Ce fichier
├── icons/ # Icônes fichier
│ ├── rhai-light.svg
│ └── rhai-dark.svg
├── snippets/ # Snippets
│ └── rhai.json
├── syntaxes/ # Grammaire TextMate
│ └── rhai.tmLanguage.json
├── src/ # Code source
│ └── extension.ts # DocumentSymbolProvider + Formatter + DefinitionProvider + HoverProvider
├── LICENSE.md # Licence MIT
└── .gitignore # Fichiers ignorés par Git
Scripts disponibles
npm run compile # Compiler TypeScript
npm run watch # Compiler en mode watch
npm run package # Créer le .vsix
Licence
MIT — jhenriot alias lemeran81
Liens