Comment créer un gabarit de code avec ReSharper

À mon avis, ce qui caractérise le plus un développeur est l’attention qu’il porte aux outils utilisés pour accomplir ses tâches de travail. Que ce soit le clavier, l’éditeur texte ou simplement la configuration de son environnement de développement, il y a un souci d’optimiser à ses besoins ce qu’on utilise dans le quotidien.

Dans mon cas, lorsqu’il est temps de faire du C# avec Visual Studio, ReSharper est un incontournable. Vous n’avez jamais utilisé ReSharper? Prenez quelques minutes pour l’installer et revenez ici une fois que vous aurez terminé. Vous ne le regretterez pas.

Après les fonctionnalités de navigation de code et de refactoring, ce qu’il faut utiliser dans ReSharper c’est les gabarits de code. Qu’est-ce que c’est? Il s’agit d’une façon d’automatiser l’écriture de certains bouts de code que vous utilisez fréquemment.

Un exemple de code assez répétitif qui peut être automatisé avec des gabarits ReSharper est l’écriture de constructeur de classe. À chaque nouvelle classe, c’est la même histoire qui se répète. Toutefois, avec ReSharper il suffit de taper le raccourci ctor et vous serez en affaires!

ctor

Comment créer son premier gabarit de code ReSharper

Ce qui rend vraiment intéressante cette fonctionnalité est la possibilité de créer ses propres gabarits. À l’instant que vous remarquez que vous programmez quelque chose de répétitif, vous avez probablement une bonne occasion d’en faire un gabarit. Voici comment faire.

1. Visitez le menu Resharper \ Template Explorer

menu-resharper

2. Sélection de la catégorie pour le nouveau gabarit ReSharper

Si vous êtes du genre à aller droit au but, l’élément de menu dans l’encadré vert est là où vous devez cliquer pour passer à la création du gabarit.

template-explorer

3. Édition du gabarit ReSharper

gabarit

La création du code pour le gabarit est très simple. Comme je le présente dans l’image, il suffit de prendre un bout de code, de le copier/coller dans l’éditeur et de remplacer les petits bouts génériques par des variables. Les variables doivent commencer et se terminer par un signe $.

Dans ce cas-ci, j’ai nommé le raccourci de mon gabarit « fc ». Ceci veut donc dire que je vais pouvoir l’invoquer en utilisant cette combinaison dans mon code.

Je vous invite aussi à aller jeter un coup d’oeil aux macros que vous pouvez assigner à chacun des paramètres. Par exemple, pour un paramètre qui contiendra un type, vous pouvez demander à ReSharper d’activer la détection intelligente du type qui sera tapé par l’utilisateur.

 

Amusez-vous maintenant!

Les liens de la semaine – Édition #90

Développement

.NET

Technologie

Web

Science et autres

 

Le mystérieux cas de la navigation à la définition de vues ASP.NET MVC défectueux

Vous vous souvenez de mon mystérieux problème de coloration syntaxique dans mes vues ASP.NET MVC? Il s’avère que je n’avais pas tout dit à ce sujet.

En plus du problème que j’ai précédemment mentionné avec mes vues MVC, un nouvel irritant s’est ajouté suite à cette mise à jour à MVC 5.2. Le raccourci clavier me permettant de naviguer directement, à partir d’un contrôleur, à une vue avait disparu.

resharper

Oui, oui! Disparu! Pouf! Je n’étais simplement plus capable de l’utiliser. Misère!

Au minimum, ce que je pouvais affirmer de cette situation c’est que la fonctionnalité était fournie par l’extension ReSharper. Comme il n’y a pas de fumée sans feu. Je me doutais bien que la situation était produite par la mise à jour à MVC 5.2 et que ReSharper ne devait pas le digérer correctement.

Ceci étant dit, avant de crier au loup, j’ai été faire mes devoirs. Au moment que la situation s’est produite, j’avais la plus récente version de ReSharper installé sur mon poste et la totalité de mes extensions était à jour (par le menu Outils\Extensions et mises à jour). Alors, d’où pouvait donc provenir le problème?

La mise à jour manquante

Avant tout, je dois avouer que, une fois que j’ai trouvé la solution. Ma réaction a été celle-ci:

Cette fonctionnalité de ReSharper est possible grâce à un mécanisme appelé External Annotations. Cela permet à ReSharper de faire de l’analyse sur des bouts de codes spécifiques.

