Utiliser ReSharper avec Microsoft Visual Studio .NET

LEBRUN Thomas

Visual Studio .NET, l'IDE de développement de Microsoft, est un outil complet et très puissant. Malgré cela, certains d'entre vous peuvent penser qu'il lui manque pas mal de fonctionnalités que l'on peut retrouver de base dans des IDE tels qu'Eclipse.
Nous allons donc voir comment utiliser et exploiter au mieux ReSharper pour augmenter votre productivité sous Visual Studio 2003.

N'hésitez pas à commenter cet article ! Commentez ♪

- Titre : Utiliser ReSharper avec Microsoft Visual Studio .NET

- Auteur : LEBRUN Thomas

- Parution : 27 avril 2005

- Licence : Copyright ® 2005 LEBRUN Thomas. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Introduction

- II. Téléchargement et Installation

- III. Les Options

- IV. Fonctionnalités générales

- V. Fonctionnalités techniques

- V-A. Refactoring

- V-B. Autres Fonctions

- V-B-1. Error Highlighting

- V-B-2. Optimize using

- V-B-3. Reformat code

- V-B-4. Live Templates

- VI. Conclusions

- VII. Liens

I - Introduction

ReSharper, est un Add-In pour Visual Studio .NET, développé par JetBrains.

Si j'ai choisi de vous parler de celui-ci en particulier, c'est parce qu'il offre, selon moi, toutes les fonctionnalités présentes de base dans d'autres IDE (tels que Eclipse), et qui permettent une amélioration de la productivité (refactoring, code snippet, etc.).

Si vous avez déjà essayé la future version de Microsoft Visual Studio, vous connaissez déjà ces fonctionnalités. Cependant, vous n'avez pas la possibilité de les utiliser actuellement avec Visual Studio 2003 : c'est maintenant possible.

À noter que ReSharper n'est utilisable qu'avec le langage C# : peut-être pourra-t-on trouver une version pour VB.NET dans quelque temps.

II - Téléchargement et Installation

ReSharper est téléchargeable, en anglais, à cette adresse : http://www.jetbrains.com/resharper/download/.

Actuellement en version 1.5, une version 2.0 devrait voir le jour prochainement, apportant, comme toujours, des améliorations aux versions précédentes.

Une fois que vous avez téléchargé l'exécutable d'installation, vous devez avoir une licence valide pour utiliser le logiciel.

L'achat d'une licence de ReSharper est de $149, mais vous avez la possibilité de demander une licence d'évaluation, qui vous permettra de tester le produit, sans aucune limitation, pendant une période de 30 jours.

L'installation ne pose aucun problème particulier : double-cliquez sur le fichier d'installation et suivez les consignes qui s'affichent à l'écran. À la fin de l'installation, relancez Visual Studio et entrez les informations de licence que vous avez reçues par email.

Vous devriez maintenant avoir un nouveau menu intitulé ReSharper, dans lequel vous avez un sous-menu nommé «  License Information » et qui vous permet de visualiser la licence en cours d'utilisation :

À partir de maintenant, vous êtes prêt à utiliser les fonctionnalités de cet Add-In.

III - Les Options

Dans ReSharper, tout (ou presque) est configurable grâce au menu Options :

Grâce aux options, vous aurez la possibilité de dire à Resharper, comment formater votre code, à quel endroit placer un espace ou une virgule : après une parenthèse, avant un point-virgule, etc.

Vous pourrez lui dire de sauter une ligne après avoir inséré, automatiquement, une accolade ouvrante ou fermante. Pour simplifier, vous pourrez, à votre guise, organiser l'indentation et la structure de votre code.

Vous aurez également la possibilité de définir vos propres Code-Snippets (à noter que Code-Snippets est le nom utilisé dans Visual Studio2005 : ReSharper appelle cela des Live Templates, ou encore Surround With).

Les Code-Snippets sont des bouts de code, écrits à l'avance, et que vous pouvez réutiliser simplement en utilisant une combinaison de touches. Par exemple, si vous écrivez les lettres «  loop » et que vous appuyez sur la touche Tabulation, Visual Studio, grâce à ReSharper, générera automatiquement une simple boucle «  for » dans laquelle vous n'aurez qu'à changer le nom des variables : pratique non ;) Les Surround With, quant à eux, sont également des bouts de code utilisés pour gagner du temps : vous choisissez le type de code que vous voulez utiliser (un bloc try/catch, un bloc #region/#endregion, etc.) et Visual Studio se charge d'écrire le code à votre place.

