ReSharper 2022.2 est disponible
Aperçu des nouveautés et améliorations de l'extension Visual Studio pour les développeurs .NET

ReSharper 2022.2 apporte la prise en charge des fonctionnalités C# 11 telles que les membres requis, les opérateurs checked définis par l'utilisateur, les chaînes brutes et les modèles de listes. JetBrains a aussi considérablement optimisé la consommation de la mémoire de l'analyse à l'échelle de la solution. Par ailleurs, cette version introduit une fonctionnalité Virtual Formatter qui permet d'afficher votre code au format voulu sans avoir à reformater le code source sur le disque, et un outil Disk Cleanup pour supprimer les fichiers temporaires générés par ReSharper pendant qu'il travaille sur votre code.

C# 11

Cette version introduit la prise en charge d'encore plus de fonctionnalités de la version Preview de C# 11.

Membres requis

Dans C# 11, les types class, struct et record peuvent à présent déclarer une liste de membres requis. Il s'agit de la liste de toutes les propriétés et de tous les champs considérés comme requis et elle doit être initialisée en même temps que l'instance d'un type. Ces listes sont automatiquement héritées des types de base et contribuent ainsi à offrir une expérience utilisateur fluide et à réduire la quantité de code répétitif et standard.

En plus de reconnaître le mot-clé required pour les membres de type class, struct ou record, ReSharper assure également la prise en charge du mot-clé required :

  • la saisie semi-automatique inclut le mot-clé required ;
  • la plupart des erreurs et des avertissements de compilateur sont disponibles ;
  • le modificateur required a été ajouté à Modifiers order sur la page Preferences/Settings | Editor | Code Style | C# | Syntax Style.


JetBrains a ajouté le nouveau correctif rapide Add initializer for required members pour les cas où un objet de type a été créé sans initialiser les membres. Cela génère automatiquement tous les membres required manquants pour votre objet et il ne vous reste plus qu'à remplir les valeurs du membre avec des données significatives.

Opérateurs « checked » définis par l'utilisateur

Les opérateurs checked définis par l'utilisateur aident les développeurs à créer des opérateurs définis par l'utilisateur qui agissent sur des types où le dépassement arithmétique est un concept valide. ReSharper affiche l'intégralité des erreurs et des avertissements du compilateur. Afin d'assurer une prise en charge complète des opérateurs checked définis par l'utilisateur, ReSharper comporte deux inspections supplémentaires et une action contextuelle.

  • JetBrains a mis à jour l'inspection Unchecked/checked context is redundant pour prendre en compte les opérateurs checked lorsqu'ils sont utilisés dans ce contexte.

  • Si vous disposez d'un ensemble d'opérateurs définis par l'utilisateur et certains d'entre eux comportent déjà d'une version checked, ReSharper vous aidera à propager les opérateurs checked au reste de l'ensemble. Une nouvelle inspection appelée The operator does not have a matching checked operator while other operators do vous signale les opérateurs qui ne disposent pas encore d'un opérateur checked et propose un correctif rapide permettant de générer les versions checked automatiquement.

  • Et si vous n'avez pas encore utilisé les opérateurs checked dans votre base de code, mais souhaitez commencer à les y ajouter, vous trouverez la nouvelle action contextuelle appelée Create matching checked operator très pratique. Elle est disponible pour tous les opérateurs définis par l'utilisateur et génère la version checked d'un opérateur en un clic, directement depuis le menu contextuel ouvert par Alt+Entrée.

Chaînes brutes

C# 11 améliore la capacité d'intégration d'autres langages ou formats de texte au code C# en introduisant le concept de chaînes « brutes ».

ReSharper assure une prise en charge basique des chaînes « brutes », ce qui inclut les erreurs de compilateur, l'analyse correcte et le surlignage en couleur de la syntaxe """, les paires de guillemets doubles et les emplacements réservés dans les chaînes interpolées (syntaxe {{...}}).


Modèles de listes

C# 11 continue d'élargir l'ensemble des modèles disponibles dans le langage. Cette version de C# introduit la mise en correspondance des structures de type liste, telles que les tableaux, les chaînes et les collections de type List<T>.

ReSharper 2022.2 prend intégralement en charge les modèles de liste avec la vérification d'erreurs, la saisie semi-automatique et l'analyse du code. Nous travaillons sur de nouvelles inspections de code qui permettront de suggérer l'utilisation de modèles de liste dans le code existant et des actions de refactorisation supplémentaires.


