Nouveautés de ReSharper 2021.1

ReSharper 2021.1 apporte des améliorations dans l'analyse du code, la prise en charge des modèles de route ASP.NET, le renommage des composants de tuples, et plus encore.

Télécharger

Essai gratuit sur 30 jours disponible

Analyse du code

Ajout de modèles de fusion

L'inspection Merge into pattern peut maintenant traiter beaucoup plus de schémas de code. Fusionnez les vérifications de valeurs null avec les autres vérifications dans un seule et même vérification de pattern :

Réécrivez les contrôles des expressions conditional?.Access dans la reconnaissance de schémas imbriquée :

Réduisez l'imbrication d'instructions if en fusionnant les vérifications :

Enfin, vous pouvez fusionner les patterns dans un simple pattern de déconstruction var (a,b) en les développant dans un formulaire complet :

Prise en charge de C# 9.0 étendue

Nous avons amélioré la prise en charge des enregistrements C# 9.0. Les refactorisations Extract interface et Extract superclass fonctionnent maintenant avec les déclarations d'enregistrements, tout comme File Layout et les fonctionnalités liées à la documentation XML.

Nous avons ajouté plusieurs nouvelles inspections et actions. Redundant explicit property declaration pour les propriétés dans les déclarations record peut être utile lors de la migration du code pour utiliser des enregistrements avec des paramètres positionnels et des déclarations de propriétés implicites. Un correctif rapide correspondant, Remove explicit property, est inclus.

Si vous décidez de convertir un enregistrement en classe, l'action To class se chargera des paramètres positionnels et du constructeur primaire. Il y a une action To record qui fonctionne aussi dans le sens inverse.

Pensez à utiliser l'action contextuelle To explicit constructor lorsque vous devez réécrire des paramètres positionnels et un constructeur primaire en propriétés ordinaires, constructeur et méthode Deconstruct() explicite.

Il y a aussi de quoi garder les choses en ordre : l'inspection Redundant 'record' type declaration body et le correctif rapide correspondant remplaceront le corps vide de la déclaration de type record par un point-virgule.

Find usages recherche désormais les utilisations du constructeur primaire d'un enregistrement et les utilisations d'une méthode Deconstruct() implicite.

Convertir une variable temporaire en variable inline

Nous avons le plaisir de présenter une nouvelle inspection : Inline temporary variable. Parfois, vous vous retrouvez à utiliser la même valeur à maintes reprises sous différents noms dans votre programme. Est-il possible de rendre ce genre de code plus transparent ? Bien sûr, et ReSharper est là pour vous y aider.

Il peut même vous aider à trouver des bugs si la variable temporaire était censée être initialisée par une autre valeur ou mutée plus tard dans le code.

Autres ajouts

Les patterns logiques not peuvent vous aider à rendre vos vérifications de types beaucoup plus faciles à lire. ReSharper permet d'abandonner la syntaxe !() au profit d'un pattern not.

ReSharper suggère désormais d'utiliser l'opérateur de plage au lieu de Slice et Substring, si cela simplifie le code.

L'inspection Namespace does not correspond to file location est désormais supprimée dans les fichiers contenant du code de niveau supérieur.

Une autre nouvelle inspection vérifie si une propriété automatique peut être remplacée par une propriété calculée, avec un un correctif rapide pour effectuer le remplacement.

En ce qui concerne la prise en charge de C# 10.0, nous avons appris à ReSharper à travailler avec la fonctionnalité d'interpolation constante des chaînes.

Ne manquez pas l'article de blog qui vous donnera tous les détails sur l'analyse de code dans la version 2021.1 !

Modèles de route ASP.NET Core

Les modèles de route sont largement utilisés dans les applications MVC pour configurer la manière dont les requêtes HTTP sont associées aux points de terminaison exécutables de l'application. Dans la version 2021.1, nous introduisons la prise en charge des modèles de route : ReSharper offre désormais une navigation structurelle, des inspections et des correctifs rapides. Voyons quelques exemples.

Les inspections les plus basiques vérifient les erreurs de syntaxe des modèles de route : une route de paramètre catch-all placée accidentellement au milieu du modèle, la déclaration du paramètre catch-all comme optionnel, l'ajout d'une valeur par défaut pour le paramètre optionnel, et ainsi de suite.

