Snippets (Extraits de code)

Dans le domaine de la programmation on est souvent amené à écrire plusieurs fois les mêmes fragments de code. Bien que les copier-coller soit à bannir, le fait de créer sa propre bibliothèque d’extrait de code après avoir compris un concept peut-être un moyen utile de gagner du temps.

Les Snippets

Les snippets sont des extraits de code personnalisable (ou pas) facilement insérables dans une feuille de code.
On leur donne un nom particulier car ce qu’on apelle « snippets » au sein d’un IDE ou outils de code sont des éléments généralement stockés dans un dossier spécifique de l’IDE et facilement appelable via un mot clé.

Ainsi, sur Visual Studio, en tapant « prop« , on accède au snippet de création de propriété :

snippet_prop

Le fait de taper TAB permettra d’insérer l’extrait de code lié.

public int MyProperty { get; set; }

La manière dont est conçu ce snippet permet de plus que le curseur présélectionne le type (int) pour le modifier rapidement ; ensuite, l’appui sur la touche TAB permettra pour ce snippet de modifier rapidement le nom de la propriété ; une fois terminer la touche ENTER permet de terminer son insertion.

Avantages

Comparé à l’utilisation d’un fichier texte qui contiendrait un ensemble de morceaux de code communs, voici les avantages des snippets.

  1. Rapidement accessible :
    Etant compris par l’IDE, les extraits de code sont accessibles via Click droit>Insérer un extrait (ou entourer d’un extrait) et via le mot-clé-raccourci qui lui a été définit lors de sa création : la touche TAB permet alors de rapidement l’insérer.
  2. Documentable :
    En plus du raccourci désiré, un snippet contient un nom, une description, un auteur ainsi que des aides contextuel pour chaque élément à insérer.
  3. Personnalisable :
    A l’insertion du snippet, l’utilisateur sera invité à personnaliser des portions de l’extrait de code défini à l’avance dans le snippet, et à saisir ENTER pour la valider.
  4. Dynamique :
    Dans le cas où une portion de code contiendrait plusieurs fois une même donnée personnalisé (ex : un nom de propriété), chacune de ses occurrences dans l’extrait de code viendra se mettre à jour.

Et enfin et bien évidemment, on peut créer nos propres snippets.

Création pour Visual Studio

Voici un fichier snippet classic, avec une donnée personnalisable, pour la création d’une variable de type string.

<?xml version="1.0" encoding="utf-8"?>
  <CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
    <CodeSnippet Format="1.0.0">
      <Header>
        <Title>Nom du Snippet</Title>
        <Shortcut>monSnippet</Shortcut>
        <Description>Extrait de code pour créer un snippet</Description>
        <Author>Webmaster Prographie</Author>
        <SnippetTypes>
          <SnippetType>Expansion</SnippetType>
        </SnippetTypes>
      </Header>
      <Snippet>
        <Code Language="csharp">
          <![CDATA[string variable = ""; ]]>
        </Code>
      </Snippet>
    </CodeSnippet>
  </CodeSnippets>

Ici, en tapant monSnippet puis TAB la chaine défini dans <Code Language= »csharp »></Code> viendra s’insérer à savoir string variable = » »;. Dans le cas d’un aussi petit morceau de code, l’intérêt peut être limité, mais serait utile pour des morceaux plus important.

Donnée personnalisable

Profitons maintenant de l’aspect personnalisable des snippet. Ainsi, en remplaçant la section <Snippet> par l’extrait suivant on pourra directement personnaliser le nom de la variable :

<Snippet>
  <Declarations>
    <Literal>
      <ID>variableName</ID>
      <ToolTip>Nom de la variable</ToolTip>
      <Default>monString</Default>
    </Literal>
  </Declarations>
  <Code Language="csharp">
    <![CDATA[string $variableName$; ]]>
  </Code>
</Snippet>

Ici, en tapant monSnippet puis TAB devrait venir s’insérer string $variableName$;. Toutefois, comme mentionné auparavant, les portions entre $ sont personnalisables. Ainsi la chaine sera personnalisé par ce qui est contenu dans les données <Declarations> du snippet, à savoir les <Litteral>. Ainsi la valeur variableName affichera par défaut monString et l’utilisateur sera invité à la personnaliser.

Dynamiquement mise à jour

Sur le même principe, le snippet va permettre de dynamiquement mettre à jour les occurences existantes de la même donnée.

<Code Language="csharp">
  <![CDATA[
    string $variableName$;
    $variableName$ = ""; 
  ]]>
</Code>

Ici, après avoir personnalisé monString, la deuxième occurence de variableName se mettra à jour dynamiquement avec la donnée saisie.

Spéciales : 2 mots clés

Deux mots clés sont utilisables tel des données mais ayant un role particulier :

  • $end$ permet de placer le curseur quelque part après avoir insérer l’extrait de code (ou personnalisé une donnée).
  • $selected$ permet d’insérer au sein du snippet un morceau de code déjà selectionné. Après avoir selectionné un texte, inserer le snippet via Ctrl-K Ctrl-X.
<Code Language="csharp">
  <![CDATA[
    string $variableName$;
    $variableName$ = "$selected$";$end$ 
  ]]>
</Code>

Ce code permettra par exemple en ayant selectionné le mot value, puis en apelleant le snippet via Ctrl-K Ctrl-X, d’insérer le snippet en ayant déjà instancié le string avec la chaine « value ». Puis, après avoir personnalisé le nom de variable et appuyer sur Enter, le curseur viendra se placer juste après le point-virgule.

Importation dans Visual Studio

Dans Visual Studio, accéder à Tools > Snippets Manager (ou Outils>Gestionnaire des extraits de code). Puis renseigner en haut de la fenêtre le langage.

snippet_window1

Puis selectionner le dossier dans lequel importer votre snippet (un dossier MyCodeSnippet est normalement existant).

snippet_window2

Et enfin Importer le/les snippet.s créés.

snippet_window3

A savoir qu’il est simplement possible d’Ajouter une nouvelle référence vers un dossier ou d’en Supprimer.

Sources :
  • Visual Studio 2019
  • https://docs.microsoft.com/en-us/visualstudio/ide/code-snippets-schema-reference?view=vs-2019
  • https://docs.microsoft.com/fr-fr/visualstudio/ide/code-snippets?view=vs-2019

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *