Présentation

ReSharper est un add-in pour Visual Studio qui se présente lui-même comme l'add-in le plus " intelligent ". Il y a trois ans, Thomas Lebrun présentait la version 1.5 de ReSharper et ses fonctionnalités, et ReSharper était alors déjà reconnu comme le meilleur add-in pour Visual Studio.

Il y a peu, sortait la version 4.0 de ReSharper, toujours plus optimisé, plus complète, avec des dizaines de nouvelles fonctionnalités comme la prise en charge de LINQ, et au cours de ce test, nous allons découvrir plus en détails certaines de ses fonctionnalités et voir si réellement, cet add-in mérite sa réputation.

1. Téléchargement et installation

Je ne vais pas parler en détail de cette étape puisque vous pouvez télécharger très simplement une version d'essai de 30 jours à l'adresse suivante http://www.jetbrains.com/downloads.html et l'installer sur votre ordinateur. ReSharper est capable de détecter les versions de Visual Studio installées et de se configurer automatiquement (Il est compatible avec VS 2005 et VS 2008).

Une fois installé, vous n'avez qu'à lancer Visual Studio et accepter le contrat utilisateur de la version d'essai et saisir votre licence si vous en avez une.

2. Les fonctionnalités

2.1. Refactoring amélioré

Pour rappel, le refactoring est le fait de modifier le code pour le rendre plus propre et/ou plus optimisé sans changer son comportement (pas de réécriture de nouvelle méthode, classe ou autre).

Si ma mémoire est bonne, le premier vrai refactoring est apparu avec Visual Studio 2005. Pourtant, il était déjà possible grâce à ReSharper d'avoir des fonctionnalités équivalentes. Ce qui aujourd'hui vous parait normal comme l'encapsulation d'un membre pour en faire une propriété, l'extraction d'une méthode ou tout simplement le renommage récursif d'un objet, tout ceci n'était alors pas possible sans ReSharper. Maintenant c'est possible par défaut mais ReSharper fait tout en mieux et il le fait pour presque tout ce qui est utilisable dans Visual Studio : C#, VB.NET, ASP.NET, XML, XAML et build scripts.

Prenons pour exemple des refactorings simples mais utiles. Nous avons tout d'abord l'optimisation des using qui consiste à supprimer les using inutiles.

Vous pouvez également changer la signature d'une méthode en ajoutant, éditant ou supprimant des paramètres. La capture suivante montre à gauche la fenêtre de Visual Studio pour cette action, et à droite, celle, plus avancée de ReSharper.

Image non disponible
Image non disponible

Vous avez également des fonctionnalités toutes simples comme le safe delete, qui, avant de supprimer un objet, vérifie que celui-ci n'est pas appelé ailleurs. Il n'est alors plus nécessaire de regénérer la solution pour voir si l'on pouvait le supprimer ou non.

Pour plus d'infos sur les différents refactorings possibles, cliquez ici

2.2. Le code inspection

L'une de mes fonctionnalités préférées est le code inspection. Il s'agit d'une analyse en arrière plan du code de vos classes ou simplement de vos fichiers XML/XAML. L'inspection regarde votre code pour lister dans la partie droite de l'éditeur, les erreurs, les warnings et les optimisations possibles un peu comme vous pouvez déjà le trouver dans d'autres éditeurs connus comme Eclipse (pour faire du JAVA entre autres).

Image non disponible

A partir de cette barre de droite, vous pouvez cliquer sur le signet, ce qui vous amènera directement à la ligne incriminée et de là, en cliquant sur la petite icône apparaissant en début de ligne, vous pourrez choisir l'action à entreprendre.

2.3. Code cleanup

Le code cleanup est une action, via un seul bouton qui permet d'un seul coup d'automatiser plusieurs tâches basiques, de formatage de code et de faire du refactoring. Il existe deux modes par défaut, le mode complet et le mode format qui ne fait que du formatage.

Il est bien entendu possible, via les options de créer votre propre mode et de choisir les actions qu'il fait

Image non disponible

2.4. Amélioration de la productivité

Ce sont souvent des toutes petites choses, une seconde grappillée par là, une autre par ici, qui font que l'on gagne un temps non négligeable dans le développement d'applications conséquentes. Ainsi, plus vous aurez un gros projet, plus ces améliorations auront une réelle plus-value.

Avec ReSharper, la productivité est améliorée par les fonctionnalités de code inspection et de refactoring qui évitent (ou plutôt réduisent) le process de test et de vérification du code, mais c'est aussi et surtout des petites choses qui vous simplifient les tâches les plus courantes.

Ainsi, vous avez des raccourcis qui, lorsque vous commencez à saisir la signature d'une méthode, vous permettent en tapant ctrl+Maj+Entrée, de fermer la parenthèse, de créer les accolades et de place correctement votre curseur. Vous avez également le CamelHumps, qui vous permet de saisir uniquement les majuscules du nom d'une classe pour que l'auto-completion sache trouver cette classe. Dans l'exemple suivant, plutôt que de taper ProcessPriorityClass, il me suffit de saisir " PPC ", de faire ctrl+espace et de choisir les classes qui correspondent à ce pattern.

