Laurent Kempé
Utiliser Resharper Search with Pattern pour vous protéger de votre code
Utilisation des possibilités d’analyse de code de Resharper afin de se protéger de certaines erreurs de programmation.
Par Laurent Kempé publié le 18/11/2010 à 20:50, lu 3038 fois,
Aujourd'hui, j'ai été confronté à un bug qui m’a donné du fil à retordre, un null pointer exception dans une propriété databound à une application WPF. Cela a eu des effets secondaires désagréables, et évidement cette partie du code n'avait pas de test unitaire!
La ligne de code était pourtant très simple :

Values.Where(model => model.IsSelected).FirstOrDefault().Refresh();

Je suppose que vous voyez le problème! Si ce n'est pas le cas, voici ce que dit la documentation MSDN:
« Retourne le premier élément d'une séquence ou une valeur par défaut si la séquence ne contient aucun élément. »
Oui, la méthode FirstOrDefault() peut renvoyer la valeur null, donc si vous enchaînez un appel à une autre méthode, crash assuré!
Bien entendu nous savons cela! Nous utilisons cette méthode à cet effet, mais une erreur peut se produire très rapidement !
J’ai donc décidé que je voulais être protégé par mes outils de ce genre d’erreur. Donc je suis retourné lire le post "Introduction ReSharper 5.0 : structurel rechercher et remplacer »
Après plusieurs essais et l’aide d’Ilya (merci!) J'ai enfin trouvé la façon correcte d'exprimer ce que je voulais. Mon objectif était de trouver tout le code qui utilise la méthode FirstOrDefault(), suivi d'un appel à une autre méthode. Exactement comme dans mon exemple.
  • $enumerable$.FirstOrDefault().$method$()
  • enumerable is an Expression of type System.Collections.IEnumerable or derived type
  • method is a identifier placeholder with an empty indentifier name regexp
 
/content/722eb506-5ce3-4761-976e-27b4589ca2ea/image1.png
 
J'ai ensuite vérifié que cette erreur était bien identifiée. Et aussi heureusement que c'était la seule erreur de ce genre dans notre application.
 
/content/722eb506-5ce3-4761-976e-27b4589ca2ea/image2.png
 
Puis je l'ai ajoutée au Catalogue de modèle de resharper, pour afficher un avertissement.
 
/content/722eb506-5ce3-4761-976e-27b4589ca2ea/image3.png
 
Maintenant, si jamais je tape ce bout de code, Resharper mon outil préféré, m’avertira que je suis stupide d’essayer cela !
 
/content/722eb506-5ce3-4761-976e-27b4589ca2ea/image4.png
 
Sinon je vous recommande de télécharger les exemples depuis le blog post «exemple SSR pattern catalogue disponible pour téléchargement ». Ce sont des exemples sympas et ils pourraient vous être utiles pour écrire les vôtres.
 
» Démarrer une discussion