Plus de fonctionnalités C# 11

ReSharper 2022.2 prend entièrement en charge le nouvel opérateur décalage à droite non signé (>>>), ce qui inclut la prise en charge de la surcharge de l'opérateur >>> défini par l'utilisateur.

ReSharper 2022.2 prend aussi en charge la simplification de l'utilisation des valeurs Span<char> en remplacement des instances de chaînes, car C# 11 permet de comparer directement les constantes de chaîne avec des valeurs de type Span<char> et ReadOnlySpan<char>.

Optimisations de l'analyse à l'échelle de la solution

Cette version a été l'occasion d'optimiser l'utilisation de la mémoire de ReSharper lorsque que le mode Solution-Wide Analysis est activé, aussi bien en termes de trafic de la mémoire (nombre d'allocations de mémoire) que de consommation.

Le moteur d'analyse à l'échelle de la solution utilise la mémoire pour stocker la liste des problèmes dans la solution et les informations d'utilisation des types/membres, afin d'effectuer des rapports d'utilisation portant sur l'ensemble de la solution (inspections de code telles que « le membre public n'est jamais utilisé »). Les données d'utilisation des types et des membres doivent être constamment mises à jour au fur et à mesure que le code est modifié et ne peuvent pas être déchargées sur le disque. Si votre solution contient de nombreux types et membres de type, cela risque d'entraîner la consommation d'un volume de mémoire important. JetBrains a examiné les données stockées en mémoire et identifié des modèles permettant de les dédupliquer/normaliser. L'éditeur de logiciels a également utilisé des types de collections spécialisés pour réduire davantage l'utilisation de la mémoire. Ces optimisations ont permis de réduire de 5 à 10 fois la consommation de mémoire et d'accélérer le chargement de l'analyse à l'échelle de la solution.

Analyse du code

Instructions de haut niveau

.NET 6 a introduit de nouveaux modèles de projet avec les déclarations de haut niveau de C# 9. Les instructions de haut niveau simplifient la déclaration d'une classe Program ou d'une méthode public static void Main(string[] args). Mais parfois une déclaration explicite class Program est nécessaire ou préférable. ReSharper 2022.2 ajoute la nouvelle action contextuelle To explicit 'Program' class pour convertir le code dans cet ancien style.


Dans le même temps, si vous disposez déjà d'une classe de démarrage Program et souhaitez migrer vers les instructions de haut niveau, JetBrains a prévu la nouvelle action contextuelle Convert to top-level code.

Mises à jour de la prise en charge de INotifyPropertyChanged

Dans cette version, JetBrains a remanié la prise en charge de INotifyPropertyChanged. Elle ne dépend plus d'annotations externes pour détecter des API INotifyPropertyChanged, ce qui a permis de prendre en charge automatiquement davantage de frameworks MVVM et de classes de base INotifyPropertyChanged. JetBrains utilise maintenant la méthode SetField dont la syntaxe est plus concise pour les notifications INotifyPropertyChanged.

Il est désormais aussi possible d'ajouter des notifications property change pour l'ensemble des propriétés du type ou du fichier.

Refactorisations dans le menu Alt+Entrée

Afin d'améliorer la visibilité des refactorisations, JetBrains a examiné les refactorisations les plus couramment utilisées et introduit des actions contextuelles connexes dans le menu ouvert par Alt+Entrée qui dépendent du contexte actuel.

L'éditeur de logiciels a ajouté l'action contextuelle Extract method qui correspond à l'appel du menu par Alt+Entrée depuis un fragment de code. Notons également que les refactorisations Change Signature, Transform Parameters, Convert to extension method et Convert Property To Method sont désormais toutes disponibles en tant qu'actions contextuelles pour les signatures de membres.

Autres

Entre autres nouveautés pour l'analyse du code, on note :
  • Plus de suggestions d'utilisation d'un opérateur nameof.
  • Les correctifs rapides provenant des modèles Structural Search And Replace (SSR) peuvent désormais être appliqués au niveau d'un fichier, d'un dossier, d'un projet ou de l'ensemble d'une solution. Cela affecte notamment les modèles personnalisés des utilisateurs, les inspections de code intégrées de ReSharper et tous les correctifs correspondants basés sur les actions SSR.
  • ReSharper 2022.2 peut désormais détecter certains modèles d'affectation dans votre code et suggérer du code C# plus idiomatique grâce à la reconnaissance de modèles.
  • ReSharper 2022.2 peut désormais remplacer certains schémas is dans les expressions ?: par la version plus concise as dans l'expression ??, ce qui élimine effectivement une variable temporaire.

Formatage virtuel

JetBrains a introduit une fonctionnalité Virtual Formatter qui permet de voir votre code au format voulu sans avoir à reformater le code source sur le disque. Par exemple, il est désormais possible d'aligner virtuellement les paramètres en colonnes ou d'augmenter les indentations. Les objectifs de cette fonctionnalité sont d'améliorer la lisibilité et la maintenabilité du code et de le rendre plus accessible pour les développeurs malvoyants ou neurodivergents. Pour activer le Virtual Formatter avec des paramètres prédéfinis, allez dans ReSharper | Options | Environment | Inlay Hints | General. Si vous souhaitez aller plus loin dans la personnalisation du formatage et définir vos propres paramètres, cochez la case Use dedicated Virtual Formatter style settings et sélectionnez C#.


Nettoyage du disque

Il est désormais possible de supprimer les fichiers temporaires générés par ReSharper pendant qu'il travaille sur votre code. JetBrains a ajouté une nouvelle page dans la section Options sur laquelle vous pouvez :

  • Examiner un ensemble de chemins par défaut et de fichiers que ReSharper peut supprimer ;
  • Ajouter un modèle de chemin personnalisé pour les fichiers que vous voulez supprimer ;
  • Préciser le nombre de jours après lesquels ReSharper doit considérer les fichiers comme obsolètes pour chaque modèle de chemin ;
  • Vérifier la quantité d'espace occupé par les fichiers correspondant à chaque modèle de chemin ;
  • Mettre en place le nettoyage automatique des fichiers à intervalles réguliers (la valeur par défaut est de 1 jour) ;
  • Exécuter le nettoyage d'une zone spécifique manuellement.


Prise en charge de JavaScript et de TypeScript

Comme beaucoup l'ont remarqué, la prise en charge de JavaScript et de TypeScript dans ReSharper est obsolète et lente. Avec l'implémentation actuelle, il est difficile de suivre les changements de langage de TS et de prendre en charge les nouvelles versions suffisamment rapidement. Après avoir longuement pesé le pour et le contre, JetBrains a décidé de suspendre la prise en charge de JS et de TS. Par conséquent, l'éditeur de logiciels a désactivé la prise en charge par défaut de TS/JS dans cette version. Si vous souhaitez continuer à l'utiliser, vous pouvez l'activer dans : ReSharper | Options | Environment | Products & Features | et cocher la case « JavaScript and TypeScript ».


Unreal Engine

ReSharper C++ inaugure des conseils d'insertion spécifiques à Blueprint et vous offre une vision d'ensemble du rendu de votre code :

  • Vous êtes informé·e des classes Blueprint dérivées et pouvez consulter la liste de tous les héritiers.
  • Vous repérez facilement si une UFunction a des implémentations dans les Blueprints et pouvez en répertorier toutes les instances.
  • Vous pouvez vérifier rapidement l'état d'une UProperty, y compris si elle a été remplacée, et savoir quelle valeur est définie dans le fichier Blueprint.
  • JetBrains a également ajouté deux nouvelles inspections qui vous signalent toute incohérence entre les spécificateurs de fonctions relatifs aux Blueprints utilisés dans le code et les Blueprints eux-mêmes.

Meilleure prise en charge des appels système natifs

dotTrace founrit maintenant davantage de détails sur les appels système natifs dans l'arborescence Timeline Call Tree, notamment les appels du noyau Windows (ntoskrnl.exe) et les appels de pilotes de périphériques (*.sys).


Application des paramètres de StyleCop.Analyzers

ReSharper peut désormais détecter si le package StyleCop.Analyzers est référencé par un projet et lire ses paramètres depuis les fichiers stylecop.json et .ruleset. Les en-têtes de fichiers et les paramètres d'indentation sont obtenus depuis stylecop.json, tandis que les règles StyleCop s'appliquent selon la configuration active du fichier .ruleset.

Assemblies ReadyToRun et NGen

  • La présentation des assemblies ReadyToRun (R2R) et NGen dans Assembly Explorer a été améliorée. Dorénavant, une petite icône de processeur et l'étiquette ngen ou R2R s'affichent à côté du nom de chaque assembly.
  • L'arborescence Metadata a un en-tête ReadyToRun.


Nouveautés et téléchargement de ReSharper 2022.2