Nouveautés de ReSharper C++

ReSharper C++ 2020.1 introduit de nouvelles fonctionnalités et met à niveau certaines de celles qui existent déjà. Parmi les améliorations les plus notables, citons les mises à jour de la prise en charge de C++ 20, l'amélioration de la saisie semi-automatique du code et un nouveau lot d'inspections de code accompagnées de leurs correctifs rapides. De nouvelles fonctionnalités d'assistance au codage telles que Rearrange Code et Complete Statement vous aident à écrire et à modifier votre code efficacement. Pour les développeurs de jeux, ReSharper C ++ propose une prise en charge initiale de HLSL et s'harmonise davantage avec les directives d'Unreal Engine.

Télécharger

Essai de 30 jours gratuit

C++20

La norme C++ 20 a presque été approuvée et ReSharper C++ offre la prise en charge d'un nouvel ensemble de ses fonctionnalités.

Using enum

Using enum

ReSharper C++ 2020.1 ajoute la prise en charge des déclarations using enum, qui vous permettent d'intégrer les énumérateurs spécifiques d'une énumération de portée dans la portée locale. Une nouvelle refactorisation, Introduce Using Enum, est à votre disposition pour vous aider à ajouter des déclarations using enum au code existant.

Concepts

Concepts de C++20

Pour les concepts de C++ 20, ReSharper C++ prend en charge la nouvelle syntaxe pour les espaces réservés de type contraint et les modèles de fonction abrégés. Des messages d'erreur améliorés sur les contraintes non respectéesvous aident à comprendre ce qui s'est passé lors de la substitution de modèle.

Using enum

Syntaxe de modèle pour les lambdas

ReSharper C++ suggère également un correctif rapide pour utiliser la syntaxe de modèle pour les lambdas si cela peut éviter les erreurs ou unifier votre utilisation des lambdas et des fonctions.

Unreal Engine

Unreal Engine

ReSharper C++ 2020.1 améliore la refactorisation Rename dans les projets Unreal Engine. Il met maintenant à jour la directive include *.generated.h correspondante et les fichiers associés avec les préfixes A, F, E, T, S, et U.

Si ReSharper C++ détecte un projet Unreal Engine, il modifie les paramètres par défaut pour cesser de suggérer Use auto afin de mieux respecter les directives d'Unreal Engine. De plus, ReSharper C++ 2020.1 inclut des règles de nommage actualisées pour les variables de console et les catégories de journaux. Vous pouvez désormais naviguer vers des espaces de noms qui contiennent une énumération dans le style d'Unreal Engine depuis Search Everywhere/Go to.

Enfin, ReSharper C++ prend désormais également en charge les fichiers USF avec des chemins d'accès aux fichiers virtuels et le GDK SpatialOS. En savoir plus.

HLSL Expérimental

HLSL

ReSharper C++ 2020.1 propose désormais une prise en charge initiale pour HLSL, le langage d'ombrage de haut niveau. ReSharper C++ met en évidence le code HLSL en fonction de votre palette de couleurs par défaut et affiche des conseils d'incrustation et des infobulles pour les éléments de code, contenant des informations de type et de la documentation. Vous pouvez également rechercher des structs, des fonctions ou des paramètres dans l'ensemble de votre solution et y accéder rapidement, ainsi que des fichiers référencés et des bibliothèques standard. Et pour parfaire l'expérience HLSL, ReSharper C++ vous propose également une saisie intelligente du code, des délimiteurs de correspondance à insertion automatique, et bien plus.

Analyse du code

Analyse du code

Plusieurs nouvelles inspections sont disponibles pour les problèmes suivants, avec les correctifs rapides correspondants qui vous aident à les résoudre :

  • Capture lambda inutilisée.
  • Une lambda peut être réécrite pour utiliser des paramètres de modèle explicites.
  • Cast de style fonctionnel utilisé à la place d'un cast C++.
  • reinterpret_cast utilisé au lieu d'un static_cast lors d'une conversion vers void*.
Analyse du code

Deux autres fonctionnalités vous aident à adopter l'attribut maybe_unused de C++ 17 :

  • Un correctif rapide pour ajouter [[maybe_unused]] à un paramètre ou une variable inutilisé(e).
  • Une action contextuelle pour remplacer les annotations UNREFERENCED_PARAMETER et Q_UNUSED par [[maybe_unused]].

