Nouveautés de ReSharper 2020.2

ReSharper 2020.2 apporte de nouvelles inspections et des correctifs rapides pour C#8 et les types de référence Nullable, le très attendu Code Cleanup on Save, un outil d'exécution des tests unitaires remanié, ainsi que des améliorations d'accessibilité. De plus, ReSharper C++ vous permet de passer à un niveau supérieur de développement avec Unreal Engine et s'accompagne de nombreuses améliorations pour la prise en charge, la navigation et l'analyse du code C++/CLI.

Télécharger

Essai gratuit sur 30 jours disponible

Analyse du code

L'analyse du code de nullabilité connaît maintenant davantage de cas et peut retracer une nullabilité incorrecte grâce à la déconstruction et au cycle foreach. Elle fournit également le correctif rapide correspondant.

L'analyse de code prend désormais en compte les attributs JetBrains.Annotations (NotNull et CanBeNull) pour l'API, même dans le code où les types de référence nullables sont désactivés (#nullable disable).

Les actions contextuelles de conversion de foreach en LINQ et de LINQ en code sont également disponibles sur IAsyncEnumerable<T> si le paquet NuGet System.Linq.Async est installé pour votre projet.

Il est maintenant possible de générer facilement des implémentations de IEqualityComparer<T> and IComparer<T> avec les correctifs rapides appropriés.

L'analyse de code prend désormais en compte les annotations du compilateur (telles que AllowNull et DisallowNull) lors de la vérification de la nullabilité des membres implémentés ou remplacés.

De nouvelles inspections et des correctifs rapides vous permettent de rendre les variables et les types de retour « non nullables » s'ils n'ont jamais contenu ou renvoyé des valeurs nullables.

L'analyse du code est maintenant capable de suivre les règles dotnet_diagnostic du fichier .editorconfig. Spécifiez la sévérité des inspections dans le fichier .editorconfig, par exemple dotnet_diagnostic.CS1058.severity = hint. ReSharper affichera les inspections en conséquence.

La prise en charge des implémentations par défaut dans la fonctionnalité des interfaces a été améliorée dans cette version. Dans l'éditeur de code, la gouttière de gauche montre qu'une méthode est implémentée ou remplacée, et nos refactorisations et notre navigation tiennent compte de cette fonctionnalité du langage C#.

Les conseils d'insertions sont désormais disponibles dans le code XAML. Nous fournissons des conseils pour les noms de propriétés de balisage et DataContext, ainsi que pour les marges et les espaces de séparation (padding), ce qui est pratique si vous ne souhaitez pas mémoriser leur ordre.

Le correctif rapide Suppress nullable warning with ! peut être désactivé pour une solution via le menu Alt+Entrée.

Nettoyage du code

Vous pouvez maintenant configurer ReSharper afin de lancer automatiquement un nettoyage du code lors de l'enregistrement d'un fichier ! Enfin !

Cette fonctionnalité ne nécessite plus de plugins tiers. Cette fonctionnalité peut être activée sur la page des options ReSharper | Options | Code Editing | Code Cleanup.

Nous avons étendu la portée du nettoyage du code aux fichiers récemment modifiés et aux fichiers récemment ouverts, ce qui permet de gagner du temps car le nettoyage du code n'a pas à s'exécuter pour l'ensemble de la solution. Pour un ajustement plus précis, vous pouvez spécifier ce qui est qualifié de « récemment ».

Sauvegarde automatique des fichiers une fois le nettoyage du code terminé. Cette fonction peut être activée sur la page des options ReSharper | Options | Code Editing | Code Cleanup.

Plusieurs améliorations permettent de réduire le temps d'exécution du nettoyage du code :

  • Le nettoyage n'exécute pas les analyseurs lors de la collecte du code à nettoyer, sauf si les cases correspondantes sont cochées dans le profil de nettoyage Cleanup profile. Par exemple, si un profil a l'option « Remove redundancies » décochée, les analyseurs liés à la recherche de redondances ne seront pas exécutés.
  • Plusieurs correctifs de code sont exécutés en même temps pour un fichier. Le logiciel ne recommence plus à mettre en surbrillance le fichier après chaque correctif.

Tests unitaires

Nous avons entièrement repensé notre outil d'exécution des tests unitaires pour .NET Framework et .NET Core, ce qui permet d'utiliser le même outil pour les deux environnements d'exécution qui s'exécutent hors du processus Visual Studio. Il aide à résoudre un certain nombre de problèmes liés à la localisation, à l'exécution et au débogage des tests unitaires et offre un contrôle total sur les hiérarchies des tests unitaires pour les tests .NET Core.

Le nouvel outil de test comporte une prise en charge intégrée pour :

  • MSFakes pour les frameworks de tests unitaires NUnit, xUnit, MSTest v2.
  • TypeMock Isolator pour NUnit, xUnit et MSTest v2.

La nouveauté la plus significative de l'interface utilisateur est la prise en charge par ReSharper de l'attribut DisplayName dans les tests .NET Core pour les frameworks xUnit et NUnit.

L'application de filtres à l'arborescence des tests unitaires, par exemple, Passed/Failed/etc. signifie que les compteurs fournissent deux nombres distincts : le nombre total de tests et le nombre de tests qui répondent aux critères de filtrage.

Deux nouvelles actions font leur apparition dans le menu Navigate To :

  • Afficher toutes les sessions de tests unitaires qui incluent ce test.
  • Afficher le test dans la fenêtre d'outils Unit Test Explorer.

Nous avons introduit la prise en charge de la méthode Assert.Multiple de NUnit, qui permet de contrôler plusieurs assertions sans quitter le code après le premier échec.

Les plages horaires de regroupement par durée peuvent être modifiées directement dans les options.

Améliorations de l'accessibilité

Cette version apporte une meilleure prise en charge des lecteurs d'écran tels que JAWS, NVDA et Microsoft Narrator. Ces lecteurs d'écran ont désormais un meilleur accès aux éléments suivants :

  • Composants des listes et des arborescences dans les fenêtres d'outils ReSharper.
  • Éléments de la boîte de dialogue Options.
  • Éléments du menu Alt+Entrée.
  • Toutes les boîtes de dialogue Go To.
  • La fenêtre contextuelle de saisie semi-automatique du code.

Prise en charge des liaisons x:Bind

Nous avons de bonnes nouvelles pour les développeurs UWP : les liaisons compilées avec x:Bind sont enfin prises en charge !

ReSharper résout correctement le code x:Bind et propose plusieurs inspections et les correctifs rapides correspondants. Il vous avertit des setters de propriété manquants, des attributs BindBack et des collisions de surcharge. De plus, un ensemble de correctifs rapides Create from Usage permet de générer un champ, une propriété ou une méthode appropriée à l'intérieur des fichiers C# code-behind.

La saisie semi-automatique du code et des informations sur les paramètres sont fournies pour les attributs propertyPath, BindBack, and UpdateSourceTrigger dans une expression x:Bind.

Les refactorisations Change Signature et Safe Delete tiennent désormais compte de l'utilisation de la méthode dans le code XAML et les mettent à jour en conséquence. De plus, les refactorisations Make Static/Const et Encapsulate Field fonctionnent directement à partir du code XAML et mettent correctement à jour les utilisations XAML si vous les appelez à partir d'un fichier C# code-behind.

La prise en compte de la nullabilité est intégrée dans l'analyse de code x:Bind. ReSharper vous montre maintenant des inspections liées à null directement dans le code XAML si des attributs CanBeNull et NotNull existent dans le code C#, par exemple, « Possible System.NullReferenceException » et « Possible null » pour les arguments d'une méthode utilisée dans un propertyPath.

D'autres fonctionnalités de ReSharper telles que Find Usages et Go to Declaration tiennent également compte des liaisons x:Bind.

Outils de ligne de commande de ReSharper

En 2020.1, Rider a migré de Mono vers .NET Core sur macOS et Linux. Dans cette version, les outils de ligne de commande ReSharper s'exécutent sur .NET Core sous Windows, Linux et macOS.

Veuillez noter que les outils de ligne de commande ReSharper ne sont plus fournis avec Mono et que les outils pour macOS et Linux nécessitent désormais .NET Core 3.1.

Autre avantage à l'utilisation de .NET Core comme environnement d'exécution au lieu de Mono : les outils de ligne de commande ReSharper peuvent être installés en tant qu'outil global .NET Core. Exécutez la commande suivante pour les installer :

dotnet tool install -g JetBrains.ReSharper.GlobalTools --version 2020.2.0-*

Et lancez l'outil avec jb tool_name [options], par exemple :

jb inspectcode yourSolution.sln -o=<pathToOutputFile>

Diagrammes des dépendances des types et des projets

Le moteur yFiles utilisé pour dessiner le graphique a été mis à jour vers sa dernière version. Cette nouvelle version de yFiles, en plus de nos optimisations, améliore considérablement les performances de dessin du graphique résultant.

Il est maintenant possible d'exporter le graphique résultant vers de nouveaux formats :

  • Format de fichier GraphML pour une analyse plus approfondie dans des outils externes.
  • Format de fichier XPS pour l'impression de grands diagrammes qu'il n'est pas possible d'exporter au format PNG.

La fenêtre d'outils du diagramme prend enfin en charge le thème sombre de Visual Studio.

Mises à jour de la navigation

La navigation vers les utilisations des types à partir d'assemblies externes dans le code est désormais beaucoup plus facile. ReSharper peut naviguer directement des résultats de recherche Go to Type vers Find Usages. Pour essayer, recherchez un type, mettez-le en surbrillance dans la liste à l'aide du clavier ou de la souris et appelez Find Usages ou Go to Usage en utilisant leur raccourci respectif.

À partir de la version v2020.2, plusieurs actions de ReSharper peuvent être appelées directement à partir des boîtes de dialogue Go to Symbol et Go to File Member, en utilisant les raccourcis correspondant à ces actions dans votre configuration clavier préférée. C'est notamment le cas de l'affichage de la documentation rapide.

Nouvelles actions Peek

Un ensemble de nouvelles actions Peek a été ajouté pour afficher le résultat de certaines actions courantes de ReSharper dans une vue Peek Definition.

Appelez l'action Peek Implementation pour ouvrir une vue Peek de l'implémentation en cliquant sur la molette de la souris tout en maintenant Ctrl+Alt, ou la combinaison Ctrl+Alt+Q en plaçant le curseur sur un symbole.

Appelez l'action Peek Base Symbols pour observer tous les symboles de base dans une vue Peek. Appuyez simplement sur Maj+Alt+Q sur un symbole pour l'exécuter.

Appelez l'action Peek Usages pour consulter les utilisations dans une vue Peek en cliquant sur la molette de la souris sur un symbole tout en maintenant Ctrl.

Refactorisations

Dans cette version, la boîte de dialogue Conflicts a été remaniée sous forme d'étape distincte dans l'interface Refactorings. La liste simple d'avant a été remplacée par une arborescence regroupée par fichiers.

Lorsque vous appelez les refactorisations Introduce parameter ou Introduce field sur une expression, ReSharper demande à quelle partie de l'expression appliquer la refactorisation.

Améliorations des fonctionnalités Unreal Engine

Unreal Engine

ReSharper C++ 2020.2 inaugure la prise en charge du modèle de projet Unreal Engine, en apportant des suggestions d'importation automatique plus intelligentes pour les directives include et la prise en charge de plusieurs configurations de solution. ReSharper C++ adhère également plus étroitement aux directives Unreal Engine en ajustant la gravité de l'inspection et les actions de génération de code.

Pour faciliter la navigation, Search Everywhere/Go To traite désormais les symboles des sources du moteur comme des symboles de bibliothèque. Plusieurs nouvelles inspections appliquent elles aussi les directives Unreal Engine et vous rappellent d'actualiser les fichiers de projet dans Unreal Editor.

Meilleure prise en charge de C++/CLI

C++/CLI

La licence ReSharper incluant désormais les produits ReSharper et ReSharper C++, la prise en charge de C++/CLI (une passerelle entre les langages) a fait l'objet de nombreuses mises à jour et d'une meilleure interopérabilité entre C++/CLI et C#.

ReSharper C++ trouvera des symboles dérivés dans le code C#, tandis que Go to Base Symbols et Go to Derived Symbols fonctionnent désormais sur les entités CLR importées.

ReSharper C++ inspecte maintenant la façon dont vous allouez la mémoire et suggère un correctif rapide pour remplacer gcnew par new (et inversement) lorsque le type de cible n'est pas valide. Une autre inspection vous avertit lorsque vous essayez d'utiliser le spécificateur C++ final sur une classe ou une interface gérée, avec un correctif rapide pour le rendre sealed à la place. De plus, vous pouvez désormais utiliser un correctif rapide pour convertir une conversion de style C en une safe_cast.

Nouveautés de ReSharper C++

Explorateur d'assemblies

  • Les flux de paquets NuGet v3 sont désormais pris en charge dans Open from NuGet, Open from NuGet packages cache et Open NuGet packages.config.
  • Les éléments portant des noms similaires sont maintenant réduits dans les boîtes de dialogue Open from NuGet et Open from NuGet packages cache.
  • Les paquets NuGet sont triés par ordre alphabétique.

Autres fonctionnalités

Mise en forme

ReSharper aligne désormais correctement les colonnes de code similaire, même lorsque seule une partie du bloc aligné est mise en forme. L'ajout d'un point-virgule ou d'une accolade ne rompt donc plus l'alignement.

Outils et extensions .NET

dotCover dotUltimate

L'outil d'exécution de console dotCover propose plusieurs améliorations :

  • Le paramètre --reportype=SummaryXml vous permet de créer un nouveau type de rapport Summary, qui comprend des données sur le nombre total de classes, de méthodes et d'instructions couvertes.
  • L'outil d'exécution peut désormais générer des rapports pour plusieurs types à la fois : --reporttype=HTML,SummaryXml --output=report.html;summary.xml
  • L'outil d'exécution pour Linux (Debian, Ubuntu) est désormais capable d'effectuer des analyses sur les systèmes ARM64.

En savoir plus

dotTrace dotUltimate

La version indépendante de dotTrace et dotTrace dans Rider sont toutes deux capables de profiler la partie native des applications Mono/Unity sous Windows. Il vous suffit de lancer une session avec l'option « Enable native profiling » pour consulter les piles d'appels natives et gérées dans les instantanés de performances. Cette fonctionnalité permet d'analyser les goulots d'étranglement des performances dans les jeux Unity.

Le profileur de console dotTrace bénéficie de quelques améliorations :

  • Le profileur vous permet de contrôler la session de profilage (prendre des instantanés, se détacher du processus profilé, etc.) en envoyant des commandes à stdin ou à un fichier.
  • Le profileur pour Linux (Debian, Ubuntu) est maintenant capable de profiler des applications sur les systèmes ARM64.

En savoir plus

dotMemory dotUltimate

Désormais, vous pouvez ouvrir les objets épinglés en tant qu'ensemble d'objets distinct et ouvrir les objets qui ne sont pas accessibles à partir des racines GC en tant qu'ensemble d'objets distinct.

Citons parmi les améliorations apportées au profileur de ligne de commande dotMemory :

  • Désormais, en plus de Windows, le profileur de ligne de commande est également disponible sous Linux et macOS.
  • Le profileur pour Linux (Debian, Ubuntu) est capable de profiler des applications non seulement sur les systèmes x64 mais aussi sur les systèmes ARM64.

En savoir plus

dotPeek 

dotPeek poursuit le renforcement de sa compatibilité avec les versions les plus récentes de C#, et la nouvelle version apporte les éléments suivants :

  • Membres avec un corps d'expression.
  • Expressions Throw.
  • Paramètres par défaut et arguments nommés.
  • Attribut NullablePublicOnly.

En savoir plus

Télécharger

Essai gratuit sur 30 jours disponible