Analyse du code C#
Utilisez-vous des variables temporaires pour échanger les valeurs des variables ? Il y a maintenant un moyen plus simple et efficace pour y parvenir. ReSharper 2021.2 vous permet de moderniser votre code avec le nouveau correctif Swap via deconstruction.
Il y a de nouvelles inspections avec les correctifs rapides correspondants. Vous pouvez remplacer la création de tableaux vides avec Array.Empty<T>. Si vous allouez un nouveau Type[0], ReSharper suggérera d'utiliser Type.EmptyTypes pour optimiser l'utilisation de la mémoire. Et si des EventArgs spécifiques ne sont pas nécessaires, ReSharper vous indiquera que vous pouvez remplacer new EventArgs() par EventArgs.Empty.
Types de référence nullables (NRT)
Avez-vous beaucoup de suppressions d'avertissements de type nullable dans votre base de code après avoir activé les types de référence nullables ? ReSharper indique les suppressions (!) qui ne sont plus nécessaires et qui peuvent être supprimées en toute sécurité. Une nouvelle action contextuelle vous permet de rechercher toutes les suppressions d'avertissements de type nullable dans la portée. À partir de la fenêtre d'outils Find Results, vous pouvez alors réévaluer si les suppressions sont nécessaires ou non.
JetBrains a introduit une nouvelle refactorisation pour modifier les valeurs nullables. Elle est disponible via un correctif rapide, avec l'action Refactor This ou une refactorisation in-place lors de l'ajout ou de la suppression de l'annotation nullable (?). ReSharper mettra à jour les annotations de nullabilité et suggèrera d'appliquer les modifications dans l'ensemble de votre base de code.
Plusieurs nouvelles inspections avec des correctifs rapides correspondants sont disponibles lorsque vous utilisez les attributs JetBrains.Annotations et que les types de référence nullables sont activés. Mettez à jour les attributs de JetBrains.Annotations vers la syntaxe NRT et les attributs pris en charge par le compilateur. Par exemple, ReSharper peut mettre à jour [CanBeNull] string par string?. ReSharper vous informera des attributs JetBrains.Annotations redondants, tels que [NotNull] string ou [ItemCanBeNull] List<string?>. Et bien entendu, il fournira un correctif rapide pour mettre à jour votre code.
Lorsque la syntaxe annotation de type n'est pas autorisée, une nouvelle inspection avec un correctif rapide ajoute les annotations prises en charge par le compilateur, par exemple :
- [JetBrains.Annotations.NotNull] T param en [DisallowNull] T param (where T: class?)
- [JetBrains.Annotations.CanBeNull] T en [System.Diagnostics.MaybeNull] T (en C# 8, où la syntaxe T? n'est pas autorisée)
ReSharper ajoute de nouvelles inspections et des correctifs rapides pour vous aider à utiliser 4 annotations prises en charge par le compilateur, telles que [DisallowNull], [AllowNull], [MaybeNull] et [NotNull]. Une nouvelle inspection détecte les annotations redondantes du compilateur, comme lorsque [AllowNull] est appliqué à un type nullable, et un correctif rapide les supprime. Lorsque la syntaxe du type de référence nullable peut être utilisée, ReSharper suggère cette option.
D'autres améliorations méritent également d'être soulignées :
- ReSharper vérifie si les variables doivent être nullables et produit des types plus stricts lorsque cela est possible.
- De nombreuses actions contextuelles, correctifs rapides et modèles postfix ont été mis à jour afin de mieux fonctionner avec les suppressions d'avertissement nullables. Ils préservent les suppressions d'avertissement nullables ou les génèrent pour le code introduit si le code initial a supprimé l'avertissement.
- JetBrains a amélioré la prise en charge de l'utilisation de génériques avec les types de référence nullables.
Prise en charge des générateurs de code source
Les générateurs de code source peuvent être utilisés pour réduire les tâches de développement fastidieuses et répétitives et pour générer du code au moment de la compilation. Dans ReSharper 2021.2, de nombreuses fonctionnalités disponibles pour les fichiers de code écrits manuellement le sont également pour les fichiers sources générés. JetBrains a amélioré l'assistance de l'éditeur, optimisé le débogueur et ajouté la prise en charge de l'analyse des erreurs à l'échelle de la solution (SWEA) et des refactorisations.
Pour le code généré, les avertissements et les erreurs sont affichés dans l'éditeur et dans la Marker Bar. L'analyse des erreurs à l'échelle de la solution (SWEA) inclut désormais les fichiers générés par les générateurs de code source. Si une erreur se produit dans un fichier généré dans votre projet, vous pourrez la repérer immédiatement et y accéder. Vous pouvez activer ce comportement à l'aide de la nouvelle option d'inclusion des fichiers sources générés, qui est activée par défaut et située dans ReSharper | Options | Code Inspection | Settings | Enable solution-wide analysis.
Les refactorisations peuvent désormais être déclenchées à partir de fichiers sources générés. Utilisez la refactorisation Rename pour renommer une propriété générée. ReSharper renommera également le symbole correspondant dans le code écrit manuellement. De même, Change Signature vous permet de vérifier si le code qui est généré après la modification peut toujours être compilé.
Vous avez également la possibilité d'utiliser Find Usages, de rechercher des éléments hérités, de naviguer du code généré au code écrit manuellement (avec Ctrl+Clic et Navigate To) et plus encore. La mise en évidence des éléments sémantiques est activée afin que les membres de la classe tels que les événements, les champs et les propriétés, soient mis en évidence correctement. Tous les conseils d'insertion sont également affichés.
Des conseils de données propres à ReSharper sont affichés pendant le débogage. Cela permet notamment une prise en charge avancée du débogage avec la fonction de recherche et la mise en évidence des propriétés. Notons encore que ReSharper prend désormais en charge le code généré par les générateurs de code source en VB.NET.
Prise en charge des chaînes URI HttpClient
Dans la version précédente, JetBrains a mis en place la prise en charge des modèles de route ASP.NET. Dans la version 2021.2, l'éditeur de logiciels a continué dans cette direction et apporte une meilleure prise en charge des chaînes URI HttpClient :
- Lors de l'utilisation de HttpClient, la saisie semi-automatique du code suggère tous les URI qui peuvent être résolus en actions dans les contrôleurs annotés avec les attributs [Route], [Http{Method}] ou [AcceptVerbs].
- Vous pouvez facilement naviguer entre les attributs de route dans les contrôleurs et ces URI en utilisant Go to Declaration et Find Usages.
- Renommer une route d'attribut dans un contrôleur affecte ses utilisations dans les URI et vous pouvez également renommer une route directement à partir de la chaîne URI.
Navigation
Plusieurs fonctionnalités utiles ont été ajoutées pour la navigation :
- Lors du débogage, ReSharper a une meilleure compréhension de votre code. Cela vous permet de naviguer depuis une référence d'interface directement vers son implémentation avec Go To Declaration (ou Ctrl+Clic).
- La liste Go To Base/Inheritor affiche désormais aussi les remplacements (overrides) cachés.
Style et mise en forme du code
Il peut parfois être utile de spécifier des règles de dénomination avancées pour les enregistrements, les méthodes d'extension et les variables Catch. Avec cette version, il est maintenant possible de configurer ces règles.
Si vous préférez utiliser un style d'accolade (indentation) Pico, il y a ce qu'il vous faut. Le style Pico a été ajouté comme option dans l'onglet Brace Layout sur la page ReSharper | Options | Code Editing | C# | Formatting Style | Braces Layout.
JetBrains a modifié les préférences de mise en forme par défaut dans quelques cas pour les aligner sur les valeurs par défaut de Visual Studio.
Refactorisation Inline Function pour C++
Avec la nouvelle refactorisation Inline Function, vous pouvez rapidement remplacer un appel de fonction par le corps de la fonction. ReSharper C++ effectue les modifications nécessaires, gère les conflits de noms et reformate le code résultant de la refactorisation.
Conseils de conversion de type C++
ReSharper C++ 2021.2, également disponible, introduit des conseils d'insertion pour les conversions de type implicites qui peuvent causer des pertes de données ou des problèmes de performance. ReSharper C++ indique où les conversions implicites se produisent dans votre code.
Dynamic Program Analysis (DPA)
Amélioration de la gestion des problèmes
L'analyse dynamique de programme (DPA) enregistre désormais deux valeurs pour chaque incident : la valeur maximale et la valeur actuelle. Cela permet d'éviter les faux négatifs. Auparavant, il pouvait arriver que des problèmes passent sous le seuil et disparaissent de la liste, non pas parce qu'ils étaient résolus, mais parce que leurs conditions de lancement avaient changé (exécution du programme ayant duré moins longtemps, fonctionnalité requise n'ayant pas été exécutée, etc.)
Autres mises à jour
- La DPA est automatiquement désactivée lorsque vous commencez le profilage des performances.
- La fenêtre Dynamic Program Analysis prend maintenant en charge la sélection de plusieurs problèmes.
- La suppression des problèmes avec l'attribut SuppressMessage fonctionne maintenant pour les méthodes asynchrones.
Assembly Explorer
Le décompilateur intégré peut désormais décompiler les applications à fichier unique. Il prend en charge les formats de fichier unique utilisés dans les SDK .NET Core 3.1, .NET 5 et .NET 6 à venir. Il vous permet également de parcourir les assemblies groupés à l'intérieur d'une application à fichier unique, comme vous le faites habituellement.
Amélioration des performances de couverture
- Désormais, dotCover peut exécuter l'analyse de couverture des classes de tests en parallèle dans un assembly. Cela permet une analyse plus rapide de la couverture dans certains cas.
- Les outils de tests unitaires peuvent maintenant être préchargés pour les projets .NET Core et .NET, ce qui permet de démarrer plus rapidement l'analyse de couverture, car les testeurs unitaires sont déjà chargés en mémoire.
Analyse de l'allocation de mémoire
Dans cette version, JetBrains a continué à améliorer les moyens d'analyser l'allocation de mémoire. Deux nouveaux onglets ont été ajoutés à la vue Memory Allocation :
- L'onglet Methods vous permet d'analyser une liste simple des méthodes qui ont alloué de la mémoire.
- L'onglet Call Tree vous permet d'analyser l'arborescence des appels d'allocation. Chaque nœud de l'arborescence indique non seulement la méthode appelée, mais aussi les objets alloués par l'appel.
Profilage natif
Il est désormais possible de profiler des applications Windows natives. Lorsque vous démarrez une session de profilage, vous pouvez télécharger des fichiers de symboles source natifs à partir de serveurs distants. Le profilage natif est uniquement disponible pour le profilage de type chronologique (Timeline).
Autres
Razor
Les développeurs qui utilisent Razor et travaillent sur des vues de grande taille peuvent désactiver l'assistance et les suggestions automatiques, fortement consommatrices en CPU, si leur éditeur commence à être lent. Vous trouverez les paramètres ici : ReSharper | Options | Environment | Editor | Behavior | Razor | Allow CPU-intensive typing assist.
Outils de ligne de commande de ReSharper
JetBrains a apporté un changement fondamental à l'outil InspectCode. À partir de la v2021.2, InspectCode restaure automatiquement les packages NuGet et compile une solution avant de commencer son analyse. Si ce comportement est indésirable, vous pouvez utiliser la commande --no-build pour désactiver la restauration des packages NuGet et la compilation de la solution.
En savoir plus sur les nouveautés et télécharger ReSharper 2021.2