Le binaire Clang-Tidy intégré a été mis à jour vers Clang 10. Il se dote ainsi de plus de 70 nouveaux contrôles et diagnostics du compilateur provenant de la dernière version de LLVM.

Saisie automatique du code

La liste de la saisie semi-automatique propose désormais des noms de libellés, des attributs C++ standard, le nouveau modèle postfix std::forward et des arguments pour les appels à une fonction de base. De plus, ReSharper C++ propose désormais la saisie semi-automatique du code dans les corps de macro.

Assistance au codage

Assistance au codage

Deux fonctionnalités bien connues de ReSharper pour .NET sont finalement arrivées dans ReSharper C++ :

  • Rearrange Code déplace rapidement les éléments de code, élargit ou réduit la portée actuelle, et plus encore.
  • Complete Statement insère les éléments de syntaxe requis pour terminer la déclaration en cours et place le caret au bon endroit.

Grâce à une aide à la frappe améliorée, vous pouvez désormais sélectionner n'importe quel morceau de code et saisir une parenthèse, une accolade, un crochet ou des guillemets pour entourer la sélection des caractères correspondants. Les aides à la lisibilité du code (suggestions de nom de paramètre et de type) sont désormais disponibles dans le code dépendant.

La nouvelle action d'édition Document, liée à Ctrl+/ par défaut, vous permet de générer rapidement un commentaire de documentation pour l'élément de code à proximité, au lieu d'utiliser l'action contextuelle.

Refactorisations des enum

Refactorisations des enum

ReSharper C++ 2020.1 propose deux nouvelles refactorisations pour améliorer votre utilisation des énumérations :

  • Convert to Scoped Enum convertit une déclaration d'énumération de style C en une énumération de portée C++ 11.
  • Introduce Using Enum ajoute une déclaration C++ 20 using enum et raccourcit les références à l'énumérateur pour faciliter la lecture de votre code.

Navigation

Les fonctionnalités de navigation dans le code ont été étendues pour gagner encore en praticité :

  • Go to Declaration est disponible pour les identifiants situés dans les commentaires.
  • Search Everywhere/Go to inclut deux nouvelles catégories de filtres : les concepts et les espaces de noms. Saisissez « / » dans la zone de recherche pour voir tous les filtres disponibles.
  • Vous pouvez maintenant cliquer avec le bouton du milieu (le bouton de défilement de votre souris) pour appeler Go to Declaration.

Dans la fenêtre File Structure, les icônes comportent désormais des indicateurs d'accessibilité, d'héritage et de spécificateurs virtuels/statiques/purs pour les membres de la classe.

Tri des directives include

Tri des directives include

ReSharper C++ vous a permis de trier les directives # include, de réorganiser les groupes existants et d'en créer de nouveaux, séparés par des lignes vides. ReSharper C++ 2020.1 ajoute deux nouveaux paramètres pour faciliter la configuration de cette action :

  • Tri sensible à la casse.
  • Regroupement des en-têtes par répertoire.

Et il est désormais possible d'importer les paramètres de tri à partir d'un fichier .clang-format si Read code style form .clang-format style est coché sur la page ReSharper | Options | Code Editing | General Formatter Settings.

Autres évolutions

ReSharper C++ 2020.1 propose plusieurs autres modifications notables :

  • Les boîtes de dialogue Generate fournissent une option pour ajouter l'attribut C++ 17 [[nodiscard]] aux getters et aux constructeurs générés.
  • Generate mock functions prend en charge la macro MOCK_METHOD introduite dans GTest 1.10.
  • Le nouveau paramètre Use named pipes to communicate with child processes (Utiliser des canaux nommés pour communiquer avec les processus enfants) vous permet de corriger les tests unitaires dont le comportement pose problème en raison du logiciel de sécurité.

D'autres changements viennent en outre de ReSharper lui-même. Par exemple, il est maintenant possible d'exporter et d'importer les sessions de tests unitaires.

Télécharger

Essai de 30 jours gratuit

ReSharper C++ 2019.3

Prise en charge de C++20

Prise en charge de C++20

Le développement des fonctionnalités de C++20 est terminé. Il sera officiel dès l'année prochaine pour apporter un éventail d'améliorations très attendues des développeurs C++. ReSharper C++ 2019.3 prend déjà en charge beaucoup de ces fonctionnalités, renforcées par une analyse et des informations supplémentaires.