Les paramètres de route sont à l'origine de cas intéressants. Que se passe-t-il si vous déclarez un paramètre avec le même nom dans le contrôleur et dans l'action ? ReSharper vous le signalera par un avertissement.

Par ailleurs, des paramètres peuvent manquer. Dans ce cas, ReSharper vous proposera de les ajouter, soit à partir de l'attribut du contrôleur, soit à partir de l'action. S'il existe une contrainte de type, elle sera utilisée pour l'inférence du type du paramètre.

En parlant de contraintes, elles constituent un bon terrain pour l'analyse du code. ReSharper vérifie si la contrainte appliquée est correcte et si un paramètre répond effectivement à la contrainte.

Il essaie également d'analyser si le type de paramètre peut être plus strict, en fonction de la contrainte, et peut suggérer de changer le type. Si vous avez délibérément choisi un type différent pour le paramètre, ne tenez simplement pas compte de la suggestion.

ReSharper est également capable de prendre en compte les contraintes personnalisées. Si dans certains cas ils ne sont pas reconnus, annotez votre classe de contrainte avec l'attribut [RouteParameterConstraint] fourni par JetBrains.Annotations.

Quant aux autres fonctionnalités de notre pack standard, elles comprennent la saisie semi-automatique du code, la navigation structurelle et la réorganisation du code.

Le changement de nom des paramètres de route n'a plus besoin d'être effectué manuellement : la refactorisation Rename est là pour vous.

Tout ce qui précède fonctionne pour l'instant pour le routage basé sur les attributs. Nous sommes impatients de connaître votre avis sur cette nouveauté.

Pour en savoir plus sur les modèles de route ASP.NET Core, veuillez consulter cet article de blog.

Renommer dans les tuples

Les tuples nommés sont présents depuis C# 7, mais le renommage des composants restait une opération manuelle. Désormais, vous pouvez faire appel à la refactorisation.

Navigation

Vous disposez maintenant d'une nouvelle action de navigation : Navigate to Windows Explorer. Vous la trouverez dans le menu Navigate | Navigate to ou en appuyant sur Ctrl+Maj+A et en tapant son nom. Cela peut être utile si vous agissez sur le fichier lui-même, par exemple si vous le copiez ou si vous copiez le chemin à l'intérieur du référentiel, ou si vous préférez voir l'historique du VCS du fichier en utilisant les extensions Git pour l'explorateur Windows.

Performances

Bien que nous soyons toujours en train de travailler l'avancement du mode « out of process » pour ReSharper, nous continuons de corriger les problèmes spécifiques de performance. Voici quelques exemples de que nous avons pu faire.

  • Nous avons accéléré la saisie des fichiers Razor au sein des solutions contenant de nombreux projets.
  • Nous avons accéléré la saisie dans tous les fichiers volumineux dans lesquels les analyseurs de ReSharper sont utilisés.
  • Nous avons amélioré les performances et la réactivité des conseils sur les données dans le débogueur.
  • Nous avons optimisé la façon dont ReSharper traite les documents partagés, de sorte qu'il consomme désormais moins de mémoire.
  • Nous avons implémenté des améliorations de performance pour les tests unitaires JavaScript et TypeScript.

Mise en forme et Styles de code

Nous avons ajouté quelques nouveaux paramètres :

  • Vous pouvez maintenant choisir de mettre un espace avant et dans les parenthèses de la cible new().
  • Vous pouvez spécifier le retour à la ligne avant l'opérateur d'affectation.
  • Vous pouvez ajouter un retrait négatif aux déclarations d'étiquettes.

Nous avons modifié l'ordre dans lequel les règles de nommage personnalisées sont appliquées : les règles les plus spécifiques s'appliquent dorénavant en premier.

Enfin, nous avons ajouté une nouvelle action pour le format de la sélection. Vous pouvez maintenant demander à ReSharper de n'ajuster les retraits que pour le code sélectionné au lieu d'effectuer tout le processus de reformatage.

Nous avons également corrigé un ensemble de bugs. Vous pouvez trouver les détails sur notre outil de suivi.

EditorConfig

