ReSharper 2021.3 est disponible avec la prise en charge de Visual Studio 2022
plus de fonctionnalités de C# 10, et un support amélioré des types de référence nullables et de C#

JetBrains annonce la disponibilité de la version 2021.3 de ReSharper, son extension Visual Studio pour les développeurs .NET. ReSharper 2021.3 prend en charge la nouvelle version de Visual Studio 2022, récemment publiée. L'analyse du code améliore la prise en charge de C#10, ce qui inclut les espaces de nom au niveau du fichier et les directives using avec modificateur global et les types de référence nullables. Cette version intègre également Find Usages pour les opérateurs de conversion implicites définis par l'utilisateur, des nouveaux marqueurs dans la gouttière, ainsi qu'une version améliorée de la fonction Copy Code Reference. Nous présentons dans la suite avec plus de détails les principales nouveautés et améliorations.

Prise en charge de Visual Studio 2022

ReSharper prend désormais en charge la nouvelle version de Visual Studio 2022. Vous retrouverez le même ensemble de fonctionnalités enrichies que dans les versions précédentes de Visual Studio mais Visual Studio 2022 étant un processus 64 bits, la quantité de mémoire pouvant lui être allouée n'est plus limitée. Par conséquent, toutes les fonctionnalités de ReSharper sont désormais plus rapides.

Pour utiliser ReSharper avec cette nouvelle version de Visual Studio, assurez-vous que l'icône VS2022 soit sélectionnée dans l''installateur de dotUltimate 2021.3.


C# 10

C# 10 a été récemment publié et JetBrains continue d'ajouter les dernières fonctionnalités de C# dans ReSharper. Dans cette version de ReSharper, on note par exemple la prise en charge des espaces de nom au niveau du fichier, des directives using avec modificateur global, de l'attribut CallerArgumentExpression, du concept de « gestionnaires de chaînes interpolées » et des lambdas C# 10.

Espaces de nom au niveau du fichier

