Fonctionnalités de ReSharper C++

ReSharper C++ améliore Visual Studio pour les développeurs C++, en fournissant l'analyse du code à la volée, des correctifs rapides, une recherche et une navigation puissantes, la saisie automatique intelligente du code, des refactorisations, diverses options de génération de code et autres fonctionnalités pour accroître votre productivité au quotidien.

Analyse du code

ReSharper C++ commence à analyser le code dès que vous ouvrez votre projet dans l'éditeur Visual Studio, réanalyse les fichiers pendant que vous les modifiez et détecte les problèmes et erreurs éventuels avant même la compilation.

Correctifs rapides

Plus de 40 correctifs rapides sont disponibles pour résoudre instantanément la plupart des problèmes de code détectés. Chaque fois que vous voyez une ampoule sur la gauche de votre code, appuyez sur Alt+Entrée pour appliquer un correctif rapide suggéré.

Par exemple, lorsqu'une variable non initialisée est détectée, vous pouvez l'initialiser immédiatement avec la valeur par défaut. D'autres correctifs rapides vous permettent d'ajouter des directives #include manquantes, ou de supprimer des qualificateurs redondants dans une instruction particulière, ou à plus grande échelle dans un fichier voire même dans la solution entière.

Génération de code à partir d'une utilisation dans ReSharper C++

Créer à partir d'une utilisation

Un autre avantage des correctifs rapides est que vous pouvez commencer à utiliser les classes, méthodes, variables, propriétés et champs avant de les déclarer. Lorsque ReSharper C++ détecte un symbole non déclaré, il propose des correctifs rapides pour générer la déclaration de symbole correspondante en fonction de son utilisation.

Trouver des problèmes de code

Trouver des problèmes de code

Pour n'importe quelle portée donnée, fichier, projet ou solution, vous pouvez demander à ReSharper C++ d'afficher tous les problèmes de code qu'il détecte dans une fenêtre d'outil dédiée.

La fonctionnalité Find Code Issues fonctionne en arrière-plan, ce qui vous permet de continuer à éditer ou à naviguer dans votre code pendant que ReSharper C++ exécute son analyse et remplit la fenêtre de l'outil Inspection Results.

Dès que les résultats sont prêts, vous pouvez les regrouper selon divers critères et effectuer une recherche pour trouver des types de problèmes spécifiques. Vous pouvez également enregistrer et charger les rapports des résultats de Find Code Issues.

Analyse de code C++ à partir de la ligne de commande

Analyse de code C++ à partir de la ligne de commande

Les inspections de code ReSharper C++ sont également disponibles depuis InspectCode, un outil gratuit de ligne de commande qui permet d'exécuter des inspections ReSharper en dehors de Visual Studio.

Pour utiliser InspectCode, téléchargez et décompressez le paquet d'outils de ligne de commande et exécuter InspectCode.exe avec votre fichier de solution comme paramètre. Pour en savoir plus sur l'utilisation d'InspectCode, veuillez lire cet article.

Paramètres Clang-Tidy

Clang-Tidy

ReSharper C++ s'intègre parfaitement à Clang-Tidy, un outil puissant d'analyse de code Open Source basé sur le compilateur Clang. L'intégration fournit les vérifications de code et les correctifs rapides.

Style de syntaxe

ReSharper C++ fournit une série de paramètres de style de syntaxe que vous pouvez utiliser pour que ReSharper suive le style de code de votre choix et l'applique à l'ensemble de votre base de code.

Style de syntaxe

Vous pouvez personnaliser vos préférences de style de syntaxe sur la page Code Editing | C++ | Syntax Style. La valeur de l'option sélectionnée sera utilisée à la fois pour la génération de code et pour l'application du style de code.

Correctifs rapides

ReSharper C++ met en évidence les violations de style et vous propose des correctifs rapides pour vous aider à les éliminer. Tous les correctifs rapides de style de syntaxe peuvent être appliqués dans la portée, y compris dans les portées locales comme les corps de fonction ou les définitions de classe.

