Les code snippets

Préambule :
Avertissement : Certains des codes contenus dans ce tutoriel contiennent, eux mêmes, des balises </code>. Afin de préserver au mieux l'affichage sur le site, j'ai ajouté un espace à ces balises : </code> est donc devenu : </code >. N'oubliez pas de faire l'opération inverse en cas de copié-collé.

Les code snippets

Description
Ce tutoriel montre comment utiliser, créer et déployer des code-snippets pour Visual Studio. Les code-snippets sont des morceaux de code que l'on peut insérer pour accélérer l'écriture de code répétitif. On peut placer des "zones de remplacement" afin de personnaliser le code inséré. Par exemple, si l'on tape en VB.Net "property" puis que l'on appuie sur la touche tabulation, alors property est remplacé par la déclaration d'une propriété.

Introduction

Depuis Visual Studio 2005, un nouveau système pour accélérer le développement est apparu : les Code Snippets. Comme son nom l'indique les Code Snippets sont des bouts de codes que l'on peut insérer pour effectuer une action voulue avec la possibilité de remplir des trous dans le code. Par exemple, en C#, un snippet permet de créer une propriété.

Procédure d'utilisation du Code Snippet Inserter

Pour cela, il suffit de taper « prop » en C# et « property » en VB.Net puis de taper sur la touche « Tab » ce qui a pour effet de générer le code suivant :

Les zones en vert représentent les « trous » (appelés paramètres) dans lesquels on met les éléments personnalisés. Dans notre exemple, il s'agit du nom de la variable membre, du nom de la propriété et de son type. Pour naviguer d'un « paramètre » à l'autre il suffit de presser la touche « Tab ».

On peut aussi utiliser la combinaison de touches Ctrl-K-X pour ouvrir le Snippet Intellisense (ou encore le menu Edit/Intellisense/Insert Expansion), ensuite choisissez le Snippet que vous souhaitez insérer à l'endroit du curseur puis appuyer sur Entrée.

En Visual Basic, on peut taper le début du raccourci d'accès à un Snippet (par exemple prop) suivi d'un « ? » puis presser la touche Tab. Cela ouvre l'Intellisense des Snippets dont le raccourci commence par les caractères tapés. On peut aussi directement taper « ? » suivi de « Tab ».

Enfin on peut glisser-déposer un fichier .Snippet ou encore utiliser le menu contextuel de l'éditeur « Insert Snippet... ». Pour annuler l'insertion du Snippet, la combinaison de touches Ctrl-Z fonctionne comme à son habitude.

Pour personnaliser un Snippet inséré, vous pouvez naviguer d'une zone de remplacement (surlignée en vert) à l'autre avec la touche « Tab » ou « Shift-Tab » (sens inverse). Les tooltips de ces zones décrivent ce qui doit se trouver dans la zone. Si vous tapez Ctrl-Espace dans une zone, en Visual Basic, cela affiche l'Intellisense avec les variables locales du type attendu dans la zone et en C#, l'Intellisense classique. Pour sortir d'une zone, appuyez sur la touche « Echap ». Les zones de remplacement peuvent être liées et la modification de l'une se réplique sur les autres automatiquement quand vous sortez de la zone modifiée.

Dans Visual Basic, les Snippets peuvent insérer des Imports et ajouter des références au projet. Cela n'est pas supporté en C#. Toujours en Visual Basic, les zones de remplacement restent actives tant que le fichier de code (et ses vues associées) reste ouvert. En C#, elles disparaissent quand on appuie sur Enter.

Les types de Snippets

En réalité, il existe trois types de Snippets :

Les Snippets d'expansion (Expansion)

C'est-à-dire qui se substituent à leurs raccourcis quand il sont tapés suivis de la touche « Tab » ou s'insèrent à l'endroit du curseur pour le Snippet Intellisense.

Les Snippets d'entourage (SurroundWith)

C'est-à-dire qui s'insèrent avant et après la sélection, par exemple, une classe, un espace de nom. Ceux-ci sont accessibles depuis le menu contextuel de la fenêtre de code dans « Surrounds With ».

Les Snippets de refactoring

Ils permettent de faire du refactoring de code mais on ne peut pas créer ce type de snippet soi-même.

Le gestionnaire de Snippets