EditorConfig est de plus en plus populaire dans la communauté .NET et nous continuons à améliorer son intégration avec ReSharper. Voici ce que nous avons changé :

  • Nous avons amélioré la façon dont ReSharper lit les paramètres des règles de nommage à partir d'EditorConfig et celle dont il écrit les règles de nommage définies par l'utilisateur dans EditorConfig.
  • Si les règles de nommage sont redéfinies dans EditorConfig, ReSharper affiche une notification sur la page des paramètres de nommage.
  • Nous avons ajouté la prise en charge de l'option csharp_indent_case_contents_when_block dans EditorConfig.

Tests unitaires

  • We’ve implemented support for VSTest adapters – a feature that allows you to discover and run tests from a third party framework. Désormais, vous n'êtes plus limité par les frameworks que nous prenons en charge par défaut. Activez la fonctionnalité dans ReSharper | Options | Tools | Unit Testing | Test Frameworks | VSTest.
  • Nous avons implémenté la prise en charge de MSTest dans les projets de la plateforme d'application universelle Windows pour Visual Studio 2019.
  • Certains d'entre vous ont rencontré le problème de « processus engendré » : parfois, le testeur termine son travail, mais un processus qu'il a lancé reste actif. Nous avons ajouté un paramètre pour le plan d'action par défaut dans ce cas. Vous pouvez maintenant choisir entre indiquer ce que vous désirez faire, ne rien faire ou terminer le processus généré. Votre choix est enregistré dans ReSharper | Options | Tools | Unit Testing | Test Runner. Vous pouvez toujours l'effacer si ce n'était pas correct.
  • Nous avons implémenté un ensemble d'inspections pour la bibliothèque AutoFixture dans NUnit. ReSharper vérifie désormais si le type de valeur de test est correct, vérifie qu'il n'y a pas d'arguments redondants dans l'attribut [InlineAutoData], et vous avertit s'il n'y a pas d'attribut [TestFixture] ou [Test] sur la classe ou la méthode de test.
  • Nous avons mis à jour notre prise en charge de QUnit vers la version 2.14.0.

Prise en charge de C++

ReSharper C++ 2021.1 apporte la prise en charge de plusieurs nouvelles fonctionnalités du langage C++20 et C++17 : les types de classe dans les paramètres de modèles non typés, les règles C++20 de déduction des arguments de modèles de classe et noexcept en tant que composante du type de fonction. Il existe également de nouveaux éléments de saisie automatique du code pour les coroutines, disponibles à la fois dans la saisie automatique du code de base et comme modèles de complétion postfix : co_await, co_yield et co_return.

Style de syntaxe C++

Nous avons ajouté une série de paramètres de style de syntaxe que vous pouvez utiliser pour appliquer le style de code souhaité pour les constructions de syntaxe. Avec les inspections complémentaires, les correctifs rapides et les actions contextuelles Apply Syntax Style et Cleanup selection, vous pouvez facilement appliquer le nouveau style à la base de code et assurer la cohérence du nouveau code.

Autres mises à jour

  • Nous avons ajouté une action pour copier les liens GitHub avec la fonctionnalité Copy FQN. Lorsque vous appelez Copy Fully-qualified name depuis le menu principal (ReSharper | Edit) ou depuis Ctrl+Maj+A, ReSharper effectue la copie et ouvre un menu contextuel où vous pouvez choisir parmi plusieurs formats, au cas où vous auriez besoin d'un format autre que le format par défaut. Ce menu inclut désormais les liens GitHub.
  • Si vous utilisez des expressions régulières dans des chaînes en C#, VB.NET ou JavaScript, même dans des Razor Pages, vous apprécierez probablement la fonctionnalité d'extension/réduction de la sélection, qui fonctionne désormais avec les injections également.
  • Nous avons ajouté des conseils de conversion de type pour les conversions de tuples.
  • Une nouvelle contrainte Body est disponible pour les méthodes dans File Layout. Elle vous permet de spécifier différentes règles pour les méthodes block-bodied et expression-bodied.

Nouvel écran d'accueil dans dotTrace et dotMemory dotUltimate<0>.

Les écrans d'accueil de dotTrace et dotMemory ont été complètement retravaillés. Ces modifications facilitent notamment la configuration et le lancement de nouvelles sessions de profilage et le travail avec des instantanés.

Télécharger

Essai gratuit sur 30 jours disponible