Appliquer un style de syntaxe

Pour appliquer le style de syntaxe souhaité, vous pouvez utiliser le nettoyage de code ou l'action dédiée Apply Syntax Style, qui corrigera les problèmes de style de syntaxe dans la sélection, l'ensemble du fichier actuel ou un ensemble de fichiers en fonction du contexte actuel.

Refactorisations

ReSharper C++ fournit plusieurs refactorisations courantes, parmi les Rename, Extract Method et Change Signature. De plus, il offre des dizaines d'actions contextuelles sous forme de transformations du code local disponibles avec un seul raccourci.

Refactorisation Renommer dans ReSharper C++

Rename

La modification du nom d'une classe ou d'une macro peut entraîner de nombreux problèmes si elle est effectuée manuellement. C'est pourquoi, lorsque vous invoquez la refactorisation Rename, ReSharper C++ se charge de toutes les vérifications nécessaires.

Soit toutes les modifications sont effectuées automatiquement, soit une liste de conflits à résoudre manuellement s'affiche pour vous assurer que seules les modifications nécessaires et appropriées sont effectuées.

En plus des symboles de code auxquels vous l'appliquez, la refactorisation Rename peut renommer les fichiers liés (à la fois le fichier source et le fichier en-tête) et le texte associé dans les commentaires et la documentation, mais aussi actualiser les utilisations dans les directives #include.

Refactorisation Extraire la méthode dans ReSharper C++

Extract Method

Le refactorisation Extract Method vous aide à créer une nouvelle méthode basée sur un fragment de code sélectionné. ReSharper analyse le bloc de code sélectionné et détecte les variables qui peuvent être converties en paramètres de méthode ou qui représentent sa valeur de retour.

Refactorisation Change Signature en C++

Change Signature

La refactorisation Change Signature vous permet d'appliquer une ou plusieurs modifications à la signature d'une fonction. Toutes les utilisations, implémentations et substitutions de la fonction seront mises à jour en conséquence.

Refactorisation Inline Variable en C++

Introduce Variable et Inline Variable

La refactorisation Introduce variable vous permet de créer une nouvelle variable locale basée sur une expression sélectionnée, de l'initialiser avec l'expression, et enfin de remplacer toutes les occurrences de l'expression dans le code par des références à la variable nouvellement introduite.

En revanche, Inline variable remplace toutes les occurrences d'une variable ou d'une constante locale donnée par son initialiseur.

Refactorisation Introduce Field dans ReSharper C++

Introduce Field

La refactorisation Introduce Field permet de créer un nouveau champ à partir d'une expression sélectionnée, d'affecter l'expression originale au champ dans son propre initialiseur ou dans le constructeur, et de remplacer les occurrences.

Introduce Namespace Alias

La refactorisation Introduce Namespace Alias aide à définir des noms de raccourcis pour les espaces de noms profondément imbriqués.

Dès que vous invoquez la refactorisation, elle vous suggère de définir une portée pour laquelle vous souhaitez introduire un alias d'espace de nom.

Refactorisations Introduce typedef et Inline typedef dans ReSharper C++

Introduce typedef et Inline typedef

La refactorisation Introduce typedef vous permet de créer rapidement un typedef pour le type de données sélectionné et de remplacer ce type de données et toutes ses occurrences par le nouveau typedef créé.

La refactorisation Inline typedef fait l'inverse : elle remplace un typedef existant par le type de données réel.

Actions contextuelles

En plus des refactorisations, ReSharper C++ fournit un ensemble d'actions contextuelles : des transformations du code local qui aident généralement à basculer entre diverses options syntaxiques. Tout comme les correctifs rapides, elles sont accessibles en appuyant sur Alt+Entrée.

Par exemple, vous pouvez rapidement remplacer auto par un type explicite ou remplacer un type par auto. D'autres actions contextuelles aident à fusionner des instructions if imbriquées, à générer des instructions case manquantes lors de la conversion vers un enum, à substituer un appel de macro ou un typedef, etc.

