ReSharper 2023.2 disponible avec un meilleur support de C#, C++ 20 et C++ 23
Un mode de débogage prédictif, et bien d'autres nouveautés et améliorations

ReSharper 2023.2 améliore la prise en charge de C# et apporte de nouvelles inspections pour travailler avec les fonctions locales et les chaînes brutes, ainsi que pour résoudre les problèmes courants liés à Entity Framework. Cette version introduit également la prise en charge des refactorisations C++ et de nouvelles fonctionnalités C++20 et C++23. Parmi les fonctionnalités qui font leurs débuts dans ReSharper 2023.2, on trouve la possibilité de créer et de naviguer facilement dans les tests unitaires, le mode de débogage prédictif et le nouvel AI Assistant.

Principales mises à jour

Amélioration de la prise en charge de C#

ReSharper 2023.2 ajoute de nouvelles inspections de code et les nouveaux correctifs rapides permettant de travailler avec les littéraux de chaînes brutes et les fonctions locales, ainsi que de traiter les problèmes Entity Framework communs et les directives nullable redondantes. La prise en charge anticipée de C# 12 couvre les constructeurs primaires et les expressions lambda utilisant des paramètres en option. Dans ReSharper, JetBrains a également amélioré la prise en charge des ressources jetables et des éléments ignorés, et ajouté de nouveaux conseils aussi bien dans les lignes de code qu'entre elles.

Navigation et création de tests unitaires

Les tests unitaires de ReSharper ont fait l'objet d'une mise à jour majeure avec l'ajout d'une fonctionnalité permettant de naviguer et de créer des tests pour votre code de production !

Pour créer un test, appelez simplement l'action Generate Code, puis choisissez Unit Test ou appuyez sur Ctrl+U,C. ReSharper vous permet de choisir le nom de la classe de test et peut même créer un projet à partir de votre framework de test préféré (si cela n'est pas déjà en place). Une fois le test créé, vous pouvez naviguer entre votre implémentation et le code de test avec l'action Navigate To ou en appuyant sur Ctrl+U,F.

AI Assistant

Les versions 2023.2 des EDI basés sur IntelliJ et des outils .NET inaugurent une fonctionnalité majeure : AI Assistant. Actuellement, les fonctionnalités générées par IA fournissent un chat intégré et une assistance pour plusieurs workflows utilisateurs essentiels via des actions contextuelles, ce qui permet à l'AI Assistant d'expliquer les éléments de code sélectionnés, d'éliminer les problèmes potentiels et de générer pour vous la documentation XML.

Prise en charge de C#

Amélioration de la prise en charge des chaînes brutes

ReSharper fournit de nouvelles inspections C# et des actions contextuelles pour le travail avec les chaînes brutes, améliore l'assistance à la saisie et apporte de nouvelles options de formatage :

  • L'inspection Use raw string sert à convertir les chaînes textuelles sur plusieurs lignes en représentations brutes.
  • L'inspection Simplify raw string permet de supprimer les guillemets et les symboles de signe dollar qui deviennent redondants.
  • Plusieurs actions contextuelles permettent d'ajouter ou de supprimer des guillemets, des accolades d'interpolation et des symboles de signe dollar et de basculer facilement entre les représentations sur une seule ligne et sur plusieurs lignes.
  • Avec les nouvelles options de formatage de texte vous pouvez aligner ou indenter le contenu des chaînes brutes.
  • Amélioration de l'aide à la saisie lors de l'utilisation des touches Entrée, Supprimer ou Retour arrière.

Inspections pour les problèmes courants liés à Entity Framework

JetBrains a ajouté plusieurs nouvelles inspections, des correctifs rapides et des options de navigation contextuelle pour les problèmes communs en relation avec les bases de données utilisant un framework ORM (Object-Relational Mapping) comme Entity Framework.

  • En cas de problème « N+1 », vous disposez des inspections Possible multiple queries to the database for related entities (N+1 problem) et Possible multiple queries to the database (N+1 problem), d'un correctif rapide correspondant et de la navigation contextuelle avec des allers-retours afin d'examiner les sections de votre code dans lesquelles vous risquez de rencontrer un problème « N+1 ».
  • En plus de la détection des problèmes « N+1 », JetBrains a introduit une autre inspection utile lorsque vous travaillez avec Entity Framework : Query can return incomplete data for related entities. Un correctif rapide et la navigation contextuelle avec des allers-retours pour vous aider à analyser ce problème sont également disponibles.