Vous pouvez accéder à la liste des éléments de code en fonction du langage ou du type de projet. Pour cela, vous devez utiliser le Gestionnaire de Snippets (Snippets Manager) accessible par le raccourci Ctrl-K-B. Vous trouverez diverses catégories dont les éléments du langage, le traitement de fichier, XML, Windows Forms. Si vous sélectionnez un Code Snippets vous pourrez voir sa description ainsi que son raccourci, c'est-à-dire le texte à saisir avant l'appui sur la touche « Tab » et qui sera remplacée par le Snippet (« property » dans notre exemple) :

La liste déroulante langage permet de choisir le langage pour lister les Snippets.
Le bouton Add permet d'ajouter un dossier contenant une série de fichiers Snippets.
Le bouton Import permet d'ajouter un fichier Snippet individuellement.
Enfin, le bouton « Search Online... » permet de rechercher des Snippets de la communauté Microsoft. Toutefois, les résultats de cette fonctionnalité ne sont pas précis et il est préférable d'utiliser un moteur de recherche en tapant son critère de recherche suivi de « Code Snippet ».

Quelques snippets

Snippet SurroundsWith Définition
#if , #region Directives de préprocesseur C#
do, while, foreach, for, reverseFor Boucles C#
if, else Logique de test
namespace Espace de nom
try Bloc Try Catch
using Bloc Using (unmanaged resource Dispose)
Snippet Expansion Définition
class, interface, enum
struct
Définition de types
property, propertyg Définit une propriété en lecture/écriture ou lecture seule

Les Snippets prédéfinis dans Visual Studio se trouvent dans %programfiles%\Microsoft Visual Studio 8\<VC# ou VB>\Expansions\<LCID, par ex, 1033(en), 1036 (fr)>\Expansions.

Créer ses propres Snippets

Fichier .Snippet de base

Pour créer un nouveau Snippet, il faut créer un fichier XML d'extension .snippet et le placer dans le dossier My Code Snippets (du dossier \Mes Documents\Visual Studio 2005\Code Snippets\Visual C#\ ou \Mes Documents\Visual Studio 2005\Code Snippets\Visual Basic\).

Un fichier Snippet est donc un fichier XML standard contenant autant d'éléments CodeSnippet que de Snippets présents dans le fichier :

<?xml version="1.0" encoding="utf-8"?>

<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">

    <CodeSnippet Format="1.0.0">

        <!--définition du Snippet -->

    </CodeSnippet>

</CodeSnippets>

Le CodeSnippet

Chaque élément CodeSnippet contient les éléments Header et Snippet (obligatoires) permettant de décrire un Snippet. L'élément CodeSnippet doit posséder un attribut Format avec la valeur « 1.0.0 ».

L'entête de CodeSnippet

L'élément Header (obligatoire) est un entête décrivant l'Addin possédant les éléments suivants :

Elément Title (obligatoire) : titre de ce Snippet
Elément Author (optionnel) : auteur de ce Snippet
Elément Description (optionnel) : description de ce Snippet
Elément Keywords (optionnel) : contient une série d'éléments Keyword contenant les mots clés associés à ce Snippet
Elément Shortcut (optionnel) : contient le raccourci pour ce Snippet
Elément HelpUrl (optionnel) : contient l'url d'aide de ce Snippet
Elément SnippetTypes (optionnel) : contient un ou plusieurs éléments SnippetType. On peut avoir un Snippet qui est à la fois Expansion et SurroundsWith.
Elément SnippetType (optionnel) : contient le type de Snippet :
« Expansion » : le Snippet s'insère à la place du raccourci tapé avant l'appui sur « Tab » ou à la place du curseur avec l'utilisateur de Snippet Intellisense
« SurroundsWith » : le Snippet va s'insérer avant et après la sélection comme par exemple une région ou un namespace. En réalité, le Snippet contient un paramètre spécial $selected$ qui sera substitué par la sélection en cours.

Par exemple :

<Header>

<Title>Make an instance</Title>

<Author>ShareVB</Author>

<Shortcut>newinst</Shortcut>

<Description>Make an instance of an object</Description>

<HelpUrl>http://www.sharevb.net</HelpUrl>

<SnippetTypes>

    <SnippetType>Expansion</SnippetType>

</SnippetTypes>

<Keywords>

    <Keyword>instance</Keyword>

    <Keyword>object</Keyword>

</Keywords>

</Header>

Ou encore :