Assistance au codage

ReSharper C++ étend les façons dont Visual Studio met en évidence la syntaxe et les éléments structurels de code correspondants, fournit sa propre implémentation de la saisie automatique du code et aide à visualiser la documentation disponible pour tout symbole C++.

Mise en évidence automatique des points de sortie

Mise en évidence de la syntaxe et de la structure

ReSharper C++ reconnaît les fichiers *.c, *.cc, *.cxx, *.cpp, *.h et *.hpp dans votre solution, et met en évidence le code source dans ces fichiers selon une palette de couleurs que vous pouvez modifier à tout moment.

De plus, ReSharper C++ met en évidence divers éléments correspondants lorsque vous placez le caret au niveau d'un élément d'une paire, qu'il s'agisse de délimiteurs correspondants, de macros ou d'un spécificateur de format et argument dans un appel de fonction printf.

Lorsque vous placez le caret sur l'un des points de sortie d'une fonction, d'une boucle ou d'une instruction switch (return, throw, break etc.), ReSharper C++ met désormais automatiquement en évidence toutes les autres sorties de fonction ou de boucle.

Saisie automatique des symboles C++ non inclus dans le fichier actuel

Saisie automatique du code

Dans les fichiers C++, vous pouvez utiliser la saisie automatique du code lors de l'écriture de votre code, ce qui suggère parfois des options de génération de code parmi d'autres choix.

La saisie automatique du code peut même suggérer des symboles qui ne sont pas encore inclus dans le fichier actuel. Lorsque vous sélectionnez un symbole comme celui-ci dans la liste de saisie automatique, la directive #include correspondante est ajoutée automatiquement.

Résumé de la documentation

La fenêtre contextuelle Quick Documentation affiche la documentation basée sur les blocs de commentaires Doxygen sans vous forcer à naviguer vers la définition d'un symbole : appuyez simplement sur Ctrl+Maj+F1 dans la configuration de clavier par défaut.

Même s'il n'y a pas de documentation Doxygen disponible pour un symbole, Quick Documentation affichera la signature du symbole.

ReSharper C++ peut également afficher des info-bulles enrichies pour la mise en évidence des éléments de syntaxe dans le code C++. Les info-bulles afficheront les types de fonctions et de variables, ainsi que la documentation.

Les commentaires de documentation XML de style C# sont aussi parfois utilisés pour les symboles C++. ReSharper C++ les affiche correctement dans la fenêtre contextuelle Quick Documentation et dans l'info-bulle des informations rapides.

C++/CLI

Prise en charge de C++/CLI

C++/CLI est un ensemble d'extensions du langage C++ par Microsoft pour faciliter l'interopérabilité entre le code géré et le code natif. Compte tenu de la prise en charge étendue entre les deux langages gérés et le C++, il est naturel pour ReSharper de proposer également de l'aide au niveau de l'écriture de code en C++/CLI.

Dans le code C++/CLI, vous pouvez accéder aux mêmes refactorisations et actions d'intention que dans le code C++ pur. Il est également possible de naviguer entre les univers C# et C++/CLI.

Avec ReSharper C++, se repérer dans le code source devient beaucoup plus facile. Recherchez facilement les déclarations, membres, appels de méthodes ou membres d'une hiérarchie d'héritage à l'aide de simples raccourcis.

Menu Naviguer à dans ReSharper C++

Navigation contextuelle

Pour tous les symboles qui ont des déclarations et définitions séparées, ReSharper C++ affiche l'icône Navigate to declaration/definition sur la gauche (Navigate to declaration/definition icon in ReSharper C++). Cliquez sur l'icône ou appuyez sur Ctrl+B pour passer rapidement de la déclaration à la définition correspondante.

D'autres options de navigation contextuelles dans ReSharper C++ incluent la navigation d'un symbole sélectionné à ses utilisations, symboles de base ou dérivés.

Navigation non contextuelle dans ReSharper C++