Là encore, il ne vous reste plus qu'à finir d'écrire le contenu du code.

Il existe encore beaucoup d'autres options dans ReShrper (police utilisée, affichage des pop-up, etcâ€¦), mais je préfère concentrer cet article sur ce qui est vraiment important. Pour le reste, c'est à vous d'être un peu curieux.

IV - Fonctionnalités générales

Parmi les fonctionnalités (autres que techniques) qu'il propose, ReSharper vous permet par exemple d'effectuer des recherches avancées.

En effet, le menu «  Search » vous permet de rechercher et d'accéder à toutes les utilisations d'une variable ou d'une méthode. Il vous permet également de mettre en surbrillance ces mêmes utilisations de variables, dans le fichier en cours (ce qui peut s'avérer très pratique lorsque vous souhaitez déboguer par exemple).

L'option la plus intéressante du menu «  View » (et celle qui risque de vous servir le plus) est sans doute «  File Structure » : en effet, cela vous permet d'afficher une fenêtre vous présentant la liste des propriétés, méthodes, etc. de votre code, et d'y accéder rapidement au moyen d'un double-clic. C'est l'équivalent, dans Visual Studio, de la liste déroulante de vos méthodes/variables, mais présentée de manière beaucoup plus claire et mieux agencée.

Le menu «  Go To » présente également des fonctions intéressantes, telles que la possibilité d'ouvrir n'importe quel fichier depuis Visual Studio, ou bien encore d'atteindre directement la définition d'une variable ou d'une méthode.

Bien entendu, ce n'est qu'un rapide aperçu vous présentant les fonctions les plus intéressantes : je vous laisse tout le loisir de découvrir, par vous-même, toutes les autres possibilités offertes par ce menu, et je vais maintenant passer aux fonctionnalités plus techniques.

V - Fonctionnalités techniques

V-A - Refactoring

ReSharper offre beaucoup de fonctionnalités de refactoring :

Comme vous pouvez le voir, vous avez la possibilité de gagner un maximum de temps. En effet, voici une liste (non exhaustive) de ce que vous pouvez faire :

- Renommer une variable ou une méthode : dans tout le reste de votre code, les références correspondantes sont renommées ;

- Changer la signature d'une méthode : ajouter/supprimer/modifier un paramètre; changer le paramètre de retour, etc. ;

- Création d'une méthode depuis un bout de code ;

- Ajouter une variable ;

- Convertir une méthode en propriété et vice-versa ;

- Extraire une interface ;

- Générer automatiquement les accesseurs (getter/setter).

Une liste pour le moins intéressante de possibilités s'offre à vous, et pour mieux vous les faire comprendre, je vais vous les montrer en images :
Création d'une méthode depuis le code :

Création d'une méthode depuis le code

try
{
Console.WriteLine("toto");
throw new CheckoutException();
}
catch(CheckoutException ex)
{
tool.WriteException(ex);
Console.WriteLine(ex.StackTrace);
}

Utilisation de l'assistant ReSharper :

Résultat :

Résultat de la création de méthode

try
{
Console.WriteLine("toto");
throw new CheckoutException();
}
catch(CheckoutException ex)
{
MaMethode(ex);
Console.WriteLine(ex.StackTrace);
}

private static void MaMethode(DebuggingTools.DebuggingTools tool, CheckoutException ex)
{
tool.WriteException(ex);
}

Modification de la signature d'une méthode :

Modification de la signature d'une méthode

public void SendByEmail(string sEmail, string SMTPServer)

Utilisation de l'assistant ReSharper :

Résultat :

Résultat de la modification de la signature de la méthode

public void SendByEmail(string sEmail, string SMTPServer, int iTest)

Conversion d'une méthode en propriété :

Conversion d'une méthode en propriété

public void WriteToEventLog(string sEventText)
{
string sSource = "DebuggingTools Application";
string sLog = "DebuggingTools";

if (!EventLog.SourceExists(sSource))
{
EventLog.CreateEventSource(sSource, sLog);
}

EventLog.WriteEntry(sSource, sEventText, EventLogEntryType.Information);
}