Pour commencer, ReSharper C++ a maintenant conscience que les agrégats peuvent être initialisés à partir d'une liste de valeurs entre parenthèses, et qu'un ADL supplémentaire est nécessaire dans certains cas avec les modèles de fonctions.

Non seulement les concepts sont pris en charge dans l'analyseur de ReSharper C++, mais les refactorisations Rename et Find Usages sont également disponibles. Mieux encore, l'analyse du code peut à présent afficher davantage de détails sur les erreurs associées aux concepts. Par exemple, si la résolution d'une surcharge échoue parce qu'une exigence de concept n'est pas remplie, vous verrez toutes les informations dans une infobulle. D'ailleurs, dans ReSharper 2019.3, nous avons également ajouté des couleurs à l'infobulle des informations sur les échecs de résolution des surcharges.

Nous avons initié une série d'articles de blog sur C++20 et ReSharper C++. Vous pouvez les lire pour en savoir plus sur les nouvelles fonctionnalités du langage et leur adoption dans ReSharper C++.

Analyse de code et correctifs rapides

Analyse de code et correctifs rapides

Si vous trouvez un avertissement Clang trop perturbant, vous pouvez à présent le désactiver dans le menu d'inspection. Et pour toutes les vérifications de code, vous pouvez désormais supprimer l'inspection correspondante pour l'ensemble de ces incidents dans le fichier. Il vous suffit d'utiliser Disable in file with comment, voir de supprimer toutes les inspections du fichier à l'aide de Disable all inspections in file with comment.

Lorsque vous saisissez un corps de lambda, un nouveau correctif rapide vous aide à ajouter des variables à la liste de capture lambda. Pas besoin de le faire manuellement. Il suffit de placer le caret sur une variable dans le corps de la lambda et d'appuyer sur Alt+Entrée. ReSharper C++ suggère une liste de moyens pour mettre à jour la liste de capture.

Clang-Tidy

Clang-Tidy

Dans cette version, nous avons mis à niveau le binaire Clang-Tidy intégré vers Clang 9, pour vous offrir de nombreuses nouvelles vérifications de code et leurs correctifs associés. Il est important de noter que le binaire intégré n'empêche plus de modifier les fichiers sources. Clang-Tidy se lance en outre plus vite car il n'a pas à attendre la fin de l'ensemble des autres analyses de ReSharper C++.

Les réglages de Clang-Tidy ont été améliorés dans plusieurs domaines :

  • Vous avez à présent 3 possibilités pour l'exécutable Clang-Tidy dans ReSharper C++. En plus du binaire intégré et d'un binaire personnalisé, que vous pouvez indiquer dans les paramètres, vous pouvez désormais sélectionner celui de %PATH% (ReSharper C++ cherche alors dans les dossiers répertoriés dans la variable d'environnement %PATH% et vous indique s'il trouve quelque chose).
  • Vous pouvez maintenant pointer ReSharper C++ vers un fichier de configuration Clang-Tidy spécifique au lieu de la chaîne de format YAML/JSON utilisée auparavant.

Suggestions de types

ReSharper C++ vous propose des suggestions pour améliorer la lisibilité de votre code. Les nouvelles suggestions de code ajoutées à la v2019.3 vous aident à identifier des types qui n'apparaissent pas comme évidents lorsque vous examinez un code C++ moderne :

  • Pour les variables automatiques
  • Dans les liaisons structurées
  • Pour les types de retour de lambdas et de fonctions
Modèles dynamiques

Modèles dynamiques

Dans ReSharper C++ 2019.3, plusieurs modèles en direct ont été renommés pour correspondre au clavier associé au langage. Par exemple, pour générer une classe, saisissez class (anciennement cls) ; pour les structures, utilisez struct au lieu de str ; et utilisez une logique similaire pour les unions, les énumérations et les espaces de noms.

Améliorations de la navigation

Améliorations de la navigation

Go to file member a été amélioré de deux façons :

  • La boîte de dialogue s'affiche instantanément sans attendre que le fichier soit analysé.
  • Si la déclaration et la définition de la fonction se trouvent toutes les deux dans le même fichier, la boîte de dialogue ne les répertorie plus qu'une seule fois.

Dans les listes de l'initialiseur, les suggestions de code vous aident à mieux comprendre ce que vous initialisez vraiment. Vous pouvez désormais naviguer jusqu'à la classe agrégée à partir de l'accolade ouvrante d'une liste d'initialiseur entre accolades.

