Nouveautés de ReSharper 2020.3

ReSharper 2020.3 apporte la compatibilité avec les fonctionnalités C# 9, un nouveau mode d'affichage des conseils d'insertion, la prise en charge d'Avalonia, l'analyse de programme dynamique intégrée et tout un ensemble de mises à jour pour vous aider dans votre développement au quotidien.

Télécharger

Essai gratuit sur 30 jours disponible

Prise en charge de C#

Source Generators est sans doute la fonctionnalité du compilateur C# la plus commentée. C'est compréhensible : la possibilité de créer du nouveau code dès le processus de compilation et de l'utiliser immédiatement est très intéressante et peut être utile dans de nombreuses situations.

Comment ReSharper peut-il être utile ici ? Eh bien, ce qu'il fait le mieux : prendre en compte les fichiers générés lors des refactorisations, fournir des fonctionnalités d'édition de code et vous aider à naviguer vers le code généré.

Les méthodes partielles sont maintenant autorisées à avoir des paramètres out, des types de retour non annulés, et tout type d'accessibilité, et peuvent donc être plus largement utilisées avec Source Generators. Source Generators peut utiliser la déclaration de définition de la méthode partielle pour personnaliser le comportement du code généré.

Autre ajout intéressant : les propriétés init-only. Ces propriétés ne peuvent être définies que lors de l'initialisation d'un objet. Vous pouvez donc enfin utiliser des initialiseurs d'objet sans exposer la propriété comme modifiable !

ReSharper détecte les propriétés init-only et les prend en compte lors de la saisie semi-automatique de votre code, de la saisie automatique générative, de l'analyse pour déterminer si la propriété a changé quelque part et pour proposer un correctif rapide pour la rendre modifiable si vous changez d'avis.

L'endroit idéal pour appliquer init est dans les nouveaux types record. Ce sont des types de référence avec une sémantique de valeur qui vous aident à obtenir une immutabilité, mais cette fois pour l'ensemble de l'objet. Une fois de plus, Rider a suivi l'évolution du langage, des correctifs rapides pour choisir le style de déclaration que vous préférez à la saisie automatique de base.

Les records positionnels ont une méthode Deconstruct() générée par le compilateur. Rider prend en charge toutes les fonctionnalités de déconstruction de ces objets. Observez la fenêtre contextuelle lors de l'introduction d'une variable : elle vous donne le choix entre une variable unique ou une déclaration déconstructive. Le même choix sera proposé lorsqu'une fonction accède à une propriété d'un objet record.

Au-delà des nouveautés majeures, les fonctions locales sont désormais autorisées à avoir des attributs (ainsi que des paramètres et des paramètres de type). Ceci est pris en charge par les correctifs rapides de ReSharper y compris la fonctionnalité d'annotation de la méthode comme [NotNull] ou [CanBeNull], en appuyant respectivement sur ! ou ?.

C# 9 apporte également la possibilité très utile d'écrire des programmes de niveau supérieur. Plus besoin de se battre avec les classes de programme : vous pouvez placer votre code initial juste après les directives using ! Une aide est également disponible pour travailler avec les instructions de niveau supérieur. Il y a deux règles concernant les instructions de niveau supérieur : elles doivent précéder tout type ou espace de noms et un seul fichier du projet peut contenir du code de niveau supérieur. Or ces deux règles peuvent facilement être enfreintes par erreur lorsque vous réorganisez et copiez-collez du code. ReSharper fournit des correctifs rapides pour remédier à cela en déplaçant votre code de niveau supérieur vers le haut ou vers un autre fichier.

Nous proposons également des refactorisations pour le code de niveau supérieur : Extract local variable et Extract method.

Les nouvelles expressions de type cible en C# 9 permettent d'omettre le type après le nouveau mot-clé lorsqu'il peut être déduit du contexte d'utilisation. ReSharper fournit une prise en charge complète de la fonctionnalité, y compris la possibilité de rechercher les occurrences du constructeur avec Find Usages et de configurer le style de syntaxe préféré. Ce dernier vous permet d'utiliser la syntaxe new() lorsqu'un type créé est évident tout en imposant une spécification de type explicite dans d'autres cas.

À propos, les nouveaux conseils de ReSharper pour les noms de type peuvent vous aider si vous vous sentez débordé·e par tous ces nouveaux new() dans votre code.

Avec la covariance du type de retour, vous n'avez plus à renvoyer le même type dans les membres de substitution comme c'est le cas dans la méthode de classe de base. Il n'est plus nécessaire d'implémenter des solutions de contournement pour retourner un type plus spécifique.

