Référence : snippets
Description neutre des fichiers de snippets, du menu Snippets, et de la façon dont un snippet est inséré.
Fichiers
Les deux sont lus, et les deux sont facultatifs.
| Fichier | Contient |
|---|---|
./.turbo-js/snippets.toml |
Les snippets du projet |
$TURBO_JS_SNIPPET_DIR/snippets.toml, sinon <config utilisateur>/turbo-js/snippets.toml |
Les vôtres, partagés entre projets |
<config utilisateur> est os.UserConfigDir() : ~/.config sous Linux, ~/Library/Application Support sous macOS. TURBO_JS_DIR remplace <config utilisateur>/turbo-js en entier.
| Propriété | Valeur |
|---|---|
| Recherche du projet | Le répertoire de travail seulement. Les dossiers parents ne sont pas parcourus. |
| Lecture | À chaque ouverture du menu Snippets |
| Ordre | Les vôtres d'abord, puis ceux du projet |
| Conflit de nom | Même group et même name → celui du projet remplace le vôtre |
| Fichier absent | Pas une erreur |
| Fichier illisible | Une erreur, signalée dans le menu |
Format du fichier
Une table [[snippet]] par snippet.
| Clé | Type | Obligatoire | Description |
|---|---|---|---|
name |
chaîne | oui | Ce que le menu affiche |
body |
chaîne | oui | Le texte inséré au curseur |
group |
chaîne | non | Le sous-menu où il va ; absent signifie General |
languages |
tableau de chaînes | non | Restreint le snippet à ces langages ; absent signifie tous les fichiers |
languages emploie les noms de langages de l'éditeur : javascript, json, toml, yaml, markdown, html, xml, dockerfile, bash. Voir Langages colorés.
Un snippet sans name ou sans body rend tout le fichier erroné — il n'aurait pu être affiché, ou n'aurait rien à insérer.
Exemple
[[snippet]]
name = "for of"
group = "JavaScript"
languages = ["javascript"]
body = """
for (const item of items) {
}"""
Les chaînes multi-lignes du TOML — '''…''' comme """…""" — suppriment le saut de ligne qui suit immédiatement les guillemets d'ouverture. Dans une chaîne basique ("""), \t devient une tabulation et \" un guillemet à la lecture du fichier ; dans une chaîne littérale ('''), rien n'est interprété. Les corps de plusieurs lignes du fichier de départ sont des chaînes basiques — un guillemet JavaScript, "node:test", y passe sans échappement — et les corps d'une ligne qui portent des guillemets doubles sont écrits entre apostrophes, '…'.
Le fichier de départ
Create snippets file écrit un fichier commenté contenant :
| Groupe | languages |
Snippets |
|---|---|---|
| JavaScript | ["javascript"] |
import, require, async function, try / catch, class, for of, test |
| JSON | ["json"] |
scripts |
| General | aucun | Hello |
| Markdown | ["markdown"] |
Image |
Les corps JavaScript sont indentés de deux espaces, ce que Prettier écrit par défaut ; une tabulation serait reformatée au premier npx prettier --write.
Le menu
| Entrée | Condition |
|---|---|
| Un sous-menu par groupe, dans l'ordre d'apparition des groupes dans les fichiers | Un groupe ayant au moins un snippet applicable à la fenêtre au premier plan |
Cannot read snippets, grisé |
Un fichier est présent mais illisible |
Create snippets file |
Le projet n'a pas de fichier de snippets |
Open snippets file |
Le projet en a un |
La touche chaude du menu est Alt-N, pas Alt-S : Search répond déjà au S.
Les groupes, et les snippets à l'intérieur, sortent dans l'ordre de lecture : le menu correspond aux fichiers.
Une entrée de snippet est grisée quand aucun fichier n'est ouvert pour l'y insérer — un terminal ou l'arbre du projet au premier plan compte comme aucun fichier.
Filtrage
| Fenêtre au premier plan | Snippets proposés |
|---|---|
| Un fichier d'un langage reconnu | Ceux qui nomment ce langage, plus ceux qui n'en nomment aucun |
| Un fichier d'aucun langage reconnu | Ceux qui n'en nomment aucun |
| Un terminal, l'arbre du projet, ou rien | Ceux qui n'en nomment aucun |
Un fichier .js, .mjs ou .cjs est de langue javascript ; de même un fichier sans extension dont la première ligne est un shebang nommant node. Un fichier .json ou .jsonc est de langue json.
Insertion
| Comportement | Détail |
|---|---|
| Position | Au curseur |
| Première ligne | Insérée là où est le curseur |
| Lignes suivantes | Préfixées par l'indentation de la ligne où était le curseur |
| Lignes vides du corps | Laissées vides, non complétées d'espaces |
| Annulation | Une seule opération pour tout le snippet |
| Curseur ensuite | À la fin du texte inséré |
| Signalement | Snippet inserted dans la barre d'état |
L'indentation copiée est le préfixe d'espaces de la ligne courante, tabulations ou espaces telles quelles : un snippet suit donc ce que le fichier emploie déjà.
Entrées de menu
| Entrée | Menu | Effet |
|---|---|---|
| Create snippets file | Snippets | Écrit .turbo-js/snippets.toml avec les exemples ci-dessus, puis l'ouvre. Grisée dès que le projet en a un. |
| Open snippets file | Snippets | Ouvre .turbo-js/snippets.toml. Grisée tant que le projet n'en a pas. Toujours le fichier du projet, jamais le vôtre — c'est celui qu'écrit l'entrée au-dessus. |
Le fichier est écrit via un fichier temporaire du même dossier, renommé en place : une écriture interrompue laisse le fichier précédent intact.
Erreurs
| Message | Cause |
|---|---|
Cannot read snippets dans le menu |
Un fichier de snippets est présent mais n'est pas du TOML valide, ou contient un snippet sans nom ou sans corps |
Already there: .turbo-js/snippets.toml |
Créer dans un projet qui en a déjà un. Inatteignable depuis le menu, qui grise l'entrée ; reste possible pour un appelant qui n'est pas un menu. |
This project has no .turbo-js/snippets.toml yet. |
Ouvrir dans un projet qui n'en a pas, de même |
Cannot tell which directory this is: … |
Le répertoire de travail n'a pas pu être lu |
Voir aussi
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 |
|