Go to anything

ReSharper C++ offre un ensemble de commandes de navigation non contextuelles, notamment Go to File, Go to Symbol, Go to File Member et Go to Everything.

Toutes ces commandes prennent en charge la recherche et le filtrage par chemin selon la convention lowerCamelCase. Par exemple, entrer fc movie dans la fenêtre contextuelle Go to Everything retourne la liste des fichiers et des membres de fichier dont le nom comporte la chaîne movie et qui appartiennent au projet FollowerC ou à l'espace de nom FollowerConstants (tous deux correspondant à fc).

Visualiser les hiérarchies

ReSharper C++ peut vous donner une vue d'ensemble de la hiérarchie d'héritage dont fait partie tout type donné. Vous pouvez voir les types de base et les héritiers du type sélectionné et naviguer vers n'importe lequel d'entre eux en un seul clic.

De plus, ReSharper C++ est livré avec une vue hiérarchique qui sert à visualiser et à vous aider à comprendre les dépendances introduites via des directives #include.

Trouver les utilisations d'un symbole avec ReSharper C++

Rechercher les utilisations

Utilisez Find Usages pour rechercher toutes les références d'un symbole spécifique dans le code C++ de votre solution.

Dès que la recherche est terminée, les occurrences trouvées sont affichées dans une fenêtre d'outils avec des options de regroupement et de filtrage, ainsi qu'un panneau d'aperçu.

Structure de fichier en C++

Structure du fichier

Avec ReSharper C++, vous pouvez voir la structure du document actuel en utilisant la fenêtre File Structure, ce qui simplifie grandement la navigation dans les fichiers volumineux.

Lorsque vous passez à un autre onglet de l'éditeur, la fenêtre de l'outil affiche la structure du fichier correspondant.

To-do Explorer dans ReSharper C++

Explorateur To-do

La fenêtre de l'outil To-do Explorer vous permet de visualiser, regrouper et filtrer les commentaires qui contiennent l'un des 3 modèles de tâches par défaut (Bug, Todo et Not Implemented) et tout modèle personnalisé que vous souhaitez configurer.

Si vous utilisez la licence ReSharper Ultimate complète et que vous disposez d'une solution multilingue, le To-do Explorer regroupera les tâches à effectuer dans tous les langages pris en charge : C#, VB.NET, C++, JavaScript, XAML, HTML, etc.

Génération de code

ReSharper C++ propose plusieurs façons de générer du code standard. En plus de déclarer et de définir des symboles en fonction de leurs utilisations existantes, il peut créer des membres de type, des blocs de code environnants et tout extrait de code dont vous avez généralement besoin dans votre base de code.

Fenêtre contextuelle de génération de code dans ReSharper C++

Générer du code commun

ReSharper C++ offre un moyen rapide de générer des membres manquants, des membres prédominants, des opérateurs d'égalité ou relationnels, des définitions basées sur des déclarations existantes, des fonctions de hachage et de swap et des constructeurs.

Appuyez simplement sur Alt+Ins dans l'éditeur de texte pour appeler le menu Generate et voir toutes les options disponibles.

Modèles surround dans ReSharper C++

Modèles de code et de fichiers

ReSharper C++ est livré avec 29 modèles personnalisables. Certains d'entre eux sont des extraits de code ordinaire, d'autres sont spécifiquement utilisés pour entourer des sélections de code.

Vous pouvez également utiliser et créer des modèles de fichier. Appuyez sur Ctrl+Alt+Ins pour ajouter rapidement une classe au projet sur lequel vous travaillez.

Assistance au style de code

Avec ReSharper C++, le formateur de code apprend de votre code existant et vos préférences de mise en forme et de style de code peuvent être partagées avec les membres de votre équipe.

Assistance au style de code dans ReSharper C++

Formateur de code

ReSharper C++ vous permet de configurer et d'appliquer les règles de mise en forme du code que vous préférez utiliser lorsque vous travaillez sur une solution spécifique.

