Nouveautés de ReSharper 2021.3

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.

Télécharger

Essai gratuit sur 30 jours disponible

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''installatieur de dotUltimate 2021.3.

C# 10

C# 10 a été récemment publié et nous continuons d'ajouter les dernières fonctionnalités de C# dans ReSharper. Dans cette version de ReSharper, nous avons eu le plaisir d'ajouter 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.

Commençons par les 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.

En savoir plus : espaces de nom au niveau du fichier

Voyons de plus près les 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.

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.

En savoir plus : CallerArgumentExpressions

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 l'utilisation des expressions d'interpolation de chaînes dans plus d'endroits.

ReSharper permet d'obtenir de meilleures performances à partir des records de types structs en vous suggérant de les marquer en tant que readonly. Pour éviter d'encombrer les déclarations de type avec des modificateurs inutiles, cette inspection s'affiche uniquement lorsque le type record comporte des membres d'instance sans mutation et s'il n'y a pas de mutations par l'intermédiaire des setter dans la solution (nécessite l'activation d'une analyse au niveau de la solution).

C# 10 permet de simplifier légèrement la syntaxe de reconnaissance de schémas en autorisant la syntaxe à point plutôt que l'imbrication de schémas d'objets.

ReSharper fournit l'inspection correspondante avec un correctif rapide, ainsi qu'une action contextuelle permettant d'annuler le correctif rapide.

Et pour finir, mais tout aussi important :

  • Nous avons 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.
  • ReSharper prend désormais en charge « Program » en tant que nom de classe générée valide pour le code avec des déclarations de niveau supérieur.
  • La prise en charge initiale des membres static abstract dans les interfaces est désormais possible. L'analyse du code considère cette construction comme valide, ce qui signifie que vous ne devriez plus avoir affaire à du code rouge. La fonctionnalité Generate missing members tient compte des membres static abstract et les gère correctement. Cette version inclut également les marqueurs dans la gouttière d'héritage et la possibilité d'accéder aux symboles de base/dérivés.

Types de référence nullables

Les développeurs utilisent souvent du code provenant de sources externes comme stackoverflow.com. 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.

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.

Nous avons également ajouté un nouveau 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

Nous avons 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, nous avons également amélioré notre 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é.

Depuis quelque temps déjà, ReSharper vous avertit en cas de verrouillage incohérent des champs. Dans cette version, nous avons ajouté une inspection qui prend en compte l'ordre de verrouillage des ressources et signale les éventuels cycles de blocage.

Dorénavant, ReSharper vérifie la plausibilité des expressions d'arithmétique intégrale en recherchant les types d'entiers supplémentaires. Cela concerne les types byte, sbyte, short, ushort, uint, long, ulong et enum. On évite ainsi d'avoir des branches de code inaccessibles.

Afin de simplifier la lecture des conditions complexes, nous avons ajouté la mise en évidence des éléments de condition. Cela met en évidence les groupes d'opérateurs logiques, comme par exemple les chaînes && et || en C#.

Performances de l'analyse du code

Nous avons 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.

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

 

Nous avons amélioré 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

Nous avons ajouté 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.

Nous avons é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. En effet, nous pensons que ce nom décrit mieux son action.

Nous avons 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.
  • Nous avons 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 .

Création de nouvelles classes Unreal Engine

Avec ReSharper C++ 2021.3, vous n'avez plus à basculer vers Unreal Editor pour créer une classe : tous les modèles prédéfinis pour les classes Unreal Engine sont maintenant disponibles dans la liste de modèles de fichiers de ReSharper.

Pour créer une classe, allez dans Solution Explorer et faites un clic droit sur le dossier du projet de votre choix pour ouvrir le menu Add (ou utilisez Ctrl+Alt+Inser). Une fois que vous aurez choisi un modèle Unreal Engine dans la liste et nommé votre nouvelle classe, ReSharper C++ génèrera les fichiers d'en-tête et sources avec le code du modèle dans les dossiers appropriés selon le contexte (privé ou public).

Nouveautés de ReSharper C++ 2021.3

Amélioration de la prise en charge de C++20

Vous pouvez utiliser les initialisateurs C++20 désignés pour générer rapidement du code standard réutilisable pour l'initialisation d'agrégats. Sélectionnez simplement l'élément correspondant dans la liste de saisie semi-automatique pour insérer des désignateurs pour les membres de données, puis fournissez les valeurs initiales.

En complément, ReSharper C++ 2021.3 affiche des inspections afin de vous aider à adopter de nouvelles fonctions de bibliothèque pour effacer les éléments d'un conteneur standard, vérifier si un élément existe dans un conteneur associatif et créer des pointeurs intelligents avec l'initialisation par défaut.

Nouveautés de ReSharper C++ 2021.3

Prise en charge des fichiers AnalyzerConfig

À partir du SDK .NET 5 SDK, vous pouvez utiliser des fichiers globaux AnalyzerConfig pour configurer les options d'analyseur de Visual Studio. ReSharper 2021.3 peut lire les informations de style du code à partir de ces fichiers AnalyzerConfig globaux et l'utiliser pour ajuster les règles de ReSharper en conséquence.

Données d'allocation de mémoire échantillonnées dotUltimate

dotMemory peut désormais obtenir des données échantillonnées d'allocation de mémoire basées sur les événements ETW. La méthode d'échantillonnage est moins précise que la méthode traditionnelle (statistique), mais présente plusieurs avantages :

  • La collecte des données d'allocation échantillonnées n'affectent pas la performance.
  • Ce type de collecte de données n'a pas à être explicitement activé, il reste toujours actif.
  • Les données d'allocation échantillonnées peuvent également être collectées lorsque vous joignez le profileur à une application qui est déjà en cours d'exécution.

Veuillez noter que cette fonctionnalité est uniquement disponible sous Windows.

Nouveautés de dotMemory 2021.3

Télécharger

Essai gratuit sur 30 jours disponible