Enfin, vous avez les snippets qui, à partir d'un mot clé, comme " foreach " vous permet d'un seul raccourci clavier d'écrire la structure de la boucle foreach et de saisir uniquement les propriétés manquantes (compteur, limite, incrémentation).

2.5. Support de LINQ et de C# 3.0

ReSharper 4.0, est maintenant capable de prendre en charge la dernière mouture de C# mais également des petites nouveautés (si l'on peut dire) comme LINQ. Cette prise en charge peut se voir au niveau de toutes les fonctionnalités de ReSharper.

- Refactoring adapté au C# 3.0 comme les nouveaux initialiseurs d'objets. L'utilisation du mot-clé " var ", la conversion en expression lambda, les auto-propriétés, etc

Image non disponible
Image non disponible


- Nouveau code-inspection sur ces spécificités du langage C# 3.0
- Auto-complétion capable de prendre en charge les méthodes d'extension ou la possibilité de générer des expressions lambdas dans certains cas de figure
- L'ajout de snippets spécifiques à l'écriture de requêtes LINQ comme le join et le from.

Image non disponible

3. Autres fonctionnalités

3.1. La personnalisation des fonctionnalités

Une chose qu'il est important de préciser avec ReSharper est qu'il n'est pas intrusif. Par défaut, en raison de son grand nombre de fonctionnalités, il est nécessaire de créer un certain nombre de menus et de comportement dans Visual Studio mais il est possible de choisir le niveau d'intégration dans l'IDE.
Cela peut se faire de deux manières :
- Via les options
- Via l'explorateur de templates

1- Les options

Ce qui est considérable avec ReSharper, c'est son nombre d'options qui permettent de le personnaliser très très finement. Nous pouvons tout d'abord choisir le niveau d'intégration de l'add-in avec ses menus, la façon dont ils apparaissent et aussi les fonctionnalités qu'ils proposent. ReSharper propose par exemple, son propre menu d'auto-complétion.

Image non disponible


Il existe aussi une grande partie d'options concernant le formatage du code, tout cela en plus du formatage possible par Visual Studio.

Image non disponible


Enfin, et plus important, vous pouvez personnaliser l'inspection du code (vue dans le chapitre précédent) pour définir quelles types d'erreurs ou d'optimisations ReSharper vous proposera. Il est au même endroit possible de contrôler le comportement de ReSharper avec le code comme définir les expressions régulières qui aident à faire fonctionner l'explorateur de TODO ou encore le nettoyeur de code XML.

Image non disponible

2- Les snippets

Les snippets existent depuis un certain moment mais ReSharper propose lui aussi les siens. Cela peut aller des snippets courants comme les boucles for ou foreach, aux snippets tous simples qui permettent en tapant trois lettres de déclarer une propriété (getsetter) et ce, de façon plus rapide que le bouton droit > Refactor > Encapsulate field.
Bien entendu, il est possible de personnaliser les snippets existants et/ou d'y ajouter les vôtres.

Image non disponible

3.2. L'ajout de plugins

Qu'est ce qu'un add-in sinon un plugin. Et bien, malgré que ReSharper soit un plugin pour Visual Studio, il est possible d'ajouter des plugins à ReSharper. ReSharper compte déjà neuf plugins officiels qui ont pour la plupart, comme objectif, d'affiner une fonctionnalité spécifique de ReSharper. Ainsi, nous trouverons des plugins comme Agent Smith qui, un peu comme le fait FxCop, permet de vérifier des conventions de nommage pour avoir un code propre.
Mais vous trouverez également des plugins facilitant l'utilisation de NHibernate (pour faire de l'ORM) ou encore log4net (pour le logging) ou encore des plugins, dédiés au Unit Testing et permettant d'utiliser NUnit, xUnit, MbUnit ou encore MSTest pour améliorer l'étape de test de vos applications.

Pour avoir des infos plus détaillées sur les plugins existants, vous pouvez vous rendre sur la page suivante.

Conclusion

Je suis quelqu'un de très porté sur l'ajout de fonctionnalités à des outils déjà existants et il y a peu encore, je m'intéressais même à la création d'add-ins pour Office ou pour Visual Studio. Pourtant depuis Visual Studio 6 (la première version que j'ai jamais utilisé), je n'ai jamais trouvé d'add-in valant le coup d'être installé ou gardé sur Visual Studio, outil on ne peut plus complet.

Pourtant, j'ai découvert ReSharper du temps de Visual 2003 et le refactoring était déjà alors LA fonctionnalité qui justifiait son achat. Avec la venue de Visual Studio 2005, ReSharper devenait moins intéressant et a valu sa mise de côté, de la part de beaucoup de développeurs de mon entourage. Aujourd'hui, avec sa version 4.0, ReSharper revient sur le devant de la scène et peut se targuer sans conteste, d'être l'add-in le plus complet pour Visual Studio et ajoutant un grand nombre de fonctionnalités améliorant la fiabilité des problèmes et la vitesse de développement.

Remerciements

Un grand merci à Adrien Artero pour ses conseils et corrections pour cet article.