<Header>

<Title>Iterate an IList</Title>

<Author>ShareVB</Author>

<Shortcut>iterIList</Shortcut>

<Description>Iterate an IList</Description>

<HelpUrl>http://www.sharevb.net</HelpUrl>

<SnippetTypes>

    <SnippetType>Expansion</SnippetType>

    <SnippetType>SurroundsWith</SnippetType>

</SnippetTypes>

</Header>

Le contenu de CodeSnippet

L'élément Snippet (obligatoire) décrit le code avec ses paramètres.

Les paramètres

L'élément Declarations (optionnel) contient les paramètres du code.

L'élément Literal (optionnel) est un paramètre textuel du Snippet, c'est-à-dire un texte simple comme un identifiant (nom de variable, classe), une chaîne, un nombre qui est inclus entièrement dans le Snippet
Elément ID (obligatoire) : id du paramètre pour substitution dans le code du Snippet. Dans le code, l'id du paramètre doit se trouver entre « $ » et peut se trouver plusieurs fois. Cet ID ne peut pas être selected ou end qui sont des mots réservés
Elément Function (optionnel) : supporté uniquement pour C# et J#, fonction à exécuter lors du passage de la sélection dans le paramètre. Par exemple, la génération d'un switch « GenerateSwitchCases ». Voir Code Snippet Functions
Elément ToolTip (optionnel) : définit le tooltip qui s'affiche lors du survol du paramètre
Elément Default (obligatoire) : définit la valeur par défaut du paramètre tel qu'il apparaîtra dans le Snippet inséré
Attribut Editable (optionnel) : indique si le paramètre est éditable. Cela peut servir par exemple pour un paramètre qui est le résultat d'une fonction Function (par exemple, simplification d'un type) et qui ne doit pas être changé
L'élément Object (optionnel) est un paramètre textuel du Snippet externe au Snippet, c'est-à-dire en général un objet référencé en dehors du Snippet comme un nom de contrôle ou une variable d'une classe :
Elément ID (obligatoire) : id du paramètre pour substitution dans le code du Snippet. Dans le code, l'id du paramètre doit se trouver entre « $ » et peut se trouver plusieurs fois. Cet ID ne peut pas être selected ou end qui sont des mots réservés
Elément ToolTip (optionnel) : définit le tooltip qui s'affiche lors du survol du paramètre
Elément Default (obligatoire) : définit la valeur par défaut du paramètre tel qu'il apparaîtra dans le Snippet inséré
Elément Function (optionnel) : supporté uniquement pour C# et J#, fonction à exécuter lors du passage de la sélection dans le paramètre. Par exemple, la génération d'un switch « GenerateSwitchCases ». Voir Code Snippet Functions
Elément Type (obligatoire) : définit le nom complet du type du paramètre. Cela permet à Intellisense de savoir l'autocompletion à réaliser pour le paramètre.

Par exemple pour Literal :

<Literal>

    <ID>index</ID>

    <ToolTip>Index Iterator</ToolTip>

    <Default>i</Default>

</Literal>

Avec des Functions :

<Literal Editable="false">

    <ID>classname</ID>

    <ToolTip>Class name</ToolTip>

    <Function>ClassName()</Function>

    <Default>ClassNamePlaceholder</Default>

</Literal>

<Literal Editable="false">

    <ID>SystemConsole</ID>

    <Function>SimpleTypeName(global::System.Console)</Function>

</Literal>

Et pour Object :

<Object>

    <ID>list</ID>

    <ToolTip>List to iterate</ToolTip>

    <Default>myList</Default>

    <Type>System.Collections.Generic.IList</Type>

</Object>

Les références et espaces de noms (Visual Basic seulement)

Pour Visual Basic seulement, on peut forcer l'ajout d'Import et de référence des assemblies :

L'élément References (optionnel) : contient les références à ajouter au projet (fonctionne uniquement en Visual Basic)
Elément Reference (optionnel) : contient une référence à ajouter
Elément Assembly (obligatoire) : contient le nom de l'assembly à ajouter au choix :
Le nom de la dll, par exemple : System.dll
Le nom complet (nom fort) de l'assembly : System,Version=1.0.0.1,Culture=neutral,PublicKeyToken=9b35aa323c18d4fb1
Elément Url (optionnel) : contient une url descriptive de l'assembly
L'élément Imports (optionnel) : contient les espaces de noms à ajouter au fichier lors de l'insertion du Snippet (fonctionne uniquement en Visual Basic)
Elément Import (optionnel) : contient un espace de nom à ajouter
Elément Namespace (obligatoire) : nom de l'espace de nom à ajouter.

