Modifier et refactoriser du code C++ dans Visual Studio

Visual Studio met à votre disposition plusieurs outils pour vous aider à écrire, modifier et refactoriser votre code.

IntelliSense

IntelliSense est un outil de complétion de code puissant qui suggère des symboles et des extraits de code au fil de votre frappe. C++ IntelliSense dans Visual Studio s’exécute en temps réel, analysant votre base de code à mesure que vous la mettez à jour et fournissant des recommandations. Plus vous tapez de caractères, plus la liste des résultats recommandés raccourcit.

Capture d’écran de la liste déroulante de membres C++ montrant les méthodes disponibles pour une chaîne, telles add, assign, etc.

Certains symboles sont omis automatiquement afin de limiter les résultats dans la mesure du possible. Par exemple, quand vous accédez aux membres d’un objet de classe depuis l’extérieur de la classe, vous ne pouvez pas voir les membres privés par défaut ou les membres protégés (si vous ne vous trouvez pas dans le contexte d’une classe enfant). Vous pouvez ajuster le filtrage en utilisant les boutons en bas.

Une fois que vous avez choisi le symbole dans la liste déroulante, vous pouvez le compléter automatiquement au moyen des touches Tabulation, Entrée ou d’un des autres caractères de validation (par défaut : { } [ ] ( ) . , : ; + - * / % & | ^ ! = ? @ # \). Pour ajouter ou supprimer des caractères dans cette liste, recherchez « IntelliSense » dans Lancement rapide (Ctrl+Q) et choisissez l’option Éditeur de texte > C/C++ > Avancé. L’option Caractères de validation des listes de membres vous permet de personnaliser la liste avec les modifications de votre choix.

L’option Mode filtre des listes de membres contrôle les types de suggestions de saisie semi-automatique IntelliSense que vous voyez. Par défaut, elle est définie sur Approximatif. Dans une recherche approximative, si vous avez un symbole appelé MaClasseFantastique, vous pouvez taper « MCF » et trouver la classe dans les suggestions de saisie semi-automatique. L’algorithme de recherche approximative définit un seuil minimal que les symboles doivent respecter pour apparaître dans la liste. Le filtrage Intelligent affiche tous les symboles contenant des sous-chaînes qui correspondent à ce que vous avez tapé. Le filtrage Préfixe recherche les chaînes qui commencent par ce que vous avez tapé.

Pour plus d’informations sur C++ IntelliSense, consultez Visual C++ IntelliSense et Configurer un projet C++ pour IntelliSense.

IntelliCode

IntelliCode est la version d’IntelliSense assistée par intelligence artificielle. Il place le candidat le plus probable en haut de votre liste de saisie semi-automatique. Les recommandations IntelliCode sont basées sur des milliers de projets open source sur GitHub ayant chacun reçu plus de 100 étoiles. Quand il est combiné avec le contexte de votre code, la liste de saisie semi-automatique est adaptée pour promouvoir les pratiques courantes.

Quand vous écrivez du code C++, IntelliCode vous aide à utiliser des bibliothèques courantes comme la bibliothèque standard C++. Le contexte de votre code est utilisé pour fournir en priorité les recommandations les plus utiles. Dans l’exemple suivant, la fonction membre size étant fréquemment utilisée avec la fonction sort, elle est présentée au début de la liste des résultats.

Capture d’écran de la liste déroulante C++ IntelliCode qui montre les membres de la classe vectorielle les plus couramment utilisés dans votre code.

Dans Visual Studio 2022 et Visual Studio 2019, IntelliCode est disponible en tant que composant facultatif dans la charge de travail Développement Desktop en C++. Pour qu’IntelliCode soit actif pour C++, accédez à Outils>Options>IntelliCode>Général et définissez Modèle de base C++ sur Activé.

Dans Visual Studio 2017, IntelliCode est disponible en tant qu’extension dans la Visual Studio Marketplace.

Fonctionnalité IntelliSense prédictive (expérimentale)

La fonctionnalité IntelliSense prédictive est une fonctionnalité expérimentale qui utilise une reconnaissance contextuelle pour limiter le nombre des résultats affichés dans la liste déroulante IntelliSense. L’algorithme applique une mise en correspondance de type afin d’afficher uniquement les résultats qui correspondent au type attendu. Dans le cas le plus simple, si vous tapez int x = et appelez la liste déroulante IntelliSense, vous voyez uniquement des entiers ou des fonctions retournant des entiers. Cette fonctionnalité est désactivée par défaut, car elle est toujours en cours de développement. Elle fonctionne le mieux avec les symboles globaux ; les fonctions membres ne sont pas encore prises en charge. Vous pouvez l’activer en tapant « Prédictive » dans Lancement rapide ou en accédant à Outils>Options>Éditeur de texte>C/C++>Expérimental>Activer la fonctionnalité IntelliSense prédictive.

Pour remplacer IntelliSense prédictive et afficher la liste la plus longue, appuyez sur Ctrl+J. Si IntelliSense prédictive est activée, l’appel de Ctrl+J supprime le filtre prédictif. Le fait de réappuyer sur Ctrl+J supprime le filtre d’accessibilité des résultats de la liste de membres le cas échéant. Le bouton ([+]) sous la liste déroulante IntelliSense fait la même chose que Ctrl+J. Pointez sur le bouton pour afficher les informations d’info-bulle sur ce qui est affiché.

Capture d’écran de d’IntelliSense prédictive C++.

La capture d’écran précédente montre plusieurs boutons sous la liste déroulante. Ils activent les filtres IntelliSense pour différents types de résultats :

  • Variables et constantes
  • Fonctions
  • Types
  • Macros
  • Énumérations
  • Espaces de noms

Un bouton ne s’affiche que s’il est pertinent pour votre session IntelliSense actuelle. En règle générale, vous ne voyez pas tous les boutons en même temps.

Modèle IntelliSense

La barre de modèles est un élément d’interface utilisateur qui apparaît lorsque votre curseur se trouve sur une définition de modèle. Elle est utile, car vous pouvez fournir des exemples d’arguments d’exemple de modèle pour IntelliSense, qui s’affichent lorsque vous modifiez le corps du modèle. Par exemple, vous pouvez spécifier qu’un argument de modèle est de type std::vector<int>. Ensuite, lorsque vous utilisez cet argument dans le corps du modèle, vous voyez les membres de std::vector<int>dans intellisense.

Capture d’écran de la barre de modèles avec l’option Ajouter toutes les instanciations existantes mise en évidence.

Cliquez sur l’icône <T> pour développer/réduire la Barre de modèles. Cliquez sur l’icône de crayon ou double-cliquez sur la barre de modèles pour ouvrir la fenêtre Modifier où vous spécifiez des types d’arguments pour les paramètres.

Capture d’écran de l’expérience d’édition dans la barre de modèles où vous entrez un type pour chaque paramètre de modèle.

La Barre de modèles peut remplir automatiquement les types de paramètres en fonction des instanciations du modèle dans votre code. Cliquez sur Ajouter toutes les instanciations existantes pour afficher la liste de tous les arguments concrets ayant servi à instancier le modèle dans l’ensemble de votre base de code.

Capture d’écran des Résultats de la fonctionnalité IntelliSense du modèle répertoriant les différents types utilisés pour instancier le paramètre de modèle C, tels que C = AmbientLight, C = Candle, etc.

Une fenêtre en bas de l’éditeur indique où chaque instanciation a été trouvée et quels étaient ses arguments. Vous pouvez sélectionner une instanciation pour accéder à l’emplacement dans votre code où cette instanciation a été trouvée.

Capture d’écran de la liste d’instanciations du modèle dans votre code. L’instanciation, le fichier, l’emplacement et les arguments sont répertoriés.

Les informations de la Barre de modèles sont spécifiques à l’utilisateur. Elles sont stockées dans le dossier .vs et ne sont pas validées dans le contrôle de code source.

Tildes d’erreur et correctifs rapides

Si l’éditeur détecte des problèmes dans votre code, il ajoute des tildes colorés sous ceux-ci. Les tildes rouges indiquent du code impossible à compiler. Les tildes verts indiquent d’autres types de problèmes qui peuvent s’avérer sérieux. Vous pouvez ouvrir la fenêtre Liste d’erreurs pour obtenir plus d’informations sur les problèmes.

Pour certains types d’erreurs et des modèles de codage courants, l’éditeur propose un Correctif rapide sous la forme d’une ampoule qui apparaît quand vous placez le curseur sur le soulignement ondulé. Cliquez sur la flèche vers le bas pour afficher les suggestions.

Dans l’exemple suivant, un vector a été déclaré, mais aucune définition n’a été trouvée. L’éditeur suggère donc d’inclure le fichier d’en-tête nécessaire :

Capture d’écran d’une erreur et du correctif rapide proposé pour # include vector.

L’éditeur propose également des correctifs rapides pour certaines opportunités de refactorisation. Par exemple, si vous déclarez une classe dans un fichier d’en-tête, Visual Studio suggère de créer une définition pour celle-ci dans un fichier .cpp distinct.

Capture d’écran montrant le correctif rapide avec l’option Create definition of Channel Route Iterator in channels dot C++ mise en évidence.

Suivi des modifications

Chaque fois que vous apportez une modification à un fichier, une barre jaune s’affiche sur la gauche pour indiquer que des modifications non enregistrées ont été effectuées. Quand vous enregistrez le fichier, la barre devient verte. Les barres verte et jaune sont conservées tant que le document est ouvert dans l’éditeur. Elles représentent les modifications qui ont été apportées depuis la dernière ouverture du document.

Capture d’écran du suivi des modifications C++. Une barre jaune en bas à gauche s’affiche pour indiquer les modifications.

Déplacer du code

Pour déplacer des lignes de code vers le haut et vers le bas, sélectionnez-les, maintenez la touche Alt enfoncée, puis appuyez sur les touches de direction Haut/Bas.

Insérer des extraits de code

Un extrait de code est un bloc de code source prédéfini. Cliquez avec le bouton droit sur un point précis ou sur le texte sélectionné et sélectionnez Extrait pour soit insérer un extrait de code, soit entourer le texte sélectionné de l’extrait de code. L'illustration ci-dessous montre les trois étapes à suivre pour entourer une instruction sélectionnée d'une boucle for. Les éléments en jaune dans l'image finale sont des champs modifiables auxquels vous accédez avec la touche Tab. Pour plus d’informations, consultez Extraits de code.

Capture d’écran du contrôle de liste déroulante Insérer un extrait.

Une fonction est sélectionnée. Dans la liste déroulante qui s’affiche après un clic droit sur le nom de la fonction, Surround With... (Entourer de...) est mis en évidence en jaune. Dans la liste déroulante Entourer de, l’extrait de code d’une boucle « for » est sélectionné. Cela entraîne la mise en place d’une boucle for autour de la fonction. La variable de boucle et la limite sont affichées en jaune pour indiquer qu’il s’agit de champ modifiables.

Ajouter une classe

Ajoutez une nouvelle classe à partir du menu Projet ou du menu contextuel dans l’Explorateur de solutions :

Capture d’écran de la boîte de dialogue Ajouter une nouvelle classe. Elle contient des champs pour le nom de la classe, l’accessibilité, les fichiers pour placer la déclaration et l’implémentation, etc.

Vous pouvez aussi utiliser l’Assistant Classe pour modifier ou examiner une classe existante.

Capture d’écran de l’Assistant Classe avec des options pour ajouter des méthodes, des variables membres et bien plus encore.

Pour plus d’informations, consultez Ajout de fonctionnalités avec des Assistants Code (C++).

Refactorisation

Les refactorisations sont disponibles sous le menu contextuel Action rapide ou en cliquant sur une ampoule dans l’éditeur. Vous pouvez en trouver certaines dans le menu Modifier > Refactoriser. Ces fonctionnalités sont les suivantes :

Application d’un style de code avec ClangFormat et EditorConfig

Les versions 2017 et ultérieures de Visual Studio prennent en charge ClangFormat, utilitaire de mise en forme de code courant pour C++ basé sur Clang/LLVM. Tapez « ClangFormat » dans Lancement rapide pour le configurer afin qu’il utilise un de ces formats courants :

  • LLVM
  • Google
  • Chromium
  • Mozilla
  • WebKit
  • Visual Studio

Vous pouvez également fournir votre propre fichier .clang-format ou _clang-format pour appliquer des règles personnalisées à tous les fichiers de code de même niveau ou de niveau inférieur.

Les fichiers pouvant facilement être partagés par le bais du contrôle de code source, vous pouvez imposer des conventions de codage à l’ensemble de votre équipe de développement.

Capture d’écran montrant un fichier .clang-format qui a de nombreuses options, telles que la limite de colonne, la largeur de retrait, la largeur de tabulation, etc.

Les versions 2017 et ultérieures de Visual Studio prennent également en charge EditorConfig, qui fonctionne de manière similaire. ClangFormat, toutefois, a plus d’options de style qu’EditorConfig, notamment des règles propres à C++. Avec EditorConfig, vous créez des fichiers .editorconfig et les placez dans différents dossiers de votre base de code afin de spécifier des styles de code pour ces dossiers et sous-dossiers. Un fichier .editorconfig est prioritaire sur tout fichier .editorconfig dans les dossiers parents et remplace les paramètres de mise en forme configurés via Outils>Options. Vous pouvez définir des règles pour les tabulations, les espaces et la taille du retrait, entre autres. Pour plus d’informations, consultez Créer des paramètres d’éditeur personnalisés et portables avec EditorConfig.

Autres options de mise en forme

La zone de recherche Lancement rapide est le moyen le plus rapide de trouver un paramètre ou un outil. Il figure dans le menu principal. Dès que vous commencez à taper, la liste de saisie semi-automatique filtre les résultats.

Capture d’écran de la zone de recherche Lancement rapide. Elle montre la recherche C++ avancée qui aboutit à des options pour l’éditeur de texte.

Pour définir les options de mise en forme comme les retraits, la complétion des accolades et la colorisation, tapez « Mise en forme de C++ » dans la fenêtre Lancement rapide.

Capture d’écran montrant les options de mise en forme C++, telles que la mise en retrait automatique ou non lorsque vous tapez un onglet.

D’autres options de mise en forme sont disponibles sous Edition>Avancé dans le menu principal.

Capture d’écran montrant des options de modification avancées, telles que l’affichage d’espaces blancs, l’habillage de mots, les commentaires d’une sélection, l’augmentation du retrait de ligne, etc.

Les options pour l’activation et la configuration des fonctionnalités d’édition propres à C++ se trouvent sous Outils>Options>Éditeur de texte>C/C++. Après avoir choisi l’option que vous voulez définir, vous pouvez obtenir de l’aide supplémentaire en appuyant sur la touche F1 quand la boîte de dialogue a le focus. Pour les options générales de mise en forme du code, tapez Editor C++ dans Lancement rapide.

Capture d’écran montrant l’élément de menu Visual Studio Tools (Outils) sélectionné, et l’élément de menu Options mis en évidence.

Des fonctionnalités expérimentales, qui peuvent ou non être incluses dans une version future de Visual Studio, se trouvent dans la boîte de dialogue Éditeur de texte C++ expérimental. Dans Visual Studio versions 2017 et ultérieures, vous pouvez activer IntelliSense prédictif dans cette boîte de dialogue.

Voir aussi

Lire et comprendre le code C++
Naviguer dans votre base de code C++ dans Visual Studio
Collaborer avec Live Share pour C++