Inspections pour travailler avec des fonctions locales

ReSharper 2023.2 introduit deux nouvelles inspections et les correctifs rapides correspondants afin d'améliorer la lisibilité du code avec les fonctions locales :

  • Une recommandation pour placer un paramètre return ou continue explicite avant les fonctions locales à la fin d'une méthode.
  • Une suggestion pour déplacer les fonctions locales à la fin d'une méthode ou d'un bloc et les séparer du code exécutable avec une instruction explicite return, continue, ou d'une autre instruction de déplacement de flux de contrôle.

Pour les cas dans lesquels vous ne voulez pas modifier le code ou n'avez pas la permission de le faire, ReSharper 2023.2 affiche un conseil interligne avec les instructions return; ou continue; placées avant les fonctions locales afin de vous aider à comprendre le code sans le modifier.

Inspections pour les directives #nullable et annotations NRT

Plusieurs nouvelles inspections sont disponibles pour les directives #nullable et les annotations NRT :

  • L'inspection Redundant nullable directive ;
  • L'inspection Unused nullable directive ;
  • Une inspection pour vous alerter des cas où les annotations de type de référence nullable (NRT) contredisent les attributs JetBrains.Annotations sur un membre de base.

Navigation depuis les déclarations var améliorée

Toutes les actions de navigation (Go to…, Find Usages, etc.) suggèrent désormais les types sous-jacents lors de la navigation depuis var pour les types communs utilisés pour englober d'autres types. Par exemple, ReSharper suggère la navigation vers Person lors de l'utilisation de l'action Go to declaration depuis le mot-clé var d'une variable ayant le type ImmutableArray<Person>?.