Outre la prise en charge de la nouvelle syntaxe, nous avons ajouté la nouvelle option de style Syntax qui permet de sélectionner le style voulu (ReSharper | Options | Code Editing | C# | Syntax Style | Code body | Namespaces). Lorsque vous choisissez un style, ReSharper vous présente les inspections du code qui doit être modifié pour appliquer le style et vous suggère les correctifs rapides appropriés. Vous pouvez propager les correctifs dans le projet, voire dans le reste de la solution, en un clic. Vous disposez désormais de deux actions contextuelles pour rétablir le style de syntaxe précédent : Convert to file-scoped namespace et Convert to block-scoped namespace.

Directives using avec modificateur global

L'analyse du code de ReSharper tient compte des directives using avec le mot-clé global et les utilise pour résoudre correctement les symboles de l'ensemble des fichiers de code du projet. ReSharper vous préviendra également si une directive using avec global a été placée au mauvais endroit dans un fichier. ReSharper met en évidence les directives using avec global inutilisées dans le projet et propose un correctif rapide pour supprimer la déclaration.

Attribut CallerArgumentExpression

ReSharper offre une prise en charge enrichie de l'attribut CallerArgumentExpression, ce qui inclut la saisie semi-automatique et des inspections de code, afin de vous aider à l'utiliser correctement.

Concept de « gestionnaires de chaînes interpolées » de C# 10

C# 10 introduit le nouveau concept de « gestionnaires de chaînes interpolées ». Pour les utilisateurs finaux, cela signifie que les expressions d'interpolation de chaînes fonctionneront généralement plus vite dans .NET 6 et que les nouveaux gestionnaires permettront d'utiliser les valeurs Span<char> pour les lacunes d'interpolation. Pour les auteurs de bibliothèques, cette fonctionnalité leur permet de contrôler si les expressions d'interpolation de chaînes sont converties en chaînes. ReSharper 2021.3 reconnaît les modèles de « gestionnaires de chaînes interpolées » dans le code de la bibliothèque et peut faire des suggestions fiables concernant utilisations des expressions d'interpolation de chaînes dans plus d'endroits.

Lambdas de C# 10

JetBrains a amélioré la prise en charge des lambdas de C# 10 : vous ne devriez plus voir de code en rouge ou d'erreurs dues à des faux positifs dans les projets .NET 6 Minimal API. En bonus, ReSharper vous aide à utiliser la bonne syntaxe et à ajouter des parenthèses au bon endroit lorsqu'elles sont requises par le compilateur.

Il y a encore bien d'autres nouveautés et améliorations de C# 10 prises en charges dans cette version de ReSharper.


Types de référence nullables

Les développeurs utilisent souvent du code provenant de sources externes. Désormais, avec les types de référence nullables disponibles dans C#, certains échantillons de code incluent déjà la syntaxe NRT. Mais que se passe-t-il si NRT n'est pas activé dans votre solution ? ReSharper fournit deux nouveaux correctifs rapides pour vous aider à éliminer cette syntaxe après avoir copié ce type de code dans votre projet : Replace with JetBrains.Annotations attributes et Remove nullable annotations without ‘#nullable’ context.


De temps à autre, il peut y avoir des incohérences de nullabilité entre les arguments de type et leurs contraintes. Vous disposez à présent de correctifs rapides pour ces cas, notamment pour :
  • Supprimer les annotations nullable des arguments de type.
  • Supprimer les contraintes notnull des arguments de type.
  • Autoriser les valeurs nullable dans les paramètres de type.
  • Interdire les valeurs nullable dans les paramètres de type utilisés en tant qu'arguments de type.

Notons qu'un correctif rapide groupé permet de corriger les annotations de paramètres ayant des valeurs nullable par défaut dans un fichier, un projet ou l'ensemble de la solution. Et JetBrains a également ajouté un correctif rapide pour autoriser les valeurs nulles pour les paramètres dont la valeur nulle est explicitement vérifiée dans une méthode.

Analyse du code

Analyse du code C#

JetBrains a ajouté deux correctifs rapides et une action contextuelle pour les fonctions locales/anonymes static comportant des closures :
  • Le correctif rapide Allow closures supprime les modificateurs static d'une fonction anonyme ou locale si elle contient des closures.
  • Le correctif rapide Pass closure as a parameter convertit les fermetures des fonctions locales statiques en paramètres.
  • L'action de contexte Pass closure as a parameter convertit les fermetures des fonctions locales non statiques en paramètres.

Une nouvelle inspection, Simplify string interpolation, qui a un correctif rapide correspondant, remplace les appels de méthode .PadLeft() et .PadRight() par des expressions d'alignement dans les emplacements de chaînes interpolées.


En plus de l'ajout de la nouvelle record struct de C# 10, JetBrains a également amélioré sa prise en charge des structs régulières. De nombreux développeurs utilisent toujours des classes avec des initialisateurs d'objet pour leurs DTO. Désormais vous pouvez rapidement transformer toutes ces utilisations en constructeurs avec des paramètres. Vous pouvez faire cela soit à partir de la déclaration record elle-même, soit à partir d'un initialisateur d'objet. Veuillez noter qu'il est également possible de convertir les DTO qui définissent un constructeur avec des affectations de propriété.


Performances de l'analyse du code

JetBrains a réduit le temps d'implémentation des correctifs rapides et des actions contextuelles lorsqu'ils sont appelés pour un dossier, un projet ou une solution. Si l'analyse globale Solution-Wide Error Analysis (SWEA) est activée avec Monitor warnings, ReSharper utilise désormais les résultats de SWEA pour ignorer les fichiers ne comportant pas de problèmes correspondants, ce qui accélère considérablement la recherche des problèmes à corriger.

JetBrains a également de bonnes nouvelles pour les personnes qui n'exécutent pas d'analyse SWEA pour leurs solutions. ReSharper utilise désormais tous les cœurs CPU disponibles pour exécuter l'analyse du code en parallèle. Cela réduit la durée nécessaire à l'exécution des correctifs rapides et des actions contextuelles.

ReSharper améliore également de façon significative les performances du démon pour les fichiers comportant des méthodes très volumineuses, notamment :
  • Les méthodes avec des expressions conditionnelles longues ou imbriquées, des expressions de tuple ou des expressions switch.
  • Les méthodes avec de nombreuses vérifications de types lorsque les types de référence nullables sont désactivés.
  • Les méthodes avec de nombreux accès d'indexation lorsque les types de référence nullables sont activés.
  • Les méthodes avec de nombreuses fermetures lorsque les types de référence nullables sont activés.

Navigation et Find Usages

Nouveaux marqueurs dans la gouttière

On note l'ajout de quelques nouveaux marqueurs dans la gouttière afin de vous aider à parcourir la structure d'héritage d'une classe, d'une interface ou d'un struct. Les nouvelles icônes ↑O et ↑I indiquent qu'une entité de code hérite d'une autre classe ou interface ou l'implémente. Si cet héritage d'entité de code est complexe, la sélection d'une icône affiche un menu avec tous ses ancêtres au-dessus de cette dernière, jusqu'au sommet de la hiérarchie d'héritage. Si une classe implémente une interface et une classe simultanément, ou en hérite, ReSharper place l'icône ↑IO dans la gouttière.


JetBrains a également activé les marqueurs dans la gouttière pour les membres de classes par défaut. ReSharper ajoute l'icône ↓O dans la gouttière de gauche à côté d'un membre de classe si ce dernier est remplacé dans les classes dérivées. Cliquez sur l'icône pour :
  • Naviguer vers un membre dans une classe dérivée qui remplace ce membre.
  • Afficher un menu comportant la liste des membres d'autres classes qui remplacent ce membre.


Find Usages pour les opérateurs de conversion implicite définis par l'utilisateur

Vous pouvez désormais appeler Find Usages pour les opérateurs de conversion implicite définis par l'utilisateur. L'implémentation de cette fonctionnalité est basée sur le mécanisme utilisé pour les suggestions de conversion de types.

Cela vous permet de déterminer si des opérateurs de conversion implicites définis par l'utilisateur sont utilisés ou non, puis d'accéder aux blocs de code ayant des conversions.

Veuillez noter que cet algorithme est plutôt lent et que les opérations de calcul et d'affichage des résultats peuvent prendre un peu de temps.


Accès aux implémentations d'interfaces en mode débogage

Lorsque vous appelez Go to Type of Symbol sur une variable ou un paramètre de type d'interface en mode de débogage, ReSharper vous mènera au point exact d'implémentation utilisé dans la structure actuelle et non à la déclaration d'interface.


Injections de langage

Vous pouvez désormais marquer les paramètres, les champs et les propriétés d'une fonction avec l'attribut d'annotation [LanguageInjection]. ReSharper considèrera une valeur de chaîne d'une entité de code marquée comme un fragment de code écrit dans un autre langage. Les langages pouvant être injectés sont CSS, HTML, JavaScript, JSON et XML. Dès que vous ajoutez l'attribut, vous bénéficiez de la mise en évidence des éléments de syntaxe, de la saisie semi-automatique et d'autres fonctionnalités, directement dans la chaîne. Pour utiliser l'attribut LanguageInjection, cous devez ajouter la dernière version de JetBrains.Annotations à votre projet.


Copy Code Reference

Cette version apporte de nombreuses modifications à la fonctionnalité Copy FQN. Pour commencer, elle a été renommée Copy Code Reference, JetBrains estimant que ce nom décrit mieux son action.

JetBrains a ajouté une nouvelle fonctionnalité dans le cas où vous utilisez Git comme système de contrôle de version. Vous trouverez les éléments en rapport avec GitHub directement dans la fenêtre contextuelle Copy Code Reference pour les projets clonés à partir de GitHub. Ils génèrent un lien valide vers un référentiel GitHub qui peut immédiatement être partagé avec d'autres personnes.


Pour les référentiels autres que GitHub, vous pouvez désormais ajouter des modèles d'URI personnalisés dans les paramètres de ReSharper. Tous ces modèles apparaîtront dans la fenêtre contextuelle Copy Code Reference. Un modèle d'URI peut comprendre différents emplacements prédéfinis, tels que Current Branch Name, File Name, Current Line Number, etc.

Enfin, la fenêtre contextuelle elle-même a été considérablement remaniée. Son design, ses icônes et la mise en forme ont totalement été repensés.


Mise en forme

  • Une nouvelle option permet d'indenter les parenthèses lambda ou de modèle de propriété dans les conditions de déclarations, comme par exemple dans if(), while(), etc.
  • JetBrains a ajouté une option activée par défaut pour aligner les conditions de déclarations à l'intérieur des parenthèses if(), foreach(), etc.
  • Pour les modèles binaires, vous pouvez personnaliser le retour à la ligne l'alignement, les marges négatives ou la suppression du dernier caractère avec des options comme x est Foo ou Bar ou Baz.

ReSharper 2021.3 vient encore avec bien d'autres nouveautés et améliorations que vous pouvez consulter dans les notes de publications.

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