Or, pour chaque nouvelle version d’ASP.NET MVC, ces annotations doivent être mises à jour. Mais par où passe-t-on pour avoir cette nouvelle version des annotations?

Dites bonjour au gestionnaire d’extensions de ReShaper!

resharper-extensions

Remarquez qu’il s’agit de la même interface que pour le gestionnaire d’extensions de Visual Studio, mais utilisé spécifiquement pour ReSharper. C’est à cet endroit que vous pouvez y mettre à jour vos annotations externes et même installer d’extensions supplémentaires.

J’espère que vous aurez appris quelque chose en lisant ceci et que ce sera utile à quelqu’un!

Les liens de la semaine – Édition #89

Développement

.NET

Technologie

Web

  • GifMe.io, un outil à garder à proximité si vous aimez autant que moi les fichiers gif.

Science et autres

Le mystérieux cas de l’intellisense défectueux dans mes vues ASP.NET MVC

Depuis un certain temps, je travaille sur un nouveau projet. Le projet en soi, n’a rien de particulier. Il s’agit d’un site web corporatif très normal, utilisant ASP.NET MVC 5 et développé en utilisant Visual Studio 2013.

Je vous le promets. Peu importe l’angle avec lequel vous regardez ce projet, il n’y a rien de plus normal. En bref, c’est business as usual côté développement.

Malgré que ce projet est tout ce qu’il a de plus normal au monde, lorsque j’y développe des fonctionnalités dans les vues ASP.NET MVC quelque chose ne tournait pas rond. Toutefois, j’ai été un bon bout de temps à ne pas être en mesure de mettre le doigt sur la source de ce qui affectait une très petite fonctionnalité de l’éditeur de vues ASP.NET MVC.

mvc-intellisense-bug

Voici le problème en pleine action! Le voyez-vous? Il n’est pas très subtil dans le premier et il y a clairement quelque chose qui ne tourne pas rond dans le deuxième.

Ce que mentionne la deuxième prise d’écran est que l’analyseur de syntaxe Razor est incapable de comprendre ce que signifie l’élément HTML List<ProductsViewModel>. Louche, n’est-ce pas? Ce qui m’a longtemps laissé songeur est que le message d’erreur est seulement un symptôme et non pas un indicateur d’une solution possible.

À un fichier d’une solution

Au moment que je m’y attendais le moins, l’un de mes coéquipiers m’annonce qu’il a trouvé une solution à ce fichu de problème. Il s’avère que le fichier web.config situé dans le dossier Views n’était pas ajusté pour la version d’ASP.NET MVC que nous utilisions.


<?xml version="1.0"?>
<configuration>
<configSections>
<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
<section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
</sectionGroup>
</configSections>
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
</namespaces>
</pages>
</system.web.webPages.razor>
<appSettings>
<add key="webpages:Enabled" value="false" />
</appSettings>
<system.web>
<httpHandlers>
<add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/>
</httpHandlers>
<!–
Enabling request validation in view pages would cause validation to occur
after the input has already been processed by the controller. By default
MVC performs request validation before a controller processes the input.
To change this behavior apply the ValidateInputAttribute to a
controller or action.
–>
<pages
validateRequest="false"
pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<controls>
<add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
</controls>
</pages>
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<handlers>
<remove name="BlockViewHandler"/>
<add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
</handlers>
</system.webServer>
</configuration>

view raw

web.config

hosted with ❤ by GitHub

Comme je disais en préambule, le « très normal » projet avait été démarré en utilisant la version 4 d’ASP.NET MVC et il a été mis à jour à la version 5 en cours de route. Impossible de se souvenir ce qui a pu se passer. La piste la plus plausible est que le processus de mise à jour s’est égaré en cours de route.

En bout de compte, il s’agit d’un problème relativement mineur, mais il m’a obsédé pendant quelques jours. Je suis très content d’en avoir vu la fin!

La leçon de l’histoire est la suivante: le fichier web.config du dossier /Views est très important dans le fonctionnement de l’affichage de la coloration syntaxique de Razor. Assurez-vous qu’il soit mis à jour si vous mettez à jour votre projet à ASP.NET MVC 5.

À titre de référence, voici une copie du fichier pour MVC 5.2. Vous devez remplacer le contenu de la ligne 19 avec votre namespace.