Nouveautés de ReSharper 2022.2

ReSharper 2022.2 apporte la prise en charge de nouvelles fonctionnalités de 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. Nous avons 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.

Télécharger

Essai gratuit sur 30 jours disponible

C# 11

Cette version fournit la prise en charge de plusieurs fonctionnalités supplémentaire de la version preview de C# 11.

Membres requis

Avec C# 11, les types class, struct et record peuvent maintenant 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 qui doivent être initialisés lors de l'initialisation de l'instance d'un type. Ces listes sont automatiquement héritées des types de base et contribuent à offrir une expérience utilisateur fluide et à réduire la quantité de code standard répétitif.

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 ReSharper | Options | Code Editing | C# | Syntax Style.

Nous avons ajouté un nouveau correctif rapide Add initializer for required members pour les cas dans lesquels vous avez créé un objet de type mais n'avez pas encore initialisé 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 des membres avec des données pertinentes.

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 les types qui permettent le débordement arithmétique. 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, nous avons ajouté à ReSharper deux inspections supplémentaires et une action contextuelle.

Nous avons 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 avez un ensemble d'opérateurs définis par l'utilisateur et que certains d'entre eux ont déjà une version checked, ReSharper vous aidera à propager les opérateurs checked aux autres de ces opérateurs. Une nouvelle inspection, The operator does not have a matching checked operator while other operators do, 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.

Si vous n'avez pas encore utilisé les opérateurs checked dans votre base de code mais souhaitez commencer àles y ajouter, vous apprécierez la nouvelle action contextuelle Create matching checked operator. Elle est disponible pour tous les opérateurs définis par l'utilisateur et génère une 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 possibilité d'intégrer d'autres langages ou formats de texte dans le 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 de rendre davantage de modèles disponibles dans le langage. Cette fois, C# permet les opérations d'appariement pour les structures de type liste, comme les tableaux, les chaînes et les collections telles que List<T>.

ReSharper 2022.2 prend intégralement en charge les modèles de listes 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 listes dans le code existant et des actions de refactorisation supplémentaires.

Plus de fonctionnalités C# 11

Davantage de fonctionnalités de C# 11

  • ReSharper 2022.2 prend entièrement en charge le nouvel opérateur décalage à droite non signé (>>>), Cela inclut la prise en charge de la surcharge de l'opérateur >>> défini par l'utilisateur.
  • ReSharper 2022.2 prend 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înes 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. Nous avons examiné les données stockées en mémoire et identifié des modèles permettant de les dédupliquer/normaliser. Nous avons é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 projets qui utilisent des instructions C# 9 de niveau supérieur. 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 il est nécessaire ou préférable d'utiliser une classe de démarrage Program explicite. ReSharper 2022.2 fournit une nouvelle action contextuelle To explicit 'Program' class pour effectuer des conversions dans l'ancien style.

Si vous avez déjà une classe de démarrage Program et souhaitez migrer vers les instructions de haut niveau, utilisez la nouvelle action contextuelle Convert to top-level code.

Mises à jour de la prise en charge de INotifyPropertyChanged

Dans cette version, nous avons remanié la prise en charge de INotifyPropertyChanged. Elle ne dépend plus d'annotations externes pour détecter les API INotifyPropertyChanged couramment utilisées, ce qui permet une prose en charge automatique d'un plus grand nombre de frameworks MVVM et de classes de base INotifyPropertyChanged. Nous utilisons maintenant la méthode SetField dont la syntaxe est plus concise pour les notifications INotifyPropertyChanged.

Dorénavant, il est aussi possible d'ajouter des notifications property change pour l'ensemble des propriétés dans le type ou le fichier.

Refactorisations dans le menu Alt+Entrée

Pour améliorer l'accessibilité des refactorisations, nous avons identifié les refactorisations les plus utilisées et ajouté au menu disponible via Alt+Entrée des actions contextuelles pertinentes qui s'affichent en fonction du contexte actuel.

Désormais, l'action contextuelle Extract method est également appelée avec Alt+Entrée pour le fragment de code sélectionné.

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.

Suggestions supplémentaires pour l'utilisation d'un opérateur nameof

ReSharper 2022.2 reconnaît les enregistrements de DependencyProperty dans les projets WPF et suggère l'utilisation d'un opérateur nameof pour capturer le nom de propriété CLR correspondant. Les modèles dynamiques intégrés ont également été mis à jour pour émettre nameof à la place de littéraux de chaîne.

Souvent, ReSharper ne peut pas identifier la signification spéciale d'un littéral de chaîne utilisé dans votre code pour spécifier le nom d'une entité de code comme un nom de membre ou de type. Pour ces cas, nous avons introduit une nouvelle action contextuelle Capture element name pour les littéraux de chaîne avec identifiants, qui permet de faire référence à une entité de code dans le contexte du littéral de chaîne.

Recherche structurelle et remplacement

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 s'applique aux modèles personnalisés créés sur la page ReSharper | Options | Code Inspection | Custom Patterns, aux inspections de code intégrées de ReSharper et aux correctifs correspondants basés sur le SSR.

Autres modifications

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 schémas.

ReSharper 2022.2 est désormais capable de remplacer is dans les expressions ?: par des modèlesas plus concis dans les expressions??, ce qui permet d'éliminer une variable temporaire.

Formatage virtuel

Nous avons 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. Nous avons 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 d'entre vous 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, nous avons décidé de suspendre la prise en charge de JS et de TS. Par conséquent, nous avons 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 | case à cocher « 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.

Nous avons é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 dotUltimate

dotTrace founrit maintenant davantage de détails sur les appels système natifs dans l'arorescence 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.
Télécharger

Essai gratuit sur 30 jours disponible