Utilisation de l'assistant ReSharper :

Résultat :

Résultat de la conversion d'une méthode en propriété

public string WriteToEventLog
{
set
{
string sSource = "DebuggingTools Application";
string sLog = "DebuggingTools";

if (!EventLog.SourceExists(sSource))
{
EventLog.CreateEventSource(sSource, sLog);
}

EventLog.WriteEntry(sSource, value, EventLogEntryType.Information);
}
}

Génération automatique des accesseurs (getter/setter) :

Génération des accesseurs

public DebuggingTools(DestinationFolder folder)
{
this.writer = new StreamWriter(Environment.GetFolderPath((Environment.SpecialFolder) folder) +
@"\" + sFilename, false, Encoding.Default);
this.writer.AutoFlush = true;
}

Utilisation de l'assistant ReSharper :

Résultat :

Résultat de la génération des getter/setter

public StreamWriter Writer
{
get { return writer; }
set { writer = value; }
}

Vous venez donc de voir une bonne partie des fonctionnalités de refactoring de ReSharper. Bien sûr, il est possible de faire encore bien d'autres choses à ce niveau-là, je ne me suis permis de vous montrer que ce que je considérais comme le plus important.

Nous allons maintenant voir les autres possibilités de ReSharper.

V-B - Autres Fonctions

Resharper possède plusieurs autres fonctionnalités, pour le moins intéressantes, et que je vais tenter de vous présenter.

V-B-1 - Error Highlighting

Un des points forts de ReSharper est de pouvoir vous signaler les erreurs, sans qu'une recompilation de votre application ne soit nécessaire.

En effet, au fur et à mesure que vous tapez votre code, ReSharper l'analyse et vous indiquera toutes les erreurs de syntaxe ou les erreurs logiques que vous écrivez.

Il vous permet également de détecter et de vous avertir des non initialisées ou bien non utilisées, etc.

Lorsqu'il détecte une erreur, Resharper vous propose, au moyen d'une petite lampe, une ou plusieurs solutions pour résoudre votre problème : c'est donc à vous d'utiliser la solution adéquate.

Des images étant généralement plus parlantes que du texte, voici quelques copies d'écran :

ReSharper vous permet donc d'avoir le code le plus propre et le plus optimisé possible (pas de variables déclarées, mais jamais instanciées ou utilisées, etc.).

V-B-2 - Optimize using

«  Optimize using » est une autre des fonctions intéressantes de ReSharper. Son but, relativement simple, est juste d'arranger au mieux les using de votre application.

Ainsi, on s'assure qu'il n'y a pas de using redondants (c'est-à-dire qui apparaissent deux fois ou plus) et, fonctionnalité bonus, qu'ils sont correctement rangés par ordre.

Pour accéder à cette fonction, cliquez sur le menu ReSharper, puis allez sur «  Code » et choisissez «  Optimize using ». Là, vous devriez voir cette fenêtre :

Cliquez sur le bouton «  Optimize » et observez le résultat au niveau de vos using :

Liste des using non optimisée

// using non optimisé
using System;
using System.Windows.Forms;
using System.Collections;
using System.Drawing;
using System.ComponentModel;
using System;
using System.ComponentModel.Design;

et voici le résultat après l'optimisation :

Liste des using optimisée

// using optimisé
using System;
using System.Collections;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Drawing;
using System.Windows.Forms;

C'est tout de même plus agréable ne trouvez-vous pas ;)

V-B-3 - Reformat code

Reformat code est une fonction qui plaira à tous ceux qui ont l'habitude d'écrire leur code, mais sans se soucier de l'indentation, des espaces, etc.

Elle permet de reformater votre code, en fonction des options que vous avez définies dans le menu «  Options » : par exemple, pas d'espace après une parenthèse, un saut de ligne après une accolade, bref ce genre de chose.

C'est donc une option très pratique qui vous permet d'améliorer grandement la lisibilité de votre code, chose qui n'est nullement négligeable, surtout si vous êtes plusieurs à travailler sur un même projet.

Code non reformaté

// Code non reformaté
for(int i=0; i<=300; i++)
{Console.WriteLine(i.ToString());}

tool.ShowAssembliesList();

tool.WriteDateTime();

int j = 3;
ArrayList t = new ArrayList();
t.Add(1);t.Add(2);t.Add(334);
t.Add(4);
t.Add(5);t.Add(6);