Analyse de code et correctifs rapides

Formateur

Dans ReSharper C++ 2019.3, il est maintenant possible d'exporter vos paramètres de mise en forme vers un fichier .clang-format. Utilisez ReSharper | Options | Code Editing | General Formatter Style | Write current style to .clang-format.

Deux nouvelles options de mise en forme ont été ajoutées pour contrôler l'espacement :

  • avant ptr dans une déclaration abstraite
  • avant ref dans une déclaration abstraite

ReSharper C++ 2019.3 peut maintenant vérifier l'ordre des directives #includes dans votre code. Il vous suffit de fournir les paramètres de tri. Une inspection et un correctif rapide vous aideront à détecter tout problème de tri et à les remettre dans l'ordre en un rien de temps.

Prise en charge d'Unreal Engine 4

Prise en charge d'Unreal Engine 4

Si ReSharper C++ détecte que vous développez un projet Unreal Engine, il ajuste son comportement pour mieux s'adapter à UE4.

Le modèle postfix "new" pour les UCLASS s'étend pour former un véritable appel de fonction factory (qui peut enregistrer l'objet créé dans le ramasse-miettes). Des modèles dynamiques portant les noms correspondants sont désormais disponibles pour vous aider à générer rapidement USTRUCT/UCLASS/UENUM/UENUMCLASS.

Les pointeurs intelligents d'Unreal Engine (TSharedPtr, TSharedRef, TWeakPtr, TUniquePtr) sont à présent gérés par ReSharper C++ de façon similaire à std::shared_ptr/std::unique_ptr. Cela signifie que des fonctionnalités comme Parameter Info, l'analyse de code et la saisie semi-automatique du code postfix fonctionnent aussi pour les pointeurs intelligents.

Enfin, plusieurs améliorations de performances ont été apportées pour les projets UE4. Nous avons par exemple corrigé un blocage après l'actualisation "Refresh Visual Studio Project" dans l'éditeur UE4.

Propriétés du projet

Propriétés du projet

En ce qui concerne la chaîne d'outils du compilateur personnalisé ou l'outil de build personnalisé, ReSharper C++ 2019.3 s'enrichit des propriétés du projet ReSharper Project Properties. Elles sont stockées dans les réglages de ReSharper et vous permettent de préciser :

  • Inclure les répertoires
  • Définitions de préprocesseurs
  • La norme du langage C++

Améliorations des performances

Grâce aux améliorations du moteur de mise en évidence des éléments syntaxiques du code, le surlignage du code est maintenant accéléré après le premier passage. Si le corps d'une fonction a été modifié, seul le corps sera analysé la seconde fois.

Find Usages a été accéléré grâce à l'ajout de fonctions heuristiques basées sur le schéma des inclusions. Cela permet de mettre de côté les fichiers ne comportant aucune utilisation.

Autres évolutions

Ce ne sont pas les seuls changements apportés à ReSharper. Vous pouvez découvrir le reste d'entre eux ici.

ReSharper C++ 2019.2

Démarrage plus rapide

Dans cette version, nous avons finalisé ce sur quoi nous avions travaillé au cours des dernières versions, et nous pouvons maintenant annoncer l'implémentation d'un nouveau préprocesseur dans ReSharper C++. Il y en a en fait deux maintenant : un nouveau pour l'indexation et l'ancien pour tout le reste. Cette nouvelle version assure une indexation de 15 à 25 % plus rapide pour des solutions type, telles que LLVM et Unreal Engine.

Infobulle de résumé pour la saisie semi-automatique

Saisie automatique du code

Lors de la saisie automatique, ReSharper C++ affiche une info-bulle de résumé pour tous les éléments de la liste de saisie (contrôlée par la case à cocher Show summary de la page Environment | IntelliSense | Completion Appearance des options de ReSharper). La description de l'élément de saisie automatique sélectionné ets maintenant en couleur et affiche la documentation pour l'élément correspondant.

Conseils de codage

Conseils de codage

L'éditeur propose encore plus de conseils de codage pour améliorer la lisibilité du code. De nouveaux conseils ont été introduits après les directives de préprocesseur et pour les arguments de fonction qui sont transférés par une référence non constante, tandis que les conseils des expressions d'initialisation agrégées affichent désormais les noms des classes de base initialisées.

