prog:vsc:module_highlight
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
prog:vsc:module_highlight [2021/02/01 16:50] – Ajout de "xxx.tmLanguage.json" root | prog:vsc:module_highlight [2021/02/26 13:22] (Version actuelle) – Ajout de "Utilisation d'un langage existant" root | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ====Prérequis==== | + | =====Prérequis===== |
La documentation est [[https:// | La documentation est [[https:// | ||
- | ===Node.js=== | + | ====Node.js==== |
Il faut installer [[prog: | Il faut installer [[prog: | ||
Ligne 13: | Ligne 13: | ||
</ | </ | ||
- | ====Création du module==== | + | =====Création du module===== |
Générer le module de base pour la coloration syntaxique : | Générer le module de base pour la coloration syntaxique : | ||
Ligne 78: | Ligne 78: | ||
</ | </ | ||
- | ====Syntaxe des fichiers==== | + | =====Syntaxe des fichiers===== |
- | ===package.json=== | + | ====package.json==== |
Dans ce fichier, il faut uniquement modifier la partie '' | Dans ce fichier, il faut uniquement modifier la partie '' | ||
- | * '' | + | ===languages=== |
<code javascript> | <code javascript> | ||
Ligne 102: | Ligne 102: | ||
</ | </ | ||
- | Dans '' | + | * '' |
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
- | Le premier alias servira de label. | + | ===grammars=== |
- | + | ||
- | Les '' | + | |
- | + | ||
- | Avec '' | + | |
- | + | ||
- | Avec '' | + | |
- | + | ||
- | * '' | + | |
<code javascript> | <code javascript> | ||
Ligne 138: | Ligne 134: | ||
Il est aussi possible d' | Il est aussi possible d' | ||
- | ===xxx.tmLanguage.json=== | + | ====xxx.tmLanguage.json==== |
Voir [[https:// | Voir [[https:// | ||
- | L' | + | ===Arborescence |
<code javascript> | <code javascript> | ||
- | |||
{ | { | ||
- | " | + | |
- | " | + | " |
- | " | + | " |
- | { | + | { |
- | " | + | " |
- | } | + | } |
- | ], | + | ], |
- | " | + | " |
- | " | + | " |
- | }, | + | }, |
- | " | + | " |
} | } | ||
</ | </ | ||
Ligne 163: | Ligne 158: | ||
avec 3 champs à personnaliser : | avec 3 champs à personnaliser : | ||
- | '' | + | * '' |
- | '' | + | * '' |
+ | |||
+ | * '' | ||
+ | |||
+ | ===pattern=== | ||
+ | |||
+ | Chaque '' | ||
+ | |||
+ | * '' | ||
+ | |||
+ | Il est possible de ne définir que le pattern avec son type de contenu. Ici, on repère 4 mots clés ('' | ||
+ | |||
+ | Le nom doit impérativement respecter la [[https:// | ||
+ | |||
+ | <code javascript> | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }] | ||
+ | }, | ||
+ | </ | ||
+ | |||
+ | * '' | ||
+ | |||
+ | Dans l' | ||
+ | |||
+ | Ensuite, à l' | ||
+ | |||
+ | Il y a aussi un double intérêt. Si le caractère d' | ||
+ | |||
+ | <code javascript> | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | ] | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Il est aussi possible de colorer en fonction des groupes de l' | ||
+ | |||
+ | <code javascript> | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Il est aussi possible d' | ||
+ | |||
+ | En plus de '' | ||
+ | |||
+ | Il est aussi possible d' | ||
+ | |||
+ | <WRAP center round important 60%> | ||
+ | Le pattern de récursion ne fonctionnera plus. | ||
+ | </ | ||
+ | |||
+ | |||
+ | <code javascript> | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | </ | ||
+ | |||
+ | |||
+ | ====Bonnes pratiques==== | ||
+ | |||
+ | ===Principe=== | ||
+ | |||
+ | L' | ||
+ | |||
+ | Il est donc préférable d' | ||
+ | |||
+ | ===Exemple=== | ||
+ | |||
+ | * '' | ||
+ | |||
+ | <file javascript package.json> | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | ], | ||
+ | " | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | ], | ||
+ | " | ||
+ | " | ||
+ | ], | ||
+ | " | ||
+ | } | ||
+ | ], | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | ] | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | * '' | ||
+ | |||
+ | Le schéma à respecter est [[https:// | ||
+ | |||
+ | Il est important de comprendre le fichier '' | ||
+ | |||
+ | <file javascript lang.tmLanguage.json> | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | "// Le fichier contient soit des fonctions, soit du code source.": | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | }, | ||
+ | { | ||
+ | " | ||
+ | }, | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | ], | ||
+ | "// Dans le champ repository, on stocke et nomme toutes les regex.": | ||
+ | " | ||
+ | "// Regex caractérisant un float.": | ||
+ | "// Ici, l' | ||
+ | "// Un type peut faire référence (include) à un autre type qui sera défini plus tard.": | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | "// Regex caractérisant un int.": "", | ||
+ | "// Il est important de mettre le cas le plus spécialisé en premier.": | ||
+ | "// Si on avait mis integer en premier, on n' | ||
+ | "// car les parties entière et décimale seraient détectées comme int": "", | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | }, | ||
+ | { | ||
+ | " | ||
+ | }, | ||
+ | { | ||
+ | " | ||
+ | } | ||
+ | ] | ||
+ | }, | ||
+ | " | ||
+ | "// Pour faire simple, on dit qu'un expression, c'est soit :": "", | ||
+ | "// | ||
+ | "// | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | } | ||
+ | ] | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | } | ||
+ | ] | ||
+ | } | ||
+ | } | ||
+ | }, | ||
+ | { | ||
+ | " | ||
+ | } | ||
+ | ] | ||
+ | }, | ||
+ | " | ||
+ | "// On suppose que les types sont des nombres uniquement.": | ||
+ | "// Si le type est inconnu, on le déclare invalide.": | ||
+ | "// Attention à ne pas déclarer invalide comme fallthrough à chaque pattern.": | ||
+ | "// Sinon, les patterns qui include le type s' | ||
+ | "// sans lire les étapes suivantes.": | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | ] | ||
+ | }, | ||
+ | " | ||
+ | "// Une initialisation de variable se faire :": "", | ||
+ | "// int variable = expression;": | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | } | ||
+ | ] | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | } | ||
+ | ] | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | ] | ||
+ | }, | ||
+ | " | ||
+ | "// Un if a la syntaxe suivante :": "", | ||
+ | "// if expression then": "", | ||
+ | "// | ||
+ | "// fi": "", | ||
+ | "// La déclaration de la partie code est faite dans l' | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | } | ||
+ | ] | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | }, | ||
+ | "// Ici, on utilise le groupe \\1 qui fait référence au groupe 1 de begin": | ||
+ | "// Comme il n'est pas possible de détecter les fi correspondant aux if": "", | ||
+ | "// dans le cas de if imbriqués, on utilise l' | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | } | ||
+ | ] | ||
+ | }, | ||
+ | " | ||
+ | "// Le code représente des instructions entières.": | ||
+ | "// Ici, on considère que des nombres et expression peuvent": | ||
+ | "// être des instructions mais cela aurait pu être interdit.": | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | }, | ||
+ | { | ||
+ | " | ||
+ | }, | ||
+ | { | ||
+ | " | ||
+ | }, | ||
+ | { | ||
+ | " | ||
+ | } | ||
+ | ] | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | } | ||
+ | ] | ||
+ | } | ||
+ | }, | ||
+ | " | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |<file lang test.lang> | ||
+ | text not supported | ||
+ | |||
+ | 156 | ||
+ | 156.6f | ||
+ | 0x156aE | ||
+ | |||
+ | 123+456 | ||
+ | |||
+ | float eiuaf = 123; | ||
+ | |||
+ | eiua eiua = 123; | ||
+ | |||
+ | function xxx | ||
+ | double eiuad = 123.3d; | ||
+ | if 156 = 156 then | ||
+ | if 156 = 156 then | ||
+ | int eiua = 123.3d; | ||
+ | fi | ||
+ | int eiua = 123.3d; | ||
+ | fi | ||
+ | end_function | ||
+ | |||
+ | 156 | ||
+ | </ | ||
+ | |||
+ | ====Utilisation d'un langage existant==== | ||
+ | Une partie du code peut intégrer un langage existant. | ||
+ | |||
+ | Il faut définir qu'on va s' | ||
+ | |||
+ | <code javascript> | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | ], | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | <file javascript shellscriptInjection.tmGrammar.json> | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | } | ||
+ | ] | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Utilisation du langage importé. Il faut impérativement utiliser '' | ||
+ | |||
+ | Pour être utiliser en single line, on peut tricher... | ||
+ | |||
+ | <code javascript> | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ====Coloration personnalisée==== | ||
+ | |||
+ | Afin d' | ||
+ | |||
+ | A défaut, il faudra définir les couleurs manuellement dans les préférences de l' | ||
+ | |||
+ | Gros inconvénient, | ||
+ | |||
+ | <code javascript> | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | "Same color than entity.name.function" | ||
+ | ], | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | } | ||
+ | ] | ||
+ | }, | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ====Générer le module==== | ||
+ | |||
+ | ===En local=== | ||
+ | |||
+ | Il faut ajouter le champ '' | ||
+ | |||
+ | <code bash> | ||
+ | vsce package | ||
+ | </ | ||
+ | |||
+ | Et pour installer le module dans Visual Studio Code : | ||
+ | |||
+ | <code bash> | ||
+ | code --install-extension myextension.vsix | ||
+ | </ | ||
- | '' |
prog/vsc/module_highlight.1612194608.txt.gz · Dernière modification : 2021/02/01 16:50 de root