Référence de l'Audit de code
Remonter à Editeur de code - Index (tutoriel de l'EDI)
Sommaire
- 1 Audit de code utilisant le protocole LSP (Language Server Protocol) Delphi
- 2 Achèvement du code — Ctrl+Espace
- 3 Achèvement de paramètre — Ctrl+Maj+Espace
- 4 Conseils de code
- 5 Evaluation d'expressions de conseil
- 6 Audit de conseil
- 7 Chercher la déclaration — Ctrl+Clic
- 8 Achèvement de bloc — Touche Entrée
- 9 Achèvement de classe — Ctrl+Maj+C
- 10 Audit d'erreur
- 11 Index pour Audit de code C++
- 12 Options avancées
- 13 Suivant
L'audit de code désigne un ensemble de fonctionnalités intégrées dans l'éditeur de code (par exemple, Achèvement de code, Achèvement des paramètres, Conseils de code, Expression de conseil, Audit de conseil, Aller à la définition, Achèvement de bloc, Achèvement de classe et Audit d'erreur) et accélérant l'écriture de code. Ces fonctionnalités facilitent l'identification d'instructions communes à insérer dans votre code et vous aident à sélectionner des propriétés et des méthodes. Certaines de ces fonctionnalités sont décrites plus en détail dans les sous-sections suivantes.
Pour activer et configurer les fonctionnalités de l'audit de code, choisissez Outils > Options > Interface utilisateur > Editeur > Langage et cliquez sur Options d'audit de code.
Les fonctionnalités de l'audit de code sont maintenant définies par langage.
Delphi utilise le protocole LSP (Language Server Protocol) pour l'audit de code.
Pour C++, l'EDI utilise automatiquement les fournisseurs Audit de code classique ou LSP (Language Server Protocol) en fonction du compilateur utilisé (Clang ou classique).Audit de code utilisant le protocole LSP (Language Server Protocol) Delphi
Le protocole LSP (Language Server Protocol) est une spécification qui fournit des services linguistiques via un processus de serveur qui communique avec un EDI. En conséquence, les fonctionnalités d'audit de code sont fournies par un ou plusieurs processus séparés, et les fonctionnalités sont fournies de façon asynchrone.
Un petit volet en bas de la vue Projet affiche l'activité du serveur LSP. Il facilite la communication lors de l'analyse.
Langages
Les langages sont définis dans le volet des paramètres Outils > Options > Langage, qui affiche une liste de toutes les langues disponibles. Vous pouvez aussi créer un nouveau langage.
Options de l'éditeur et Mise en évidence syntaxique
Les fonctionnalités Options de l'éditeur et Mise en évidence syntaxique sont définies par langage. Pour y accéder, ouvrez Outils > Options > Interface utilisateur > Editeur > Langage et cliquez sur Options.
Sur ce volet de réglage, choisissez un langage. Puis, sélectionnez les options de l'éditeur et le Surligneur de syntaxe à utiliser pour ce langage.
Modification du Gestionnaire d'audit de code/LSP
Le LSP Delphi est activé par défaut. Vous pouvez vérifier si l'EDI utilise le LSP Delphi comme suit :
- Lorsque vous ouvrez votre projet Delphi ou que vous effectuez des modifications importantes, une petite barre de progression apparaît en bas de la vue Projets affichant l'activité DelphiLSP.
- Vous pouvez aussi ouvrir le Gestionnaire de tâches et rechercher un processus DelphiLSP.exe. Généralement, plusieurs processus s'affichent.
Audit de code est le dernier onglet d'un langage. Il contient la fonte utilisateur de l'éditeur et un ensemble de réglages d'audit de code.
Le Gestionnaire d'audit de code fournit une fonctionnalité d'audit de code pour chaque langage. Vous pouvez le définir sur n'importe quel gestionnaire répertorié ici, même si ce dernier n'est pas initialement destiné à ce langage.
Dans Delphi, pour basculer entre l'implémentation d'audit de code LSP et classique, choisissez :
- Delphi (Language Server Protocol) : la nouvelle prise en charge LSP.
- Delphi (Audit de code classique) : l'ancienne implémentation d'audit de code utilisée dans les versions 10.3.3 et antérieures. Lorsque vous sélectionnez cette option, vous désactivez le protocole LSP.
Vous pouvez aussi créer un nouveau Gestionnaire LSP. Cliquez sur Nouveau. Le dialogue vous permet de spécifier l'exécutable du serveur LSP ainsi que certaines options, parmi lesquelles un nom convivial, l'identificateur du langage, le délai d'attente après lequel le serveur sera redémarré, et toutes les options d'initialisation spécifiques au serveur à injecter dans l'appel d'initialisation JSON RPC.
Vous pouvez utiliser cette option pour ajouter un serveur Python ou tout autre langage.
Création de fichiers .delphilsp.json
La configuration spécifique à un projet pour l'utilisation du protocole LSP est automatiquement enregistrée dans un fichier .delphilsp.json portant le même nom que le projet. Ce fichier de configuration est lu lorsque le LSP est utilisé avec un éditeur externe tel que Visual Studio Code. Pour activer la génération de ce fichier :
- Créez un projet Delphi.
- Ouvrez Outils > Options > Interface utilisateur > Editeur > Langage > Audit de code et activez Générer la config. LSP.
- Enregistrez et fermez votre projet dans l'EDI.
- Lors de la ré-ouverture du projet, un nouveau projet portant le même nom et une extension différente (.delphilsp.json) apparaît.
Achèvement du code — Ctrl+Espace
La fonctionnalité Achèvement de code affiche une liste déroulante de tous les éléments et méthodes qui contiennent la chaîne typée n'importe où dans un identificateur. Elle indique les types d'ensembles. Lors de la déclaration d'une propriété, l'achèvement de code suggère des getters et setters.
Vous pouvez effectuer un achèvement de code sur des fichiers d'en-tête qui ne font pas vraiment partie du projet et sur le source principal du projet.
Pour invoquer l'achèvement du code, appuyez sur Ctrl+Espace
dans l'éditeur de code. Sélectionnez le caractère et appuyez sur Entrée
pour insérer le texte dans le code à l'emplacement du curseur.
L'achèvement de code est également automatiquement invoqué dans certains emplacements de code, par exemple lorsque vous tapez un point « . » dans Delphi
ou une instruction de point « . », de flèche « -> », de portée « :: » ou d'en-tête « #include < » dans C++
.
Invoquez l'achèvement de code dans le cadre de votre langage spécifique de la façon suivante :
C++
-
- Appuyez sur
Ctrl+Espace
(cette combinaison de touches invoque toujours l'achèvement de code). - Entrez
.
ou->
(fonctionne seulement quand l'option Invoquer automatiquement est activée sur la page Options d'audit de code). - Pour annuler une requête d'achèvement de code, appuyez sur la touche
Echap
.
- Appuyez sur
Delphi
-
- Appuyez sur
Ctrl+Espace
(cette combinaison de touches invoque toujours l'achèvement de code). - Entrez
.
(cela fonctionne seulement quand l'option Invoquer automatiquement est activée sur la page Options d'audit de code). - Pour annuler une requête d'achèvement de code, appuyez sur la touche
Echap
.
- Appuyez sur
Lorsque vous tapez des caractères, le comportement de sélection/correspondance prend en compte les situations suivantes :
- En cas de correspondance exacte entre les caractères tapés et un identificateur, celui-ci est sélectionné.
- Sinon, le premier identificateur commençant par ces caractères est sélectionné.
- Sinon, le premier identificateur contenant ces caractères est sélectionné.
Par exemple, tapez MyControl dans l'éditeur et invoquez l'achèvement de code. Ensuite, tapez rect. Vous verrez que toutes les propriétés ou méthodes commençant par Rect s'affichent, ainsi que ClientRect, BoundsRect, etc., c'est-à-dire toute chaîne d'identificateur contenant rect.
L'achèvement de code fonctionne correctement et produit des résultats corrects dans les situations suivantes :
- Le fichier est nouveau et n'existe pas encore sur le disque.
- Le projet est nouveau et aucun projet ni aucune unité n'existe sur le disque.
- L'unité est modifiée, pas encore enregistrée, et le code interne à l'EDI comporte des modifications qui affectent les résultats d'achèvement.
- Les résultats sont corrects (et modifiés correctement) lors de la modification des plates-formes cibles et d'autres options du projet.
- Lorsqu'une unité inclut un fichier .inc.
Achèvement de code dans la clause uses :
- Affiche les fichiers PAS et les chemins DCU dans le projet et les chemins de recherche.
- Liste les unités à partir du chemin de recherche et leurs versions raccourcies sans les espaces de nommage configurés.
- Indique lorsque l'unité sélectionnée est déjà utilisée dans l'unité en cours.
- Les opérations de mise en correspondance et de filtrage ne sont pas sensibles à la casse.
- L'achèvement de code fonctionne lorsque l'option Utiliser MSBuild de façon externe pour compiler est activée.
- Menu déroulant de l'achèvement de code :
- Sélectionne le symbole correspondant le plus court.
- Sélectionne l'élément supérieur lorsqu'il s'affiche pour la première fois.
}}
Réglages de l'achèvement de code
Lorsque vous utilisez l'achèvement de code, vous pouvez configurer certains filtres dans l'onglet Options d'audit. Ouvrez Outils > Options > Interface utilisateur > Editeur > Langage et cliquez sur Options d'audit.
Utilisez ces filtres en fonction de vos besoins :
- Lister tous les symboles commençant par le filtre en premier : les symboles qui commencent par ce que vous avez tapé (le filtre) sont triés et placés devant les autres. Si vous ne cochez pas cette case, les symboles sont triés par ordre alphabétique. Lorsque vous la cochez, les symboles commençant par le texte du filtre sont placés en haut de la liste.
- Sélectionner le symbole correspondant le plus court : lorsque la liste d'achèvement de code s'affiche, une entrée est toujours sélectionnée automatiquement, ou s'ouvre avec le symbole le plus proche de la portée dans laquelle le codage est sélectionné. Ce réglage est coché par défaut (défini pour sélectionner le symbole le plus court). Mais si vous le désactivez, vous obtenez un comportement plus proche de l'achèvement de code classique.
- Le texte du filtre est souligné : lorsque cette option est cochée, le menu déroulant de l'achèvement de code souligne le texte qui correspond à votre saisie.
- Afficher les symboles contenant le filtre : contrôle les symboles qui sont inclus dans la liste. Par défaut (option cochée), tous les symboles contenant le texte saisi sont listés. Si le réglage est désactivé, la liste d'achèvement de code affiche uniquement les symboles qui commencent par votre saisie.
Pour obtenir un comportement plus proche de l'achèvement de code classique :
- Lister tous les symboles commençant par le filtre en premier : option cochée
- Sélectionner le symbole correspondant le plus court : option désactivée
- Souligner le texte du filtre : option désactivée
- Afficher les symboles contenant le filtre : option désactivée
Achèvement de paramètre — Ctrl+Maj+Espace
L'achèvement de paramètre est invoqué automatiquement après l'ouverture d'un crochet gauche d'appel de fonction ou en appuyant sur Ctrl+Maj+Espace
lors de l'utilisation de l'éditeur de code. Une fenêtre popup affiche un conseil contenant des noms d'argument et des types pour les appels de méthodes. Vous pouvez taper des caractères correspondant à ceux de la sélection et appuyer sur Retour
pour insérer le texte dans
le code à l'emplacement du curseur. Si les paramètres comportent XMLDoc, ils seront affichés pendant l'achèvement de code.
Le conseil ou l'aide du paramètre peut apparaître lors de l'instanciation de types génériques.
Exemples :
C++
Delphi
Conseils de code
Cette fonctionnalité affiche un conseil contenant des informations sur le symbole, telles que le type, le fichier et le numéro de ligne où il est déclaré. Vous pouvez afficher des conseils de code en déplaçant la souris au-dessus d'un identificateur dans votre code, lorsque vous travaillez dans l'éditeur de code.
Les conseils de code fonctionnent seulement pour Delphi
quand la fonctionnalité Audit d'aide est désactivée.
Exemple :
Evaluation d'expressions de conseil
Cette fonctionnalité affiche la valeur en cours d'une variable quand vous placez le curseur dessus. Elle est disponible quand l'exécution du programme est suspendue au cours d'une session de débogage.
Exemples :
C++
Delphi
Audit de conseil
Cette fonctionnalité affiche des informations dans une fenêtre popup lorsque la souris passe au-dessus d'un symbole.
Audit de symbole dans conseil
Cette fonctionnalité affiche les informations de déclaration dans une fenêtre de conseil pour tout identificateur, quand vous faites passer le curseur au-dessus d'un symbole dans l'éditeur de code.
Exemples :
C++
Delphi
Conseil d'audit d'aide — Ctrl+Maj+H
Cette fonctionnalité affiche un conseil contenant des informations sur le symbole, telles que le type, le fichier, le numéro de ligne où il est déclaré, ainsi que la documentation XML associée au symbole (s'il y a lieu). C'est aussi valable pour les classes génériques. Les informations d'exception et le numéro de ligne sont affichés pour les tableaux et les ensembles.
Obtenez un conseil d'audit d'aide en déplaçant la souris au-dessus d'un identificateur dans votre code, lorsque vous travaillez dans l'éditeur de code. Vous pouvez aussi l'obtenir en appuyant sur les touches Ctrl+Maj+H
.
Exemples :
C++
Delphi
Chercher la déclaration — Ctrl+Clic
Cette fonctionnalité accède à l'emplacement dans lequel un type ou une variable est défini(e).
Lorsque vous utilisez l'éditeur de code, servez-vous du raccourci Ctrl+Clic
pour aller automatiquement sur le code qui définit un identificateur ou une méthode héritée.
Pour naviguer dans le code, maintenez enfoncée la touche Ctrl
tout en passant la souris au-dessus du nom d'une classe, variable, propriété, méthode ou d'un autre identificateur.
Le pointeur de la souris prend la forme d'une main et l'identificateur apparaît en surbrillance et souligné. Lorsque vous cliquez sur l'identificateur en surbrillance, l'éditeur de code passe à la déclaration de l'identificateur, en ouvrant le fichier source si nécessaire. Vous pouvez faire la même chose en cliquant avec le bouton droit sur un identificateur et en choisissant Chercher la déclaration. L'appui sur Alt+Gauche
vous renvoie à votre point initial de navigation.
Vous pouvez également utiliser Ctrl+Maj+flèche Haut/Bas
pour vous déplacer entre la déclaration et l'implémentation d'une méthode.
L'appui sur Ctrl+Maj-+Flèche bas
depuis une macro/ifdef inactive provoque le passage à l'implémentation de la prochaine méthode déclarée.
La fonctionnalité Rechercher la déclaration - Ctrl+Clic
fonctionne avec :
- Les symboles, comme les variables, les méthodes, les propriétés ou d'autres identificateurs.
- Les types, comme la classe, l'énumération, l'enregistrement ou d'autres types.
- Les entrées uses.
- Les macros (defines) afin que le basculement entre l'implémentation et la déclaration d'une méthode fonctionne mieux lorsqu'il y a des IFDEF. Les macros (defines) sont aussi trouvées lorsqu'elles sont déclarées dans un fichier include, affectant ce qui apparaît précédemment.
Chercher la déclaration permet aussi de rechercher et d'ouvrir uniquement des unités dans le projet Chemin de recherche ou Chemin source, ou dans le produit Chemin de navigation ou Chemin de bibliothèque. La recherche s'effectue au sein des répertoires dans l'ordre suivant :
- Le chemin de recherche (Delphi) du projet ou le chemin d'inclusion (C++)
- Le chemin source du projet, défini comme le répertoire dans lequel le projet a été enregistré
- Le chemin de navigation global
- Le chemin de bibliothèque global
- Le chemin de bibliothèque, qui est recherché seulement si aucun projet n'est ouvert dans l'EDI
Ces chemins peuvent être modifiés en éditant les valeurs correspondantes :
- Soit le chemin de recherche spécifique au projet pour Delphi (Projet > Options > Compilateur Delphi) ou le chemin d'inclusion pour C++ (Projet > Options > C++ (options partagées)).
- Le chemin de navigation et le chemin de bibliothèque :
- Pour Delphi : Outils > Options > Options d'environnement > Options Delphi > Bibliothèque
- Pour C++ : Outils > Options > Options d'environnement > Options C++ > Chemins et répertoires
- Le chemin de bibliothèque global est défini sur la boîte de dialogue Ajouter un package d'exécution.
Exemples :
C++
Delphi
Achèvement de bloc — Touche Entrée
L'achèvement de bloc se produit lorsque du code est manquant dans les situations suivantes :
- Dans C++, le bloc considéré pour l'achèvement est le code entre accolades {}.
- Dans Delphi, le bloc considéré pour l'achèvement est le code entre begin et end.
Si, alors que vous vous trouvez dans l'éditeur de code, vous appuyez sur Entrée
sans fermer correctement un code, un token de fermeture est ajouté sur la première ligne vide disponible après l'emplacement du curseur.
Le menu déroulant définit le comportement de l'achèvement quand vous englobez des instructions existantes avec des symboles, comme suit :
- Sans nouvelle ligne - Positionne le curseur après le code que vous venez de taper.
- Avec nouvelle ligne - Positionne le curseur à l'intérieur du code que vous venez de taper.
- Nouveaux blocs uniquement - Invoque l'achèvement seulement si vous commencez un nouveau bloc.
Achèvement de classe — Ctrl+Maj+C
L'achèvement de classe simplifie le processus de définition et d'implémentation des nouvelles classes en générant le code squelette pour les membres de classe que vous déclarez.
Positionnez le curseur à l'intérieur d'une déclaration de classe dans la section interface d'une unité et appuyez sur Ctrl+Maj+C
.
Toutes les déclarations de propriétés inachevées sont complétées.
Pour toutes les méthodes nécessitant une implémentation, des méthodes vides sont ajoutées à la section implementation.
L'achèvement de classe peut aussi être accompli en choisissant l'option Compléter la classe au niveau du curseur du menu contextuel de l'éditeur de code.
Audit d'erreur
La fonctionnalité Audit d'erreur souligne le code non valide nécessitant votre attention, par exemple un code non valide provoquant des erreurs (soulignement rouge), des avertissements (soulignement orange) et/ou des conseils (soulignement bleu). Vous pouvez choisir le niveau de gravité des problèmes affichés dans l'éditeur, pour n'afficher que les erreurs et pas les avertissements ou les conseils, par exemple.
En plaçant le curseur sur le texte non valide, vous affichez une fenêtre de conseil contenant la cause probable de l'erreur.
Exemples :
C++
Delphi
De plus, la liste des erreurs générées par l'expression apparaît dans le volet Erreurs de la vue Structure.
Dans la barre d'état de l'éditeur, vous pouvez accéder à une synthèse de l'audit d'erreur affichant le nombre d'erreurs, d'avertissements et/ou de conseils contenus dans le fichier en cours.
Ouvrez Outils > Options > Interface utilisateur > Editeur > Langage et cliquez sur Audit d'erreur pour configurer ses propriétés.
- Afficher les niveaux de l'audit d'erreur : détermine le niveau d'audit d'erreur à afficher dans l'éditeur de code. Vous disposez des options suivantes :
- Aucun : choisissez cette option pour n'afficher aucun niveau d'audit d'erreur dans l'éditeur de code.
- Erreurs uniquement : affiche uniquement les erreurs dans l'éditeur de code. Les erreurs s'affichent avec un soulignement rouge.
- Avertissements : affiche les avertissements dans l'éditeur de code. Les avertissements s'affichent avec un soulignement orange.
- Conseils : affiche les conseils dans l'éditeur de code. Les conseils s'affichent avec un soulignement bleu.
- Tout : affiche tous les niveaux de code d'erreur dans l'éditeur de code.
- Style de rendu de l'éditeur : détermine le style de soulignement parmi ces options :
Classique
,Vague ondulée
,Ligne pleine
ouPoints
. - Afficher l'audit d'erreur dans la gouttière de l'éditeur : activez/désactivez cette option pour afficher les icônes des erreurs, des avertissements et/ou des conseils à leur emplacement spécifique lorsque vous faites défiler le fichier dans l'éditeur de code.
Si vous rencontrez des problèmes avec la fonctionnalité d'audit d'erreur :
- Fermez l'EDI.
- Ouvrez l'éditeur du Registre.
- Accédez au dossier
HKEY_CURRENT_USER\Software\Embarcadero\BDS\21.0\Editor\Source Options\Borland.EditOptions.Pascal
. - Supprimez la clé ErrorInsightLevel.
- Redémarrez l'EDI.
Index pour Audit de code C++
L'index pour Audit de code C++ fournit un index pour les fonctionnalités Audit de conseil et Chercher la déclaration.
Le serveur LSP (Language Server Protocol) (cquery) traite l'ensemble du projet et construit une base de données. Comme il utilise de la CPU, il peut être désactivé avec la case à cocher Index pour Audit de code C++.
Ce réglage s'applique uniquement aux compilateurs C++ et améliorés par Clang.
Cette fonctionnalité utilise un serveur LSP (Language Server Protocol) pour le compilateur amélioré par Clang. Elle est asynchrone et non bloquante.Lorsque vous utilisez des compilateurs améliorés par Clang et que la fonctionnalité Index pour Audit de code C++ est activée, le projet que vous ouvrez est indexé. Il crée aussi une base de données utilisée pour les fonctionnalités Audit de conseil et Chercher la déclaration. Il utilise le CPU et peut être désactivé en décochant la case Index pour Audit de code C++.
Comportement du LSP
L'onglet Comportement du LSP contrôle la façon dont le serveur LSP cquery indexe les fichiers. En d'autres termes, comment il stocke les informations utilisées pour l'achèvement de code, la navigation, etc.
- L'indexation consomme beaucoup de CPU et il n'est pas possible d'utiliser l'Audit de code tant qu'elle n'est pas terminée.
- Le rechargement du serveur au changement de plate-forme provoque le nettoyage de l'index.
Trois alternatives sont disponibles dans l'onglet Comportement du LSP :
- Redémarrer le serveur à chaque fois qu'un projet est activé : Indexe tous les fichiers d'un projet, ainsi que les fichiers ouverts dans l'éditeur. C'est l'option la plus consommatrice en mémoire, mais son avantage est que l'intégralité du projet est disponible dans l'index. Avec cette option, le serveur LSP est redémarré à chaque fois que vous sélectionnez un nouveau projet actif dans la vue Projets, ou lorsque vous changez les options de projet ou les options de plate-forme.
ON
par défaut.- N'indexer que les fichiers ouverts dans l'éditeur : N'indexe que les fichiers que vous ouvrez, quel que soit votre projet. C'est une option moins consommatrice de mémoire et l'audit de code est disponible plus rapidement. Toutefois, il faut attendre un court laps de temps que l'Audit de code soit disponible à chaque fois que vous ouvrez un fichier. Avec cette option, le serveur LSP n'est jamais arrêté ou redémarré sauf si vous fermez tous les projets ou groupes de projets, ou si vous changez les options de projet ou les options de plate-forme.
- Indexer tous les fichiers du groupe de projets : Indexe tous les fichiers de tous les projets lorsque le groupe de projets est chargé. Le serveur LSP n'est jamais arrêté ou redémarré sauf si vous fermez tous les projets ou groupes de projets, ou si vous changez les options de projet ou les options de plate-forme.
Options avancées
Prise en charge de l'API Tools
La prise en charge de l'audit de code repose principalement sur le protocole LSP (Language Server Protocol), qui profite d'une prise en charge générique. Vous pouvez créer un nouveau serveur LSP en utilisant le dialogue ci-dessus. Toutefois, l'EDI implémente deux éléments : l'audit de code asynchrone générique et la prise en charge LSP, qui est une implémentation spécifique d'un audit de code asynchrone.
L'API Tools définit plusieurs nouveaux types et interfaces pour l'audit de code asynchrone. Le LSP utilise ces interfaces, mais vous pouvez écrire un fournisseur d'audit de code asynchrone avec l'implémentation de votre choix.
Les interfaces sont localisées dans ToolsAPI.pas :
IOTAAsyncCodeInsightManager
est l'interface principale d'une implémentation de gestionnaire d'audit de code asynchrone générique. Elle utilise plusieurs rappels, définis juste au-dessus.
IOTACodeInsightUIOverride
est utilisé pour redéfinir un comportement d'interface utilisateur spécifique.
Rapports de bogues et fichiers journaux
Pour signaler des bogues ou envoyer des fichiers journaux, voir Dépannage : LSP Delphi.