La correspondance de schémas continue d'évoluer dans la nouvelle version du langage. Les expressions correspondantes permettent désormais d'utiliser des schémas relationnels (<, >, etc.) et logiques (not, or, and), ce qui permet de réduire la verbosité par rapport aux anciennes constructions switch. ReSharper peut vous aider à analyser les schémas et à les réécrire dans le style souhaité.

Enfin, lorsque les paramètres de suppression de lambda ont été introduits, nous avons pensé qu'il serait utile de leur créer un correctif rapide.

C'est à peu près tout pour les principaux aspects du langage. De plus petites améliorations ont été ajoutées au langage et sont également prises en charge dans ReSharper 2020.3. Cela inclut les expressions conditionnelles de type cible, les expressions lambdas statiques, les méthodes d'extension GetEnumerator dans foreach, les types de pointeurs de fonction et les types integer natifs.

Conseils d'insertion

Nous sommes persuadé·es de l'intérêt des conseils d'insertion, mais nous savons aussi qu'il est important que l'environnement reste aussi propre et épuré que possible. Nous avons mis au point un nouveau mécanisme « Push-to-Hint » pour les conseils d'insertion afin de pouvoir en profiter sans avoir à faire de compromis.

En mode de visibilité Push-to-Hint, les conseils ne sont pas affichés par défaut. Ils s'affichent si vous maintenez la touche Ctrl enfoncée (et sont de nouveau masqués dès que vous la relâchez) ou si vous appuyez deux fois sur Ctrl (auquel cas ils restent visibles jusqu'à ce que vous appuyiez à nouveau deux fois sur Ctrl).

Nous proposons des paramètres assez granulaires : vous pouvez indiquer à ReSharper les conseils qui doivent être activés en permanence, ceux à afficher en mode push et ceux dont vous pouvez vous passer. Utilisez le paramètre « Visibility » pour chaque type de conseil.

Nous avons également travaillé sur les conseils pour les conversions de types implicites. De telles conversions peuvent entraîner une perte de données ou une dégradation des performances, et ReSharper peut désormais indiquer les emplacements où a lieu une conversion implicite.

Un Ctrl + clic sur un conseil de conversion de type vous amène à l'implémentation de la conversion implicite.

Les conseils d'insertion pour XAML, qui étaient déjà disponibles dans la version précédente, sont désormais dotés du menu contextuel habituel, qui vous permet de configurer leur apparence.

Formatage

Nous continuons à améliorer la précision des paramètres du moteur de formatage. Voilà ce que nous avons ajouté dans cette version.

Un groupe de paramètres pour organiser les schémas de propriétés : vous pouvez demander à ReSharper de placer un schéma simple sur une seule ligne et lui indiquer la façon dont vous souhaitez que les soient schémas soient repartis en lignes. Il existe également un paramètre pour aligner les schémas de propriétés en colonnes.

Il est maintenant possible d'ajouter des lignes vides autour des accesseurs de propriété ou d'événement.

Pour Visual Basic, il est possible d'ajouter un espace après l'opérateur +/- unaire.

La prise en charge de .editorconfig a été mise à jour. ReSharper prend désormais en charge les propriétés Roslyn : file_header_templates, dotnet_sort_system_directives_first et dotnet_separate_import_directive_groups.

Il existe également un nouveau paramètre « Spaces around '=' » dans l'exportation vers .editorconfig. Il est automatiquement détecté dans les fichiers existants et peut être configuré manuellement pour les nouveaux fichiers. Par défaut, il est défini sur « true ».

Dynamic Program Analysis

Nous avons ajouté l'analyse dynamique des programmes (DPA) à ReSharper pour vous aider à analyser et à améliorer votre code en détectant les fermetures et les allocations pour les tas d'objets dans la mémoire.

La bonne nouvelle est que vous n'avez rien à faire en plus de votre routine habituelle de codage, exécution et débogage. La DPA s'effectue en arrière-plan et vous fournit un rapport après chaque lancement de votre projet. Gardez simplement un œil sur l'icône en bas à droite.

Pour en savoir plus sur la DPA, veuillez consulter cet article de blog.

Suppression structurelle

Vous connaissez peut-être déjà la fonction de navigation structurelle : elle permet de sélectionner des morceaux de code en fonction de leur structure, d'un mot-clé, d'un bloc, d'une méthode, etc.

Lorsque vous utilisez les actions Extend ou Shrink Selection, elles nécessitent une autre étape pour sélectionner une virgule, un point ou un crochet. Il est facile de l'oublier. Si vous supprimiez un bloc, cela entraînait une erreur de code. ReSharper fait un petit nettoyage dans ce cas : si quelque chose a été sélectionné structurellement, ReSharper essaie de le supprimer structurellement lorsque vous appuyez sur Retour arrière ou Supprimer.