Par exemple :

<Imports>

<Import>

<Namespace>System.Windows.Forms.Design</Namespace>

</Import>

</Imports>

<References>

<Reference>

<Assembly>System.Design.dll</Assembly>

</Reference>

<Reference>

<Url>http://msdn2.microsoft.com/en-us/library/system.windows.forms.design(VS.80).aspx</Url>

</Reference>

</References>

Le code lui-même

L'élément Code (obligatoire) contient le code du Snippet et possède les attributs suivants :

Attribut Language (obligatoire) : langage du Snippet :
« VB » : snippet Visual Basic .Net
« CSharp » : snippet C#
« VJSharp » : snippet Visual J#
« XML » : snippet XML

Attribut Kind (optionnel) : type de code du Snippet :
« method body » : spécifie que le Snippet est un corps de méthode et doit donc être inséré dans une méthode
« method decl » : spécifie que le Snippet est une déclaration de méthode et doit donc être inséré dans un module ou une classe
« type decl » : spécifie que le Snippet est une déclaration de type et doit donc être inséré dans un espace de nom, une classe ou un module
« file » : spécifie que le Snippet est un fichier entier et doit donc être inséré dans un espace de nom ou un fichier vierge
« any » : spécifie que le Snippet peut être inséré n'importe où même dans un commentaire

Attribut Delimiter (optionnel) : spécifie un délimiteur pour les paramètres. Par défaut « $ ».

Le contenu de l'élément Code est le code du Snippet. Il doit être encapsulé dans un < ![CDATA[ ... ]]> afin de s'assurer d'avoir un fichier XML valide même si le code contient des &, < ou >.

Par exemple en VB.Net :

<Code Language="VB" Kind="type decl">

<![CDATA[

Private Class $classname$Designer

Inherits ControlDesigner

'Add your code here

End Class

]]>

</code>

Ou en C# :

<Code Language="CSharp" Kind="method body">

<![CDATA[$SystemConsole$.WriteLine("$classname$");]]>

</code>

Points importants

Rappel des points importants :

  • Les paramètres définis comme Literal se substituent dans le code par leur ID entouré de « $ »
  • Il existe deux types de Snippets : Expansion et SurroundsWith
  • Les paramètres s'insèrent à l'endroit voulu dans le code du Snippet et correspondent aux ID (entourés de « $ ») des éléments Literal et Object
  • Il existe deux types de paramètres :
  • Paramètre externe : élément Object, définit un paramètre qui référence une instance d'objet qui se trouve en dehors du Snippet comme un contrôle Winform, un nom
  • Paramètre interne : élément Literal, définit un paramètre référençant un littéral (nombre ou chaîne) ou un identifiant de variable qui se trouve à l'intérieur du Snippet
  • Il y a deux paramètres spéciaux :

$selected$ : substitué par le texte sélectionné lors de l'utilisation du Snippet
$end$ : indique où sera placé le curseur après l'édition des paramètres du Snippet. Ce mot clé n'est pas géré en Visual Basic

  • Le code doit se trouver dans un <![CDATA[ ... ]]> afin de ne pas perturber le XML englobant.

Exemples

Exemple simple en VB.Net

Voici un exemple simple de Snippet qui permet d'insérer (Expansion) une instanciation d'objet en VB.Net :

<?xml version="1.0" encoding="utf-8"?>

<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">

<CodeSnippet Format="1.0.0">

<Header>

<Title>Make an instance</Title>

<Shortcut>newInst</Shortcut>

<Description>Make an instance of an object</Description>

<SnippetTypes>

<SnippetType>Expansion</SnippetType>

</SnippetTypes>

</Header>

<Snippet>

<Declarations>

<Literal>

<ID>type_name</ID>

<ToolTip>Type name of the type to instanciate</ToolTip>

<Default>object</Default>

</Literal>

<Literal>

<ID>var_name</ID>

<ToolTip>Instance variable name</ToolTip>

<Default>oObject</Default>

</Literal>

</Declarations>

<Code Language="VB" Kind="method body">