Je vous l'accorde, ce bout de code reste lisible, mais pas très agréable tout de même ! Voyons ce que la fonction «  Reformat Code » nous donne comme résultat.

Pour cela, vous avez deux possibilités :

- Dans Visual Studio, faites un clic droit sur votre code et choisissez «  Reformat Code » ;

- Toujours dans Visual Studio, cliquez sur le Menu ReSharper, allez dans le sous-menu Code et choisissez «  Reformat Code »

À ce moment-là, une fenêtre devrait s'ouvrir, vous demandant quelles actions vous souhaitez exécuter (en effet, vous avez également la possibilité d'optimiser les using depuis cette commande).

Pour plus de simplicité, sélectionnez tout et cliquez sur le bouton «  Reformat » pour voir votre code se reformater automatiquement :

Voici un exemple de résultat :

for (int i = 0; i <= 300; i++)
{
Console.WriteLine(i.ToString());
}

tool.ShowAssembliesList();

tool.WriteDateTime();

int j = 3;
ArrayList t = new ArrayList();
t.Add(1);
t.Add(2);
t.Add(334);
t.Add(4);
t.Add(5);
t.Add(6);

C'est tout de suite mieux, ne trouvez-vous pas ;)

V-B-4 - Live Templates

La dernière fonction que nous allons voir concerne les «  Live Templates », que l'on peut trouver également sous le nom de «  Code Snippets » dans Visual Studio 2005.

L'une des tâches les plus laborieuses, lorsque l'on développe une application, est de devoir réécrire, de nombreuses fois, les mêmes bouts de code, tels que des boucles for, foreach, etc.

Pour vous permettre d'aller plus vite dans votre développement, ReSharper vous offre la possibilité de programmer des combinaisons de touches représentant des fragments de code prédéfinis, qui peuvent «  interagir » avec le développeur, lorsque celui-ci les utilise.

Pour cela, rien de plus simple : vous n'avez qu'à taper la combinaison de lettres adéquates (bien souvent, il s'agit de l'abréviation du bout de code que l'on veut utiliser) et d'appuyer sur la touche Tabulation, afin que le code soit autocomplété par ReSharper.
Voici ce que cela donne, en images :
On tape le mot-clé ou la combinaison de touches nécessaires :

On appuie sur Tabulation pour compléter le code :

À ce moment-là, vous avez la possibilité de changer le nom et le type des variables créées par ReSharper, toujours en utilisant la touche Tabulation :

L'exemple que je viens de vous montrer est pour une boucle foreach, mais sachez qu'il existe beaucoup d'autres «  Live Templates » disponibles, et que vous avez même la possibilité d'en ajouter vous-même grâce au menu «  Options ».

Voici une liste (non exhaustive) des combinaisons de touches que vous devez utiliser pour utiliser les Live Templates :

Raccourci

Résultat

asrt

Fait une assertion (Debug.Assert())

ear

Créée un nouveau tableau

foreach

Créée une boucle foreach

ital

Parcourt une ArrayList

itar

Parcourt un tableau

loop

Crée une simple boucle

ritar

Parcourt un tableau en sens inverse

sfc

Caste une variable proprement

toar

Convertit une ArrayList en tableau

VI - Conclusions

ReSharper est un outil formidable : il permet un gain de temps (et donc, une amélioration de la productivité) considérable. Les fonctionnalités offertes ne peuvent être qu'appréciables, car on les retrouve de base dans Microsoft Visual Studio 2005 (Nom de code : Whidbey).

C'est un outil que l'on ne peut que conseiller, car, si vous êtes comme moi : une fois que vous l'aurez essayé, il vous sera difficile de vous en passer.

Une note : le minimum de RAM requis pour utiliser ReSharper est de 256 Mo, mais il est recommandé de posséder 512 Mo de RAM. Vous pourriez trouver que cela fait beaucoup, mais gardez à l'esprit que le logiciel analyse votre code en temps réel : c'est pourquoi il est assez gourmand en ressources.

À bientôt.

VII - Liens

Site Web de ReSharper : http://www.jetbrains.com/resharper/index.html
Téléchargement de ReSharper : http://www.jetbrains.com/resharper/download/
Support pour ReSharper : http://www.jetbrains.com/support/resharper/