Si vous préférez, plutôt que de chercher dans toutes les options de mise en forme du code disponibles, vous pouvez sélectionner un bloc de code et configurer uniquement celles qui sont applicables à ce bloc en particulier.

Paramètres de style de code pour l'initialiseur de pointeur par défaut

Paramètres du style de code

Pour garantir un style de code cohérent pour toute l'équipe, vous pouvez enregistrer vos préférences de mise en forme et de nommage dans un fichier de configuration et les partager avec vos coéquipiers.

ReSharper C++ vous permet également de définir d'autres parties des normes de codage d'une équipe, comme l'ordre des modificateurs et la valeur de préférence pour les initialiseurs de pointeur. Par exemple, vous pouvez spécifier 0, nullptr ou NULL comme style d'initialiseur préféré, et ReSharper C++ respectera votre choix quand il générera de nouveaux initialiseurs pour vous.

Utilisez ReSharper Options | Code Editing | C++ | Naming Style pour sélectionner l'un des styles de dénomination C++ prédéfinis : STL, Google, LLVM, CamelCase ou Microsoft.

Détection du style de code

Détection des paramètres de mise en forme

Il est souvent beaucoup plus facile de personnaliser les paramètres de mise en forme en les détectant simplement à partir du code existant. Utilisez le menu ReSharper | Edit | Detect formatting settings pour que ReSharper détecte les paramètres de mise en forme du code. Vous obtiendrez la fenêtre de l'outil avec les valeurs détectées, qui peuvent être consultées et appliquées aux paramètres ReSharper de votre machine. Vous pouvez aussi les enregistrer dans une couche de paramètres partagés en équipe afin que les autres développeurs de votre équipe aient la même configuration de mise en forme du code à l'ouverture de la solution actuelle.

Pour en savoir plus

Tests unitaires

Un exécuteur de tests unitaires intégré à Visual Studio prend en charge les frameworks Google Test, Boost.Test, Catch et Doctest.

Éxécution de tests unitaires

ReSharper C++ est livré avec un module d'exécution de tests unitaires pour Visual Studio qui prend en charge les frameworks Google Test, Boost.Test, Catch et Doctest.

Vous pouvez exécuter et déboguer des tests unitaires et ajouter des tests à différentes sessions directement depuis l'éditeur de texte grâce au menu contextuel accessible via Alt+Entrée.

ReSharper C++ fournit les fenêtres d'outils Unit Test Explorer et Unit Test Sessions pour visualiser, regrouper, filtrer et exécuter des tests unitaires, ainsi que pour créer et gérer des sessions de tests unitaires.

Unreal Engine

Si vous créez des jeux basés sur Unreal Engine, vous bénéficiez de la prise en charge spécifique d'Unreal Engine dans ReSharperC++.

Convention de nommage UE

Convention de nommage UE

ReSharper C++ suit la convention de nommage d'Unreal Engine dans toutes ses actions, notamment dans les refactorisations Introduce Variable et Rename, la génération de code pour getters et setters, et bien plus. Il surveille également les noms que vous utilisez dans votre base de code. Il exécute des inspections des incohérences avec la convention de nommage UE/0> et les met en évidence.

Pour en savoir plus

Analyse UE

Analyse de code UE

Quelques vérifications d'analyse du code sont également disponibles pour le code basé sur UE et ciblent notamment les macros de réflexion UE manquantes ou mal définies :

  • La déclaration UCLASS doit hériter publiquement d'UObject ou de la classe qui en est dérivée.
  • La classe marquée par UCLASS doit hériter d'une seule classe dérivée directement d'UObject ou d'UObject.
  • UCLASS doit être une classe/USTRUCT doit être une structure.
  • UInterface doit être vide.
  • Appel de macro UCLASS / UINTERFACE / USTRUCT manquant dans la déclaration de classe / interface / struct d'UE.
  • Les classes UE ne peuvent pas être déclarées à l'intérieur d'une autre classe.
  • L'appel de macro UPROPERTY/UFUNCTION avant la déclaration n'a pas d'effet.
  • Les objets stockés dans un membre autre que uproperty peuvent être supprimés définitivement à tout moment.