<![CDATA[Dim $var_name$ As $type_name$ = New $type_name$($end$)]]>

</code>

</Snippet>

</CodeSnippet>

</CodeSnippets>

Exemple simple en C#

Voici un exemple simple de Snippet qui permet d'insérer (Expansion) une instanciation d'objet en C# :

<?xml version="1.0" encoding="utf-8"?>

<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">

<CodeSnippet Format="1.0.0">

<Header>

<Title>Make an instance</Title>

<Author>ShareVB</Author>

<Shortcut>newinst</Shortcut>

<Description>Make an instance of an object</Description>

<HelpUrl>http://www.sharevb.net</HelpUrl>

<SnippetTypes>

<SnippetType>Expansion</SnippetType>

</SnippetTypes>

<Keywords>

<Keyword>instance</Keyword>

<Keyword>object</Keyword>

</Keywords>

</Header>

<Snippet>

<Declarations>

<Literal>

<ID>type_name</ID>

<ToolTip>Type name of the type to instanciate</ToolTip>

<Default>object</Default>

</Literal>

<Literal>

<ID>var_name</ID>

<ToolTip>Instance variable name</ToolTip>

<Default>oObject</Default>

</Literal>

</Declarations>

<Code Language="CSharp" Kind="method body">

<![CDATA[$type_name$ $var_name$ = new $type_name$($end$);]]>

</code>

</Snippet>

</CodeSnippet>

</CodeSnippets>

Paramètres « Literal » et « Object » et « Surround »

L'exemple suivant montre l'utilisation de Literal (pour exposer un objet déclaré dans le snippet, un identifieur ou une valeur primitive) et d'Object (pour référencer un objet externe) ainsi que l'utilisation de type de Snippet Surround et son paramètre $selected$ :

<?xml version="1.0" encoding="utf-8"?>

<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">

<CodeSnippet Format="1.0.0">

<Header>

<Title>Iterate an IList</Title>

<Author>ShareVB</Author>

<Shortcut>iterIList</Shortcut>

<Description>Iterate an IList</Description>

<HelpUrl>http://www.sharevb.net</HelpUrl>

<SnippetTypes>

<SnippetType>Expansion</SnippetType>

<SnippetType>SurroundsWith</SnippetType>

</SnippetTypes>

</Header>

<Snippet>

<Declarations>

<Literal>

<ID>index</ID>

<ToolTip>Index Iterator</ToolTip>

<Default>i</Default>

</Literal>

<Object>

<ID>list</ID>

<ToolTip>List to iterate</ToolTip>

<Default>myList</Default>

<Type>System.Collections.Generic.IList</Type>

</Object>

<Literal>

<ID>listtype</ID>

<ToolTip>Type of each list item</ToolTip>

<Default>object</Default>

</Literal>

<Literal>

<ID>element</ID>

<ToolTip>List item</ToolTip>

<Default>item</Default>

</Literal>

</Declarations>

<Code Language="CSharp" Kind="method body">

<![CDATA[for (int $index$ = 0;$index$ < $list$.Count;$index$++)

{

$listtype$ $element$ = $list$.Item($index$);

$end$

$selected$

}

]]>

</code>

</Snippet>

</CodeSnippet>

</CodeSnippets>

Functions

L'exemple suivant montre l'utilisation de fonctions pour remplir automatiquement le contenu d'un paramètre qui dans le cas présent ne sera pas éditable :

<?xml version="1.0" encoding="utf-8"?>

<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">

<CodeSnippet Format="1.0.0">

<Header>

<Title>Output Class Name</Title>

<Author>ShareVB</Author>

<Shortcut>printClassName</Shortcut>

<Description>Output the Name of the enclosing Class</Description>

<HelpUrl>http://www.sharevb.net</HelpUrl>

<SnippetTypes>

<SnippetType>Expansion</SnippetType>

</SnippetTypes>

</Header>

<Snippet>

<Declarations>

<Literal Editable="false">

<ID>classname</ID>

<ToolTip>Class name</ToolTip>

<Function>ClassName()</Function>

<Default>ClassNamePlaceholder</Default>

</Literal>

<Literal Editable="false">

<ID>SystemConsole</ID>

<Function>SimpleTypeName(global::System.Console)</Function>

</Literal>

</Declarations>

<Code Language="CSharp" Kind="method body">

<![CDATA[$SystemConsole$.WriteLine("$classname$");]]>

