Dans la version 10.4, nous avons retravaillé la complétion de code et d'autres fonctionnalités. Il s'agit de l'un des changements les plus importants apportés à l'IDE depuis une dizaine d'années.
Qu'entendons-nous par Code Insight ?
Tout d'abord, un peu d'histoire. Si vous êtes familier avec Code Insight, passez directement à l'étape suivante...
Code Insight est notre nom pour un ensemble de fonctionnalités de productivité de l'IDE dans l'éditeur. Pour les besoins de ce billet de blog, ces fonctionnalités sont les suivantes :
- Achèvement du code: la liste déroulante qui prédit ce que vous voulez taper. Apparaît lorsque vous tapez un point (.) après un identificateur, ou lorsque vous tapez appuyer sur Ctrl+Espace.

- Achèvement des paramètres: l'astuce qui apparaît pour montrer les paramètres d'une méthode, y compris les variations multiples pour une méthode surchargée. Ctrl+Maj+Espace à l'intérieur des accolades de la méthode ().

- Trouver la déclaration : Faites un clic droit sur un identificateur et cliquez sur Trouver la déclaration, ce qui vous conduira à l'endroit où la méthode, la variable, le type, etc. est défini. Vous pouvez également maintenir la touche Control enfoncée et déplacer votre souris sur l'éditeur, et les identifiants applicables se transformeront en hyperliens sur lesquels vous pourrez cliquer pour trouver leur déclaration, ce qui est connu sous le nom de Navigation dans les codes.
- Aperçu de l'infobulle: Passez votre souris sur une variable ou un type, et vous obtiendrez des informations à son sujet. Cela inclut parfois XMLDoc et est connu sous le nom de Aide Insight. (Nous devons clarifier les noms dans notre document).
- Aperçu des erreurs: affiche les erreurs dans votre code avant la compilation. Ces erreurs sont connues sous le nom de "red squigglies", la terminologie préférée de beaucoup de gens - les lignes rouges en zigzag sous votre code. Les erreurs sont également affichées dans le nœud Erreurs de la section Vue de la structure.
Ces fonctionnalités sont disponibles dans Delphi depuis de nombreuses années. Les fonctionnalités de ce type sont un avantage clé pour vous lorsque vous codez un IDE. La complétion de code, en particulier, permet d'économiser beaucoup de temps de frappe, et la détection des erreurs vous permet de vous assurer que votre code fonctionne avant de passer du temps à le compiler.
Aperçu du code classique
Au fil de l'évolution de la langue et du temps, ces fonctionnalités n'ont plus toujours fonctionné aussi bien que nous le souhaitions. La technologie était à la pointe du progrès lorsqu'elle a été introduite, mais nous pourrions y apporter des améliorations aujourd'hui.
Il est fréquent de voir des rapports de bogues concernant des erreurs parasites (c'est-à-dire des erreurs signalées dans l'éditeur ou dans la vue Structure alors que le code source est en fait parfaitement correct). Ou que l'IDE travaillait dans le thread principal, et ne répondait donc pas aux frappes de clavier pendant qu'il travaillait à afficher la liste de complétion du code (vous ne pouviez appuyer que sur Echap pour annuler). (Parfois, pour des projets gigantesques, le calcul des données pour la complétion de code pouvait utiliser beaucoup de mémoire dans l'IDE. En outre, les fonctionnalités ont été mises en œuvre avec plusieurs analyseurs de code : la complétion de code et la détection d'erreurs avaient chacune une compréhension différente du code. Enfin, l'analyse du code était désactivée pendant le débogage, de sorte que si vous écriviez du code pendant le débogage, vous ne bénéficiiez d'aucune aide à la productivité.
Nous ne voulions pas que cela continue. Nos objectifs pour la version 10.4 ont été les suivants :
- Make Code Insight asynchrone - c'est-à-dire s'exécuter dans un autre thread ou dans un autre processus (ou les deux) afin que l'IDE soit toujours réactif lorsque vous tapez, même s'il travaille en arrière-plan.
- Réduire, voire supprimer complètement (vous voyez où je veux en venir) le potentiel utilisation de la mémoire pour compléter le code à partir de l'IDE
- Veiller à ce que Error Insight donne toujours résultats corrects - c'est-à-dire qu'il devrait donner exactement les erreurs que le compilateur ferait, et un code correct ne devrait pas montrer d'erreurs
- Aidez-nous à nous rapprocher d'une analyseur syntaxique unique pour la source Delphi dans l'IDE, afin qu'il y ait une "source unique de vérité" ou une compréhension unique de la signification du code Delphi dans l'IDE.
- Moderniser l'approche de l'outil de codage de Delphi afin d'utiliser des techniques modernes
- Et résoudre en même temps un certain nombre de bogues dans la complétion de code
- Et ajoutez au moins une fonctionnalité de complétion de code... Attendez ! Ajoutez deux nouvelles fonctionnalités de complétion de code en même temps !
Tout cela se trouve dans Delphi 10.4.
Enthousiaste ? Nous le sommes. Il s'agit de l'un des plus grands et des meilleurs changements apportés à l'IDE Delphi depuis quinze ans.
(Et ne vous inquiétez pas, si vous en avez besoin, la vision classique du code est toujours là, avec quelques nouvelles corrections de bogues, et peut être activée dans la version 10.4 si vous le souhaitez).
Code Insight Technology dans Delphi 10.4
Dans la version 10.4, les fonctions d'analyse du code susmentionnées sont mises en œuvre à l'aide d'un "serveur LSP". Vous avez peut-être entendu parler de cette technologie, mais si ce n'est pas le cas, LSP fait référence au Language Server Protocol, qui est un moyen standardisé d'implémenter des fonctionnalités similaires à l'aperçu du code pour de nombreux langages. Un IDE communique avec un "serveur de langue", qui est une petite application d'aide qui calcule et génère les informations affichées par l'IDE. Il utilise pour cela un protocole défini, qui est le protocole du serveur de langue.
En d'autres termes, l'IDE parle maintenant à une application d'aide lorsque vous faites quelque chose comme ouvrir un projet, ou taper une touche dans votre fichier, et l'IDE peut périodiquement lui poser des questions, telles que : Quels sont les résultats de l'achèvement à cet endroit ? Cette application d'assistance suit votre code et renvoie une réponse à toutes les questions, ainsi que toutes les erreurs qu'elle a rencontrées dans le code en cours de route.
Notre application serveur est construite autour du compilateur, utilisant le compilateur comme un service pour fournir des résultats LSP. Cela signifie que les données affichées par l'IDE, y compris les erreurs "rouges", proviennent toutes du compilateur lui-même.
Cela signifie plusieurs choses :
- La communication avec un autre processus est asynchrone. Dans l'IDE, elle est mise en œuvre dans un autre thread. Vous pouvez continuer à taper, même fermer votre fichier ou ouvrir un autre projet, pendant que l'IDE attend de recevoir les données qu'il a demandées
- Le travail est effectué dans un autre processus. Cela signifie que toute l'utilisation de la mémoire pour le calcul des résultats n'est plus dans l'IDE lui-même. L'IDE dispose de plus de mémoire, et l'application d'assistance peut utiliser tout son espace mémoire uniquement pour fournir des résultats.
- Il utilise un protocole moderne et normalisé qui s'applique à de nombreuses langues.
- Ce que vous voyez à l'écran est ce que le compilateur voit. Cela signifie qu'il devrait être exact. Si votre code se compile, vous ne verrez aucune erreur Error Insight ; à l'inverse, si vous voyez des traits rouges dans votre code ou dans la vue Structure, votre code ne se compilera pas.
- Vous pouvez obtenir la complétion de code pendant le débogage.
Ce sont là de très bonnes choses.
Mais assez de texte. Voyons ce que cela donne en action !
Code moderne Delphi Insight en action
Il est difficile de montrer la réactivité dans un blog. Dans ces captures d'écran statiques, imaginez que vous êtes en train de taper et que vous ne voyez jamais le curseur d'attente de Windows.
L'imagination deviendra réalité avec la livraison de la version 10.4 !
Aperçu du code pendant le débogage
La première nouveauté est importante et ne nécessite pas beaucoup de mots. Vous pouvez utiliser Code Insight pendant le débogage.
Vous voulez déboguer votre application et taper du code en même temps, et obtenir la complétion de code ? C'est possible.

Oui, ce que vous voyez est correct - il s'agit de la complétion de code et de la détection d'erreurs qui fonctionnent toutes deux pendant que vous déboguez activement l'application.
Résultats de l'achèvement
L'utilisation de la complétion de code est la même que dans la version 10.3.3, à l'exception du fait que l'IDE reste réactif dans la version 10.4. Mais nous avons ajouté une nouvelle fonctionnalité, qui vous permet de trouver plus facilement ce que vous voulez grâce à la complétion de code. Dans la version 10.4, la complétion de code affichera désormais des résultats plus utiles que par le passé - tout en conservant les éléments de la version 10.3.3 en haut de la liste des résultats.
Voici la complétion de code de la version 10.3.3, en tapant "act" après une instance de bouton TB de VCL :

Notez que la version 10.3.3 ne donne que très peu de résultats - un seul, en fait. La complétion de code classique ne listait que les éléments qui commencer par ce que vous avez tapé.
Voici 10.4 en action (jeu de mots) pour la même réalisation :

Dans le document 10.4, la complétion de code énumère tous les éléments qui contenir ce que vous avez tapé. D'autres IDEs le font aussi, Visual Studio par exemple, mais jusqu'à présent Delphi a montré une liste plus limitée. Ceci est utile car cela vous permet de de la recherche à l'achèvement.
Par exemple, supposons que vous vous souveniez qu'un contrôle a une propriété quelque chose-Rect mais que vous ne vous souveniez pas de son nom. Dans la version 10.3.3, vous devez chercher sur Google. En 10.4, tapez simplement "rect" et vous verrez :
Vous pouvez explorer votre code en tapant.
Le fait d'avoir plus de résultats n'est pas toujours ce que vous recherchez, et vous pouvez vous attendre à n'avoir que des éléments qui commencent par ce que vous avez tapé par habitude. Par défaut, et pour conserver un comportement proche de celui que vous connaissez depuis la version 10.3.3, nous trions la liste de complétion de manière à ce que tous les identificateurs commençant par soient placés au-dessus de tous les identificateurs contenant. En d'autres termes, la liste donnera les mêmes résultats que 10.3.3mais avec des résultats supplémentaires en annexe. Vous n'avez pas besoin de les utiliser si vous ne le souhaitez pas ; ils sont situés après les éléments que la version 10.3.3 vous aurait montrés.
Si vous souhaitez un comportement similaire à celui d'autres IDEs, listant tous les résultats ensemble, nous avons un paramètre : actuellement une clé de registre mais nous pourrons l'exposer en tant qu'interface utilisateur. Cela signifie que si vous êtes plus habitué à ce que VSCode fournit, vous pouvez également l'obtenir.
| En 10.4, trier tous les éléments qui commencent par ce que vous avez tapé ensemble, en haut de la liste. C'est ce que l'on voit en 10.3.3, et c'est la valeur par défaut en 10.4. | En 10.4, tri par portée uniquement, de sorte que tous les éléments qui contiennent ce que vous avez tapé sont affichés ensemble. Ceci est plus proche de Visual Studio ou d'autres IDEs, et est désactivé par défaut. |
Sélection dans la liste d'achèvement
La complétion de code sélectionne automatiquement les meilleurs éléments de la liste pour vous (vous pouvez donc simplement appuyer sur Entrée ou Espace ou '.' ou similaire pour choisir cet élément et continuer à coder) dans l'ordre suivant :
- Une correspondance exacte avec ce que vous avez tapé. S'il n'y a pas de correspondance :
- Parmi les éléments qui commencent par ce que vous avez tapé, l'identifiant le plus court. S'il n'y a pas d'éléments commençant par :
- Parmi les éléments qui contiennent ce que vous avez tapé, l'identifiant le plus court
Le fait de donner la priorité aux débuts par rapport aux contenus signifie que la liste de complétion sélectionnera automatiquement "Parent" plutôt que "SetParent". Choisir la correspondance la plus courte signifie qu'elle sélectionnera "Parent" plutôt que "ParentFont". (Vous pouvez le voir dans les captures d'écran ci-dessus.) En général, nous trouvons que cela correspond à ce que vous êtes le plus susceptible de taper. Bien entendu, vous pouvez faire défiler l'écran et appuyer sur les flèches vers le haut et vers le bas pour sélectionner ce que vous voulez.
Aperçu des erreurs
Notez que dans ces captures d'écran, vous pouvez voir en direct Error Insight, qui se met à jour au fur et à mesure que vous tapez. L'identifiant partiellement tapé "pare", qui n'est pas un code valide, est correctement souligné en rouge (le soulignement disparaîtra lorsque vous sélectionnerez un élément dans la liste de complétion). Les résultats d'Error Insight proviennent du compilateur lui-même, et reflètent et rapportent exactement ce que le compilateur voit.
Vous ne devriez jamais voir d'erreurs incorrectes dans l'éditeur ou le volet Structure. Ce que vous voyez à l'écran est exact.
Multiprocessus Architecture
Ce qui suit n'est pas important pour les caractéristiques, mais peut vous intéresser d'un point de vue technique.
J'ai mentionné que le serveur LSP s'exécute en tant que processus séparé, ce qui présente un certain nombre d'avantages, notamment un espace d'adressage mémoire dédié de 4 Go pour la compréhension du code. Si vous regardez la version 10.4 dans le gestionnaire des tâches de Windows, vous verrez plusieurs processus DelphiLSP. Le premier contrôle plusieurs agents, et nous avons un agent dédié à la fourniture de l'achèvement et d'autres résultats, et un agent dédié à la fourniture d'informations sur les erreurs.
À ma connaissance, nous sommes le seul serveur LSP à utiliser une architecture multiprocessus.
Qualité
Dans le cadre de cette mise en œuvre, nous avons également trouvé et corrigé un certain nombre de problèmes qui affectaient l'achèvement du code dans le passé.
Prochaines étapes
La nouvelle complétion de code est différente de la complétion de code de la version 10.3.3 et des versions antérieures. Nous nous sommes efforcés de la rendre aussi similaire que possible, notamment en triant les éléments commençant par un élément avant les autres, afin qu'elle vous soit familière lorsque vous l'utiliserez pour la première fois. Nous espérons qu'en quelques minutes, vous vous y habituerez tellement que vous ne voudrez plus jamais revenir à la version 10.3.3 ! Mais nous ne voulons pas présenter cette version comme étant exactement la même : vous trouverez des différences.
Le nouveau Code Insight dans Delphi 10.4 résout de nombreux problèmes et rend l'utilisation de l'IDE beaucoup plus agréable et réactive pour vous aussi. Sans parler des résultats supplémentaires, qui peuvent être extrêmement utiles. Nous avons l'intention de continuer à travailler sur ce projet afin d'avancer vers les objectifs décrits ci-dessus. Dans la version 10.4, nous et nos bêta-testeurs avons trouvé que c'était un excellent ajout à l'IDE.
En outre, nous avons ajouté deux nouvelles fonctionnalités : la possibilité d'explorer votre code à l'aide de la complétion de code et l'utilisation de Code Insight, y compris la complétion de code et d'autres fonctionnalités de Code Insight, pendant le débogage.
Nous sommes très enthousiastes à propos de cette fonctionnalité. Asynchrone. IDE réactif. Protocole moderne. Prise en charge d'autres langues. Complétion de code pendant le débogage. C'est une excellente chose. Nous avons hâte que vous obteniez la version 10.4 et que vous l'essayiez vous-même.
| " | Le nouveau CodeInsight basé sur le LSP est fantastique. Il va révolutionner le produit.
- Nick Hodges, qui a utilisé un aperçu de la version bêta |
Si vous avez souscrit à un abonnement de mise à jour, l'un des avantages est l'accès aux versions bêta des prochaines versions. Il est encore temps de rejoindre notre programme bêta pour la version 10.4 !
Il s'agit d'un aperçu d'une version à venir de RAD Studio. Il peut toujours y avoir des bogues ou des changements de dernière minute. Rien n'est définitif tant que la version n'est pas officiellement disponible.