Constructeurs primaires (préversion de C# 12)

La version 2023.2 de ReSharper apporte la prise en charge des constructeurs primaires pour les classes autres que record et les structs de la version preview de C# 12. Plusieurs inspections détectent les types pour lesquels l'initialisation peut être exprimée par de nouveaux constructeurs primaires et suggèrent l'application d'un correctif rapide pour réduire de façon significative les répétitions de code.

Parfois, l'initialisation du type doit être rendue plus formelle et ne peut plus être exprimée par un constructeur primaire. Pour ce scénario, JetBrains a introduit deux actions contextuelles pour inverser le remplacement des paramètres de constructeur primaire en constructeurs et champs ordinaires.

Prise en charge des valeurs de paramètres par défaut dans les lambdas (préversion de C# 12)

Dans le cadre de son travail d'intégration des mises à jour de C# 12, l'éditeur de logiciels pour développeurs a introduit la prise en charge des valeurs de paramètres par défaut dans les expressions lambdas. En complément de l'ensemble standard de messages d'avertissement associés à la reconnaissance de cette syntaxe, JetBrains a adapté une inspection existante, The parameter has the same default value, pour prendre en compte les valeurs des paramètres par défaut dans les lambdas.

Meilleure prise en charge des ressources remplaçables

ReSharper 2023.2 introduit deux nouvelles inspections de code conçues pour mieux contrôler la suppression d'un objet :

  • L'inspection Return of a variable captured by ‘using' statement vous prévient lorsque l'objet renvoyé est supprimé immédiatement.
  • L'inspection Return of a task produced by ‘using'-captured object identifie les scénarios produisant le type Task lorsqu'un objet est capturé par une instruction using, puis renvoyé immédiatement.

JetBrains a aussi amélioré la fonctionnalité Generate dispose pattern pour prendre en charge l'interface IAsyncDisposable et générer une méthode asynchrone pour libérer les ressources.

Meilleure prise en charge des discards C#

Plusieurs ajouts à la prise en charge des discards C# ont été faits pour l'analyse du code :

  • Il est désormais possible de vérifier rapidement les noms et les types des valeurs ignorées avec la fonctionnalité Push-to-Hint.
  • L'avertissement The _ name is typically reserved for local parameters without usages porte sur les variables et les paramètres nommés, tels que _, qui sont réellement utilisés. Ils ressemblent à une valeur « ignorée », mais en réalité, ils représentent tout le contraire.
  • L'inspection Use discard assignment permet de remplacer une variable et un paramètre non utilisés par un élément ignoré.

Conseils d'insertion

Conseils d'insertion avec noms de composant de tuple

Lorsque vous transférez une valeur à un argument de tuple ou un type de retour, C# permet d'ignorer les noms de composants. Cependant, en l'absence de noms, il devient plus difficile d'interpréter la signification de chaque composant sans examiner son type cible. Par exemple, de nombreux développeurs doivent rechercher le point d'affectation d'un tuple (null, false) pour comprendre ce que signifient ses composants.

C'est là que les conseils d'insertion peuvent vous aider. ReSharper 2023.2 affiche des conseils d'insertion avec les noms de composants de tuple lorsque ces noms ne sont pas déjà apparents au niveau de l'expression du composant, ce qui rend votre code beaucoup plus facile à lire et comprendre rapidement.

Pour les composants null et par défaut, ReSharper 2023.2 affiche des conseils sur leurs types cibles, même si le composant cible n'a pas de nom explicite. Il fait toutefois une exception pour les types chaîne et objet, car ces derniers sont généralement peu informatifs.

Les noms améliorent également la lisibilité des modèles de déconstruction où le nom explicite est connu soit par la méthode Deconstruct, soit par les composants du tuple source. Ces conseils ont été développés pour vous fournir davantage de contexte lorsqu'un modèle ne contient pas suffisamment de données pour comprendre ce qui est mis en correspondance, comme dans value is ({ }, true, null).

Meilleure prise en charge des directives #pragma warning

Les directives Pragma permettent de désactiver ou de restaurer facilement les avertissements du compilateur en fonction de leur ID. Cependant, si ces ID sont un excellent moyen de communiquer avec le compilateur, ils peuvent être difficiles à comprendre pour les développeurs humains. Sans connaissances approfondies, il n'est pas évident de savoir à quoi fait référence un ID tel que CS0168 ou CS0618, ni ce qui nécessite votre attention.

Optimisation de LINQ

Les requêtes LINQ peuvent souvent être complexes, car elles impliquent plusieurs transformations et projections. Le débogage de requêtes LINQ complexes est parfois chronophage, surtout pour les gros ensembles de données. Afin de vous aider à inspecter facilement la sortie de chacune des étapes de la requête, ReSharper affiche désormais les résultats intermédiaires sous forme de conseils d'insertion au cours du débogage.

Grâce à ces résultats immédiats, vous devriez maintenant être en mesure d'identifier rapidement la présence de valeurs inattendues ou de transformations incorrectes.

Prise en charge de C++

Safe Delete

ReSharper C++ introduit la refactorisation Safe Delete pour supprimer des symboles du code source en toute sécurité. Cette refactorisation est disponible pour les classes, les fonctions, les variables, les énumérateurs, les espaces de noms et même les concepts.

Avant de supprimer un symbole, ReSharper C++ recherche ses occurrences et vous permet de prévisualiser les modifications apportées au code source. Vous avez ainsi la certitude que toutes les suppressions sont intentionnelles. Si vous essayez de supprimer une entité complexe comme une classe ou un espace de noms, ReSharper C++ vérifiera récursivement les occurrences de tous ses membres.

Davantage de fonctionnalités C++20 et C++23

Cette nouvelle version introduit la prise en charge de plusieurs nouvelles fonctionnalités du langage, notamment if consteval, les modules de bibliothèque standard C++23, l'attribut [[no_unique_address]] et les opérateurs statiques operator()/operator[].


Formatage du code

Formatage d'appels d'API fluides

ReSharper 2023.2 introduit deux nouvelles options de formatage du code C# qui améliorent la lisibilité des appels de méthode chaînés.

La première option de formatage de code permet de contrôler le placement d'un saut de ligne avant le premier appel de méthode. La seconde option intervient lorsque les appels de méthodes et de propriétés sont mélangés, et détermine si un saut de ligne doit être placé avant l'appel de propriétés.

AI Assistant (accès limité)

AI Assistant n'est pas fourni avec ReSharper et doit être installé séparément. L'accès à la fonctionnalité AI Assistant est limité pour le moment et JetBrains a mis en place une liste d'attente.

Chat avec l'AI Assistant

Par défaut, l'AI Assistant dans ReSharper tient compte de votre environnement de développement : les langages de programmation, frameworks, bibliothèques et technologies utilisés dans la solution. L'intelligence artificielle est ainsi en mesure de générer des réponses plus précises et pertinentes à vos questions.

L'option Smart chat permet à l'AI Assistant de référencer des fichiers spécifiques et des symboles, d'extraire des fragments de code ou les dernières modifications, et de rechercher les utilisations de méthodes spécifiques. Ainsi, ses suggestions sont encore plus précises.


Actions contextuelles

Avec le plugin AI Assistant installé, les actions contextuelles de ReSharper offrent plusieurs options assistées par IA. L'AI Assistant peut vous aider à :

  • Expliquer le code sélectionné
  • Identifier les problèmes potentiels
  • Fournir du code pour les méthodes qui ne sont pas implémentées
  • Générer de la documentation au format XML

Débogueur prédictif (Bêta)

Le mode de débogage prédictif que JetBrains a introduit dans ReSharper 2023.2 permet de prévoir tous les états possibles déclenchés par l'exécution d'un programme sans avoir à l'exécuter réellement, ce qui présente les avantages suivants :

  • Afficher les valeurs attendues des variables.
  • Mettre sous « silence » les sections du programme qui ne seront pas exécutées.
  • Identifier les cas où l'exécution va renvoyer une exception.

Le débogueur prédictif permet de mieux comprendre l'exécution de votre programme. Il permet également d'essayer différentes valeurs et de déboguer votre code sans avoir à redémarrer le processus de débogage à chaque modification.

Pour activer le débogueur prédictif, allez dans ReSharper | Options | Tools | Debugger | Editor Integration | Predictive debugger | Show predicted values (beta).

Ce débogueur est actuellement en phase de Bêta. Vos retours sont donc précieux pour lui permettre d'atteindre son plein potentiel. N'hésitez pas à signaler les bugs que vous rencontrez.


Décompilateur

Comparaison des assemblies

ReSharper 2023.2 permet d'obtenir une comparaison détaillée de deux assemblies. Cette fonctionnalité est particulièrement utile pour identifier les différences entre les deux versions d'un assembly donné, ainsi que les vulnérabilités qui peuvent avoir été introduites par une nouvelle version.

Pour comparer les assemblies, cliquez sur Compare Two Assemblies dans la fenêtre d'outils Assembly Explorer. Les applications à fichier unique et les fichiers .exe ou .dll peuvent être comparés.


Performances

Avec ReSharper 2022.3, JetBrains a revu son approche de la mise en cache des données requises par l'EDI pour faire fonctionner ses systèmes. Cette révision, dont l'efficacité a été confirmée par une myriade de tests des performances, a permis de réduire la consommation d'espace disque de façon significative pour chaque solution que vous ouvrez. Dans la pratique, cela réduit le temps consacré aux entrées/sorties de disque et accélère le chargement des solutions.

Un autre changement a permis d'accélérer le chargement de la solution : la refactorisation de la logique de construction des composants internes de ReSharper.


Autres améliorations

Dynamic Program Analysis

  • Avant, DPA incluait parfois par erreur le temps de pause lié au débogage dans le temps d'exécution, ce qui créait des faux positifs dans la base de données. Ce problème a été corrigé dans la version 2023.2.
  • Avant, DPA mettait en évidence de gros blocs de code si la pile d'appels correspondante contenait des allocations de mémoire par des fonctions lambda. La mise en évidence est désormais plus granulaire.

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