UnrealHeaderTool

UnrealHeaderTool

ReSharper C++ offre une intégration fluide avec UnrealHeaderTool pour vous aider à détecter davantage de problèmes concernant les métadonnées de classe Unreal Engine directement dans l'éditeur. Lorsque vous travaillez avec un projet Unreal Engine, ReSharper C++ exécute automatiquement UnrealHeaderTool sur le fichier que vous modifiez et affiche toutes les erreurs ou avertissements, comme pour les autres inspections. Regarder l'intégration d'UnrealHeaderTool à l'œuvre.

Saisie des spécificateurs de réflexion Unreal Engine

Saisie automatique du code pour les spécificateurs de réflexion

Pour vous aider à travailler facilement avec les macros de réflexion Unreal Engine, ReSharper C++ offre la possibilité de saisir automatiquement les spécificateurs de réflexion dans les macros de réflexion.

Documentation des spécificateurs de réflexion UE

Documentation du code pour les spécificateurs de réflexion

La documentation intégrée pour les spécificateurs de réflexion UE s'affiche dans la fenêtre contextuelle Quick Documentation (Ctrl+Q) lorsque le caret est placé sur un spécificateur.

Navigation RPC

Prise en charge des appels de procédures distantes UE

ReSharper C++ identifie les RPC par mots-clés Client, Server ou NetMulticast dans la déclaration UFUNCTION. Pour de telles fonctions, ReSharper C++ sait qu'une fonction _Implementation doit être générée, ainsi qu'une fonction _Validate si WithValidation est défini. Il peut générer les deux si les deux sont manquants, ou un seul s'il n'en manque qu'un.

Lorsque vous naviguez vers une définition, les deux fonctions (_Validate et _Implementation) sont proposées. Alternativement, ces options sont également disponibles dans le menu Alt+Entrée, sous "Related UE functions".

Pour en savoir plus

Contrôles d'en-têtes générés UE

Auto-importation et en-têtes générés

Lorsque vous utilisez un symbole qui n'est pas disponible dans la portée actuelle, ReSharper C++ le surligne en rouge et suggère d'ajouter le #include manquant quand cela est possible. Lorsque le #include est manquant dans un fichier d'en-tête, il sera inséré avant le .generated.h, qui devrait être le dernier dans la liste des includes. Le #include incorrectement placé est mis en évidence par l'inspection correspondante.

La refactorisation Rename dans les projets Unreal Engine met à jour la directive include .generated.h correspondante et les fichiers associés avec les préfixes A, F, E, T, S, et U.

Génération de code UE

Génération de code

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 disponibles pour vous aider à générer rapidement USTRUCT/UCLASS/UENUM/UENUMCLASS.

Fichiers USF

Fichiers USF

Les fichiers USF d'Unreal Engine sont basés sur HLSL et contiennent le code shader multiplateforme. Ces fichiers incluent généralement des chemins d'accès à des fichiers virtuels et ReSharper C++ peut travailler avec eux et prendre en charge toutes les actions habituelles.

HLSL

GDK SpatialOS

Le kit de développement de jeux SpatialOS est une fork d'Unreal Engine 4 qui vous aide à exécuter et à gérer des jeux en ligne dans le cloud. ReSharper C++ reconnaît CrossServer, SpatialType, NonSpatialType et d'autres spécificateurs de SpatialOS. En savoir plus.

HLSL

HLSL

ReSharper C++ propose 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.

HLSL

Toute la puissance de l'analyse de flux de contrôle de ReSharper est désormais disponible dans les fichiers de shader HLSL, avec notamment les avertissements concernant le code inaccessible, les variables non initialisées, la redondance des sauts de flux de contrôle et des branches conditionnelles, et bien plus encore.

Télécharger

Essai gratuit de 30 jours disponible