Prise en charge de C++20 étendue

La norme C++20 est quasiment prête à être approuvée par le comité C++. Il va sans dire que nous faisons tout notre possible pour la prendre en charge dans son intégralité. ReSharper C++ 2019.2 prend en charge :

  • explicit conditionnel,
  • nouveau type char8_t,
  • expansion du paquet dans lambda init-capture,
  • lamdas sans état constructibles par défaut et assignables,
  • règles C++20 pour les agrégats,
  • spécificateurs consteval et constinit,
  • améliorations de C++20 pour les déclarations de liaisons structurées.
Aide à la saisie

Aide à la saisie

L'aide à la saisie dans les commentaires multilignes a été améliorée. Tout d'abord, les commentaires multilignes utilisant la syntaxe monoligne sont automatiquement étendus. Ensuite, l'extension des commentaires multilignes génère désormais des retraits corrects lorsque l'espace virtuel est activé.

Il est encore plus facile de mettre des blocs de code entre accolades : sélectionnez simplement un bloc de code ou une expression et insérez une accolade ouvrante. ReSharper C++ s'occupe du reste :

Formateur

Formateur

Vous trouverez de nombreuses nouvelles options de mise en forme dans ReSharper C++ 2019.2 :

  • Application de retraits de ligne continus dans la déclaration de fonction et les parenthèses d'appel.
  • Préférence du retour à la ligne avant « ) » dans la déclaration.
  • Préférence du retour à la ligne avant « ) » dans l'appel.
  • Application de retraits de ligne continus dans les listes de l'initialiseur.
  • Alignement des arguments de la liste d'initialiseurs.
  • Préférence du retour à la ligne après « { » dans les listes d'initialiseurs.
  • Préférence du retour à la ligne avant « { » dans les listes d'initialiseurs.

Analyse du code

De nouvelles inspections sont disponibles pour vous aider à identifier davantage de Code Smells :

  • Directive de préprocesseur sans correspondance.
  • Les fonctions de membre spécial utilisées par défaut de façon explicite sont supprimées de façon implicite.
  • Spécificateur de fonction final redondant dans une classe finale.

Le correctif Use static_cast pour l'inspection de cast de style C utilisée peut être exécuté par lot et dans le cadre du nettoyage du code.

Navigation

Navigation

Les actions de navigation du code ont été mises à jour pour améliorer leur précision :

  • Go to declaration permet d'accéder au constructeur par défaut qui est appelé lorsqu'un objet est initialisé par défaut dans les déclarations de variables et les nouvelles expressions.
  • Find usages recherche les utilisations des constructeurs par défaut dans l'initialisation par défaut.
  • Go to symbol masque désormais les symboles ayant des noms qualifiés (comme, par exemple, les définitions de fonction en dehors de la classe).

D'autre part, vous pouvez lancer des recherches dans un fichier depuis la boîte de dialogue Go to File member. La liste de résultats regroupe les noms de tous les membres correspondants et de tous les endroits où la chaîne de recherche apparaît dans le fichier.

Unreal Engine

Au cours de la version précédente, nous avions commencé à travailler sur une meilleure prise en charge des appels de procédure distante propres à UE4. Nous avons désormais mis à jour les refactorisations Rename et Change Signature pour qu'elles fonctionnent correctement sur les fonctions RPC. Quelques nouvelles vérifications d'analyse du code font également leur apparition pour le code basé sur UE4, et ciblent notamment les macros de réflexion UE4 manquantes ou mal définies.

Dans le sillage de l'ajout de la saisie semi-automatique pour les spécificateurs de réflexion dans v2019.1, nous leur avons ajouté une documentation intégrée. Vous la trouverez dans la fenêtre contextuelle Quick Documentation (Ctrl+Q) lorsque le caret est placé sur un spécificateur.

Autres évolutions

ReSharper C++ 2019.2 assure la compatibilité initiale avec le mode de « prise en charge DPI par moniteur » introduit dans Visual Studio 2019. Nous avons également mis à jour la page ReSharper | Options | Environment | Performance Guide, en y ajoutant une section Windows Defender, ainsi que des descriptions de tous les conseils de performances expliquant en détail ce qui va être fait en cas d'application d'une suggestion.

Les créateurs d'extensions n'ont pas été oubliés : les assemblys C++ provenant de ReSharper C++ sont désormais incluses dans le SDK de ReSharper !