</code>

</Snippet>

</CodeSnippet>

</CodeSnippets>

Références et Imports

L'exemple suivant montre l'ajout d'Imports et de références au projet à l'insertion du Snippet concerné :

<?xml version="1.0" encoding="utf-8"?>

<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">

<CodeSnippet Format="1.0.0">

<Header>

<Title>Create a Control Designer Class</Title>

<Shortcut>designer</Shortcut>

<Description>Create a Control Designer Class</Description>

<SnippetTypes>

<SnippetType>Expansion</SnippetType>

</SnippetTypes>

</Header>

<Snippet>

<Declarations>

<Literal Editable="false">

<ID>classname</ID>

<ToolTip>Class name</ToolTip>

<Function>ClassName()</Function>

<Default>ClassNamePlaceholder</Default>

</Literal>

</Declarations>

<Imports>

<Import>

<Namespace>System.Windows.Forms.Design</Namespace>

</Import>

</Imports>

<References>

<Reference>

<Assembly>System.Design.dll</Assembly>

</Reference>

<Reference>

<Url>http://msdn2.microsoft.com/en-us/library/system.windows.forms.design(VS.80).aspx</Url>

</Reference>

</References>

<Code Language="VB" Kind="type decl">

<![CDATA[

Private Class $classname$Designer

Inherits ControlDesigner

'Add your code here

End Class

]]>

</code>

</Snippet>

</CodeSnippet>

</CodeSnippets>

Exemple XML

Voici un exemple de Snippet XML permettant de générer un fichier .snippet :

<?xml version="1.0" encoding="utf-8"?>

<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">

<CodeSnippet Format="1.0.0">

<Header>

<Title>Create a Snippet XML</Title>

<Shortcut>snippet</Shortcut>

<Description>Create a Snippet XML File content</Description>

<SnippetTypes>

<SnippetType>Expansion</SnippetType>

<SnippetType>SurroundsWith</SnippetType>

</SnippetTypes>

</Header>

<Snippet>

<Declarations>

<Literal>

<ID>title</ID>

<ToolTip>Snippet Title</ToolTip>

<Default>Title</Default>

</Literal>

<Literal>

<ID>shortcut</ID>

<ToolTip>Snippet Shortcut</ToolTip>

<Default>shortcut</Default>

</Literal>

<Literal>

<ID>description</ID>

<ToolTip>Snippet Description</ToolTip>

<Default>Description</Default>

</Literal>

<Literal>

<ID>lang</ID>

<ToolTip>Code language</ToolTip>

<Default>CSharp</Default>

</Literal>

<Literal>

<ID>kind</ID>

<ToolTip>Kind of Snippet code</ToolTip>

<Default>any</Default>

</Literal>

</Declarations>

<Code Language="XML" Kind="file">

<![CDATA[

<?xml version="1.0" encoding="utf-8"?>

<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">

<CodeSnippet Format="1.0.0">

<Header>

<Title>$title$</Title>

<Shortcut>$shortcut$</Shortcut>

<Description>$description$</Description>

<SnippetTypes>

<SnippetType>Expansion</SnippetType>

</SnippetTypes>

</Header>

<Snippet>

<Declarations>

<!-- Literal et Object -->

</Declarations>

<Code Language="$lang$" Kind="$kind$">

<!-- Insert CDATA start -->

$selected$

$end$

<!-- Insert CDATA end -->

</code>

</Snippet>

</CodeSnippet>

</CodeSnippets>

]]>

</Code>

</Snippet>

</CodeSnippet>

</CodeSnippets>

Visual Basic Snippet Editor

Comme son nom ne l'indique pas, cet outil est un éditeur de Code Snippet pour Visual Basic mais aussi pour C#. Il permet de saisir les informations du fichier .snippet de manière graphique à l'aide d'une partie éditeur de code et d'une partie page de propriétés du code. La plupart des propriétés correspondent directement à ce qui a été présenté avant. Par exemple, Scope correspond à l'attribut Kind (qui indique si le snippet est un fichier, une déclaration ou une implémentation). Pour ajouter des paramètres/zones de remplacement, on pourra sélectionner un morceau de code dans la partie éditeur et cliquer sur le « + ». Cela permet de configurer le paramètre, comme le type pour aider Intellisense et tout code identique au code sélectionné sera lié à ce paramètre.