Outils de ligne de commande

Si vous travaillez sur une grande base de code, chaque opération à l'échelle de la solution prend beaucoup de temps à s'exécuter. Avez-vous déjà dû attendre que toute la solution soit reformatée après avoir modifié quelques fichiers ? Eh bien, vous pouvez maintenant exécuter l'outil de console CleanupCode sans pointer vers le fichier de solution : indiquez simplement un ensemble de fichiers ou de dossiers. La ligne de commande ressemblera à ceci: cleanupcode.exe [Chemin d'accès au dossier] [Chemin d'accès au fichier] [Chemin d'accès à un autre fichier]

Veuillez noter que l'outil formate uniquement le code. Le nettoyage n'est pas disponible dans ce mode.

Pendant un certain temps, il manquait aussi la prise en charge des plugins dans nos outils de console. Eh bien, elle est de retour ! Pour l'instant, elle n'est disponible que sur Windows. Pour l'utiliser, vous devez connaître l'identifiant du plugin. Allez sur JetBrains Marketplace, ouvrez la page du plugin, cliquez sur l'onglet Versions, puis sur n'importe quelle version et vous verrez l'identifiant du plugin. Après cela, utilisez la touche -x=[ID] avec l'identifiant du plugin lors du lancement d'InspectCode ou de CleanupCode. L'outil de console téléchargera et activera automatiquement le plugin : cleanupcode.exe -x = [identifiant] [Chemin d'accès au fichier de la solution ].

Veuillez noter que le plugin doit être compatible avec la version de l'outil. Also, plugins are not yet supported if you’re using the .NET Core global tools mechanism to install ReSharper’s command line tools.

Navigation

Avez-vous déjà rencontré des difficultés lors de la recherche de texte ? Peut-être pour une chaîne dans votre code ou un commentaire ? Ou une faute de frappe dans votre texte vous a-t-elle empêchée de trouver quelque chose ?

Find Text effectue désormais une recherche de correspondance en plus de la recherche exacte, en tenant compte des éventuelles fautes de frappe et des mots manquants. Les résultats sont affichés sous les résultats de la recherche normale de sous-chaînes, dans la section Fuzzy. Conseil : cela peut être très utile si vous recherchez une build de chaîne mise en forme particulière dans votre code.

Prise en charge d'Avalonia

Analyse du code

Comme c'est généralement le cas pour tous les frameworks de type WPF, l'analyse du code fournit de nombreuses inspections de code communes avec les correctifs rapides appropriés pour les fichiers C# code-behind et .axaml, y compris "Possible 'System.NullReferenceException'" et "Class/Property {...} is obsolete: Use {...}".

En plus des inspections WPF courantes, de nombreuses inspections spécifiques à Avalonia, telles ''Path to resource is case-sensitive'' or ''ColumnDefinitions tag can be converted to attribute'' sont proposées avec des correctifs rapides. Pour cette dernière, une action contextuelle sur l'attribut ColumnDefinitions="*,Auto,*" permet de reconvertir en <Grid.ColumnDefinitions> balise.

Nous avons ajouté une meilleure prise en charge des syntaxes $self, $parent, ^ et # dans les liaisons Avalonia, ainsi qu'une validation correcte des index dans $parent[].

La prise en charge de CompiledBinding et de l'extension x:CompileBindings est étendue. ReSharper sait que DataType est requis ici et vous invite à le spécifier pour les liaisons dans votre code.

Le correctif rapide « Create from usage » est disponible pour toutes sortes de propriétés d'Avalonia.

La prise en charge d'Avalonia XAML inclut la compréhension du système de style de type CSS.

Les conseils d'insertion vous aident à mieux comprendre le code que vous avez sous les yeux.

Saisie automatique du code

La saisie semi-automatique du code et les informations sur les paramètres sont disponibles pour tous les mots-clés XAML, toutes sortes d'extensions markup, les propriétés x:Name, Style, Source pour StyleInclude, et bien plus encore.

Navigation

Vous pouvez facilement accéder au type de données de liaison compilé, à la propriété liée, au type de contrôle Avalonia et aux déclarations x:Name. ReSharper peut également passer directement du XAML au code externe décompilé, y compris pour les propriétés du setter de style et les espaces de noms xmlns référencés.

Find Usages

Find Usages vous aide à trouver toutes les utilisations des liaisons de méthodes, attributs x:Name, classes Style et de leurs setters, ainsi que de toutes sortes de propriétés.

Refactorisations

Les refactorisations Rename et Safe Delete tiennent désormais compte de toutes les sortes d'utilisations dans le code Avalonia XAML et les mettent à jour en conséquence.

Hiérarchie et structure du code

Vous pouvez observer la hiérarchie et la structure du code XAML Avalonia.

Mises à jour du décompilateur

Le décompilateur intégré de ReSharper a également bénéficié de mises à jour pour prendre en charge davantage de fonctionnalités C#. Nous avons amélioré le mécanisme de synchronisation entre IL Viewer et le code source.

Pour les instructions de niveau supérieur, nous avons ajouté un nœud dans Assembly Explorer. Vous pouvez double-cliquer ou utiliser la navigation du menu contextuel sur ce nœud pour accéder aux instructions de niveau supérieur réelles dans le code décompilé.

Private Source Link est maintenant pris en charge. Après avoir navigué vers des sources externes nécessitant une connexion à un serveur source privé, ReSharper affichera une notification et vous permettra de saisir vos informations d'identification ; à moins, bien sûr, que vous ne les ayez déjà spécifiées dans les paramètres de Visual Studio, auquel cas elles seront appliquées automatiquement (pour GitHub et BitBucket).

Blazor

Nous continuons à renforcer la prise en charge de Blazor. Cette itération a pour but de prendre en charge les paramètres de type générique et leurs inférences de type à partir des utilisations et à éliminer les problèmes de performance lors de l'ouverture des solutions. Pour la liste complète des problèmes résolus, consultez notre outil public de suivi des bugs.

Le compagnon idéal d'Unreal Engine

Unreal Engine

ReSharper C++ 2020.3 offre une intégration transparente avec UnrealHeaderTool pour vous aider à détecter les problèmes qui ne sont généralement découverts qu'au moment de la compilation. ReSharper C++ exécute UnrealHeaderTool en arrière-plan et affiche les résultats de l'analyse en temps réel directement dans l'éditeur.

Pour améliorer sa prise en charge de HLSL, ReSharper C++ se dote d'inspections d'analyse de flux de contrôle pour les fichiers shader. Le suivi en direct des modifications apportées aux fichiers de configuration de build permet à ReSharper de toujours utiliser le modèle de projet le plus à jour.

Pour en savoir plus

Meilleure prise en charge de C++20

C++20

ReSharper C++ 2020.3 implémente les modifications C++ 20 des règles de comparaison. Avec des inspections plus riches et les messages d'erreur, vous pouvez compter sur ReSharper C++ pour mieux comprendre le comportement de votre code et les nouveaux correctifs rapides vous aident à travailler facilement avec les opérateurs de comparaison.

En outre, ReSharper C++ 2020.3 apporte de nouvelles inspections pour vous aider à adopter la bibliothèque ranges de C++ 20 et inaugure la prise en charge du mode standard des coroutines C++ 20 introduites dans Visual Studio 16.8.

Pour en savoir plus

Inspections de la chronologie dotUltimate

Inspections de la chronologie

dotMemory utilise les données de la chronologie pour fournir des inspections automatiques directement sur le graphique de la chronologie.

Trois inspections sont actuellement disponibles :

  • Pression élevée sur le ramasse-miettes
  • Objets épinglés dans Gen0
  • Taux de croissance rapide du tas d'objets volumineux

En savoir plus

Amélioration des tests en continu dotUltimate

Amélioration des tests en continu

Désormais, vous pouvez spécifier les projets à construire lorsqu'une session de test en continu est déclenchée. Cela vous permet d'accélérer les sessions de test en continu. Cette fonctionnalité peut être utilisée dans Visual Studio comme dans Rider.

En savoir plus

Autres mises à jour

  • Prise en charge des annotations Nullable sur les types génériques sans contrainte (inclut la contrainte par défaut).
  • Nous avons implémenté une petite mise à jour de la prise en charge de TypeScript : ReSharper prend désormais en charge la coalescence nulle et le chaînage facultatif.
  • Nous avons ajouté un nouveau correctif rapide qui vous aide à transformer une vérification de schéma séquentiel en une vérification complexe de correspondance de schéma.
  • Dans la refactorisation Change Signature, nous avons remanié l'outil utilisé pour définir la valeur par défaut du paramètre que vous ajoutez : l'outil qui s'ouvre lorsque vous choisissez "Resolve with call tree". La navigation vers le code est désormais disponible en double-cliquant sur un nœud. Il existe une nouvelle option appelée « Create default parameter » qui vous emmène directement dans le code pour en spécifier la valeur. Enfin, des couleurs différentes sont appliquées pour les divers correctifs sélectionnés dans l'arborescence. Nous espérons que cela facilitera la résolution des utilisations !
Télécharger

Essai gratuit sur 30 jours disponible