# Coloration et complétion — explication ## De quoi s'agit-il ? Les deux fonctionnalités qui font de Turbo JS un éditeur *pour JavaScript* plutôt qu'un éditeur de texte qui ouvre des fichiers `.js` : la coloration syntaxique, et la complétion venue d'un serveur de langage. Elles fonctionnent très différemment, et la différence est instructive. ## La coloration est à nous ; la complétion ne l'est pas La coloration est faite ici, dans quelque six cents lignes de Go écrites à la main. La complétion est faite par `typescript-language-server` — le moteur même qui est derrière le support JavaScript de VS Code — et Turbo JS ne fait que demander et dessiner. Cette séparation n'est pas un accident d'effort. La coloration doit être **instantanée et tolérante** : elle s'exécute à chaque frappe, sur un texte invalide la plupart du temps pendant qu'on le tape, et un colorateur qui s'arrête pour réfléchir ou renonce devant une entrée cassée est pire que pas de colorateur. La complétion doit être **juste**, ce qui pour JavaScript signifie parser le fichier, suivre ses lignes `import` et `require` dans `node_modules`, inférer des types à travers un langage qui n'en déclare aucun, et savoir ce que prend chaque méthode de chaque globale — et rien de ce qui doit être instantané ne peut aussi être cela. L'éditeur dessine donc des couleurs qu'il a calculées lui-même, et affiche des complétions que quelqu'un d'autre a calculées. ## Pourquoi JavaScript est scanné ici alors que la bibliothèque le scanne déjà turbo-core colore JavaScript pour tous les éditeurs de la famille, parce que tous le rencontrent — dans le bloc de code d'un README, dans le `