Voici sa fenêtre principale :

On notera en vue de la section précédente que cet éditeur permet d'enregistrer directement au format VSI.

Déploiement et enregistrement dans Visual Studio

Méthodes de déploiement

Pour déployer votre fichier .snippet, il suffit qu'au choix :

  • Vous le copiez dans le dossier \Mes Documents\Visual Studio 2005\Code Snippets\<Visual C# ou Visual Basic>\My Code Snippets\
  • Mettez tous vos .snippet dans un dossier par exemple C:\My Snippets puis dans le Snippet Manager, utilisez le bouton Add.
  • Utiliser un VSI

Utiliser un VSI

Les packages Visual Studio Content Installer, qui portent aussi le nom de « Community Content », se basent sur un fichier d'extension VSI qui est en fait un simple fichier ZIP. Pour cela, il suffit de créer un fichier XML .vscontent dans le même dossier que les fichiers à déployer puis de zipper le .vscontent et les fichiers et enfin de renommer le .zip en .vsi. A partir de là, vous pouvez directement distribuer le VSI sur un partage réseau ou un site Web. Lorsque l'on double cliquera sur le fichier VSI, le Visual Studio Content Installer se lancera pour installer au bon endroit les éléments contenus dans le VSI.

Un package VSI contient un fichier XML de description des fichiers et contenus à installer. Ce fichier XML peut porter n'importe quel nom du moment qu'il porte l'extension .vscontent et qu'il n'y en a qu'un seul, même s'il faut installer plusieurs contenus différents. En général, on le nommera Content.vscontent.

Pour déployer un Code Snippet, il faut déployer un .snippet contenant autant de snippets que l'on veut à la seule condition que ce soit dans le même langage. Si l'on veut fournir deux langages, il faudra deux fichiers .snippet et deux éléments Content. L'élément FileContentType du .vscontent aura pour valeur « Code Snippet ». FileName sera le nom du fichier .snippet. Il faudra aussi ajouter un Attribute « lang » définissant le langage du Snippet : csharp, vjsharp, vb ou xml.

L'exemple suivant montre un fichier .vscontent permettant d'installer deux snippets de code, un en C#, l'autre en VB.Net :

<?xml version="1.0" encoding="utf-8"?>

<VSContent xmlns="http://schemas.microsoft.com/developer/vscontent/2005">

<Content>

<FileName>InstanceSnippetCSharp.snippet</FileName>

<DisplayName>Instanciation Visual C# Snippet</DisplayName>

<Description>Variable instanciation Visual C# Code Snippet</Description>

<FileContentType>Code Snippet</FileContentType>

<ContentVersion>1.0</ContentVersion>

<Attributes>

<Attribute name="lang" value="csharp" />

</Attributes>

</Content>

<Content>

<FileName>InstanceSnippetVB.snippet</FileName>

<DisplayName>Instanciation Visual Basic Snippet</DisplayName>

<Description>Variable instanciation Visual Basic Code Snippet</Description>

<FileContentType>Code Snippet</FileContentType>

<ContentVersion>1.0</ContentVersion>

<Attributes>

<Attribute name="lang" value="vb" />

</Attributes>

</Content>

</VSContent>

Il faudra donc zipper :

  • Le fichier .vscontent
  • Un ou plusieurs fichiers .snippet.

Vous pouvez utiliser l'assistant de création de package VSI disponible dans les VSI Power Toys à l'adresse : http://cid-262f6eeac88c4916.skydrive.live.com/browse.aspx/Public.

Lors de l'installation du VSI, il faudra que vous cochiez la case du dossier dans lequel vous voulez installer les Code Snippets :

Pour plus d'informations sur les VSI voir l'article « VSI : le déploiement pour Visual Studio ».

Trouver des Code Snippets

Vous pouvez utiliser votre moteur de recherche favori ou rechercher sur les sites DotNetJunkies ou GotCodeSnippets. En général les Snippets sont fournis dans un package VSI.

Références

Code Snippets Schema Reference

An Introduction to the New Visual Studio Snippet Format

Investigating Code Snippet Technology

How to: Publish Code Snippets

Code Snippet Editor for Visual Basic 2005

IntelliSense Code Snippets

A voir également
Ce document intitulé « Les code snippets » issu de CodeS SourceS (codes-sources.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Rejoignez-nous