| 📦 Turbo Python 6fc62ea k33g 10h ago | 1 | # Référence : snippets |
| 2 | |
| 3 | > Description neutre des fichiers de snippets, du menu Snippets, et de la façon dont un snippet est inséré. |
| 4 | |
| 5 | ## Fichiers |
| 6 | |
| 7 | Les deux sont lus, et les deux sont facultatifs. |
| 8 | |
| 9 | | Fichier | Contient | |
| 10 | | --- | --- | |
| 11 | | `./.turbo-python/snippets.toml` | Les snippets du projet | |
| 12 | | `$TURBO_PYTHON_SNIPPET_DIR/snippets.toml`, sinon `<config utilisateur>/turbo-python/snippets.toml` | Les vôtres, partagés entre projets | |
| 13 | |
| 14 | `<config utilisateur>` est `os.UserConfigDir()` : `~/.config` sous Linux, `~/Library/Application Support` sous macOS. |
| 15 | |
| 16 | | Propriété | Valeur | |
| 17 | | --- | --- | |
| 18 | | Recherche du projet | Le répertoire de travail seulement. Les dossiers parents ne sont **pas** parcourus. | |
| 19 | | Lecture | À chaque ouverture du menu Snippets | |
| 20 | | Ordre | Les vôtres d'abord, puis ceux du projet | |
| 21 | | Conflit de nom | Même `group` **et** même `name` → celui du projet remplace le vôtre | |
| 22 | | Fichier absent | Pas une erreur | |
| 23 | | Fichier illisible | Une erreur, signalée dans le menu | |
| 24 | |
| 25 | ## Format du fichier |
| 26 | |
| 27 | Une table `[[snippet]]` par snippet. |
| 28 | |
| 29 | | Clé | Type | Obligatoire | Description | |
| 30 | | --- | --- | --- | --- | |
| 31 | | `name` | chaîne | oui | Ce que le menu affiche | |
| 32 | | `body` | chaîne | oui | Le texte inséré au curseur | |
| 33 | | `group` | chaîne | non | Le sous-menu où il va ; absent signifie `General` | |
| 34 | | `languages` | tableau de chaînes | non | Restreint le snippet à ces langages ; absent signifie tous les fichiers | |
| 35 | |
| 36 | `languages` emploie les noms de langages de l'éditeur : `python`, `toml`, `yaml`, `markdown`, `javascript`, `html`, `xml`, `dockerfile`, `bash`. Voir [Langages colorés](languages.md). |
| 37 | |
| 38 | Un snippet sans `name` ou sans `body` rend tout le fichier erroné — il n'aurait pu être affiché, ou n'aurait rien à insérer. |
| 39 | |
| 40 | ### Exemple |
| 41 | |
| 42 | ```toml |
| 43 | [[snippet]] |
| 44 | name = "if err != nil" |
| 45 | group = "Python" |
| 46 | languages = ["python"] |
| 47 | body = """ |
| 48 | if err != nil { |
| 49 | return err |
| 50 | }""" |
| 51 | ``` |
| 52 | |
| 53 | Les chaînes `"""` du TOML suppriment le saut de ligne qui suit immédiatement les guillemets d'ouverture, et interprètent `\t` comme une tabulation. |
| 54 | |
| 55 | ## Le menu |
| 56 | |
| 57 | | Entrée | Condition | |
| 58 | | --- | --- | |
| 59 | | 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 | |
| 60 | | `Cannot read snippets`, grisé | Un fichier est présent mais illisible | |
| 61 | | `Create snippets file` | Le projet n'a pas de fichier d'extraits | |
| 62 | | `Open snippets file` | Le projet en a un | |
| 63 | |
| 64 | La touche d'accès du menu est `Alt-N`, pas `Alt-S` : Search répond déjà au S. |
| 65 | |
| 66 | Les groupes, et les snippets à l'intérieur, sortent dans l'ordre de lecture : le menu correspond aux fichiers. |
| 67 | |
| 68 | 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. |
| 69 | |
| 70 | ### Filtrage |
| 71 | |
| 72 | | Fenêtre au premier plan | Snippets proposés | |
| 73 | | --- | --- | |
| 74 | | Un fichier d'un langage reconnu | Ceux qui nomment ce langage, plus ceux qui n'en nomment aucun | |
| 75 | | Un fichier d'aucun langage reconnu | Ceux qui n'en nomment aucun | |
| 76 | | Un terminal, l'arbre du projet, ou rien | Ceux qui n'en nomment aucun | |
| 77 | |
| 78 | ## Insertion |
| 79 | |
| 80 | | Comportement | Détail | |
| 81 | | --- | --- | |
| 82 | | Position | Au curseur | |
| 83 | | Première ligne | Insérée là où est le curseur | |
| 84 | | Lignes suivantes | Préfixées par l'indentation de la ligne où était le curseur | |
| 85 | | Lignes vides du corps | Laissées vides, non complétées d'espaces | |
| 86 | | Annulation | Une seule opération pour tout le snippet | |
| 87 | | Curseur ensuite | À la fin du texte inséré | |
| 88 | | Signalement | `Snippet inserted` dans la barre d'état | |
| 89 | |
| 90 | 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à. |
| 91 | |
| 92 | ## Entrées de menu |
| 93 | |
| 94 | | Entrée | Menu | Effet | |
| 95 | | --- | --- | --- | |
| 96 | | Create snippets file | Snippets | Écrit `.turbo-python/snippets.toml` avec des exemples travaillés, puis l'ouvre. Grisée dès que le projet en a un. | |
| 97 | | Open snippets file | Snippets | Ouvre `.turbo-python/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. | |
| 98 | |
| 99 | 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. |
| 100 | |
| 101 | ## Erreurs |
| 102 | |
| 103 | | Message | Cause | |
| 104 | | --- | --- | |
| 105 | | `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 | |
| 106 | | `Already there: .turbo-python/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. | |
| 107 | | `This project has no .turbo-python/snippets.toml yet.` | Ouvrir dans un projet qui n'en a pas, de même | |
| 108 | | `Cannot tell which directory this is: …` | Le répertoire de travail n'a pas pu être lu | |
| 109 | |
| 110 | ## Voir aussi |
| 111 | |
| 112 | - [Insérer des snippets depuis un menu](../how-to/use-snippets.md) |
| 113 | - [Snippets](../explanation/snippets.md) |
| 114 | - [Clavier](keyboard.md) |