Ce que nous construisons en 2020

Mar 10 2020
Notre plan pour 2020 couvre trois domaines : Flow fournit un serveur de langage pour fournir de riches fonctionnalités d'édition et de navigation dans le code telles que les diagnostics dans l'éditeur (erreurs de type), la saisie semi-automatique et « aller à la définition ». Bien que notre objectif soit de fournir une expérience de premier ordre dans VS Code, tout éditeur qui utilise LSP peut profiter du serveur de langage de Flow.
Photo par Aksonsat Uanthoeng de Pexels

Notre plan pour 2020 couvre trois domaines :

  • Améliorer les capacités et la réactivité de notre expérience d'édition et de navigation VS Code
  • Rendre notre système de caractères plus simple, expressif et correct
  • Réduisez notre utilisation maximale de la mémoire tout en gardant le cap sur la revérification des performances

Flow fournit un serveur de langage pour fournir des fonctionnalités riches d'édition et de navigation dans le code telles que les diagnostics dans l'éditeur (erreurs de type), la saisie semi-automatique et « aller à la définition ». Bien que notre objectif soit de fournir une expérience de premier ordre dans VS Code, tout éditeur qui utilise LSP peut profiter du serveur de langage de Flow.

En 2020, nous nous concentrerons sur deux types d'investissements dans notre expérience d'édition et de navigation. Premièrement, nous continuerons à améliorer la fiabilité et la réactivité de nos fonctionnalités IDE. Deuxièmement, nous ajouterons la prise en charge de certaines fonctionnalités IntelliSense les plus demandées.

Le serveur de langage Flow ne répond pas toujours immédiatement car il doit s'initialiser lors du premier démarrage et doit parfois redémarrer après des événements tels que des rebases importants. La plupart des fonctionnalités du langage nécessitent que le serveur Flow s'exécute en continu pendant que vous modifiez le code. Dans la mesure du possible, nous convertirons nos demandes de modification et de navigation pour qu'elles puissent être complétées sans nécessiter le serveur. Nous continuerons également à réduire les situations dans lesquelles le serveur Flow doit redémarrer lui-même. Un deuxième ensemble d'investissements provient de l'ajout de la prise en charge des fonctionnalités IntelliSense

les plus demandées : informations sur les paramètres, informations rapides et correctifs rapides.

  • Les informations sur les paramètres incluent l'aide à la signature (le nombre et les types de paramètres attendus) affichée lorsque vous tapez l'appel de fonction. Nous afficherons également la documentation sur le paramètre extrait des commentaires JSDoc dans le code.
  • Les informations rapides affichent la déclaration lorsque vous survolez un identifiant dans votre code. Flow affiche déjà les signatures de fonction. Nous améliorerons le formatage pour des informations rapides et ajouterons des commentaires de documentation similaires aux informations sur les paramètres.
  • Nous venons d'ajouter notre première fonctionnalité de solution rapide : un « Voulez-vous dire ? » qui suggère des corrections à votre code au fur et à mesure que vous tapez. Par exemple, si vous écrivez foo.barsur un objet fooqui n’a pas de champ nommé barmais qui possède un champ nommé baz, le correctif rapide appliquera cette suggestion. Nous étudions également l'ajout de suppressions d'erreurs de flux et la génération automatique d' importinstructions statiques.

Nous pensons qu'un système de caractères bien conçu, simple, expressif et correct, peut offrir une meilleure expérience aux développeurs.

  • C’est simple : les développeurs peuvent-ils prédire comment Flow se comporterait sur leur code ?
  • Expressif : les développeurs peuvent-ils faire ce qu'ils doivent faire sans être bloqués par Flow ?
  • Correct : les développeurs peuvent-ils compter sur Flow pour les aider à éviter les erreurs coûteuses courantes ?
  • L'utilisation de thisfonctions et de méthodes in conduit souvent à un code non contrôlé, car il peut être implicitement saisi comme any. L'utilisation anyest dangereuse et empêche Flow de signaler des erreurs. L'implémentation de la saisie pour thispermettra à Flow de vérifier le code qui utilise this.
  • Les types d'objets non scellés sont utilisés pour modéliser des littéraux d'objet vides et des propriétés sur des fonctions. Les objets non scellés permettent d'écrire de nouvelles propriétés à tout moment. Ils sont utiles pour des scénarios tels que l'activation de l'initialisation d'objet sur plusieurs instructions. Mais Flow ne vérifie pas les lectures d'objets non scellés sans écritures correspondantes . Nous nous efforcerons de résoudre ce problème en suivant attentivement les modèles d'initialisation courants.
  • De nombreux types d'utilitaires de Flow , tels que $ObjMapet $PropertyType, ne reflètent pas la sémantique des opérations d'exécution correspondantes. Nous créerons des designs de première classe pour ces types.
  • Les suppressions d'erreurs de débit sont très grossières. L'ajout d'un $FlowFixMeau-dessus d'une ligne de code pour supprimer un type d'erreur supprime en fait toutes les erreurs introduites par ce code, masquant potentiellement les erreurs futures. Nous concevons des codes d'erreur qui vous permettront de supprimer des erreurs spécifiques sans masquer une autre erreur sur la même ligne de code. Et nous déplacerons les suppressions vers la position principale d'une erreur, empêchant ainsi une suppression attachée à une définition de masquer les erreurs lorsque cette définition est utilisée.
  • Les types et fonctions génériques ont actuellement un comportement imprévisible, avec des paramètres de type générique capables d'échapper à leur portée et des appels à des fonctions génériques capables d'accumuler de nouvelles limites loin du site d'appel. Nous concevons un nouveau comportement pour les génériques, notamment une détection plus fiable des erreurs dans les fonctions génériques, un test pour empêcher les paramètres de type échappés et une vérification pour garantir que les appels de fonction sont correctement contraints.

L'équipe Flow a apporté d'énormes améliorations de performances l'année dernière , comme la réduction de nos temps de revérification de 70 %. Nous avons reçu des retours extrêmement positifs de la part des développeurs de Facebook concernant nos améliorations de performances. Notre objectif est de maintenir la performance, même si nos bases de code JavaScript se développent. Nous travaillons également à réduire l'utilisation de la mémoire du Flow dans toutes les situations.

En conclusion

En 2020, l'équipe Flow offrira une expérience de développement à la hauteur des normes de l'industrie en matière de fiabilité, d'exhaustivité des fonctionnalités et de plaisir. Dans le cadre de cette expérience de développeur, nous continuerons à améliorer les fondamentaux : l'utilisation de la mémoire et la fiabilité. Nous fournirons les fonctionnalités d'édition et de navigation IDE les plus demandées. Et nous améliorerons le système de types de Flow pour permettre aux développeurs d'écrire plus facilement du code sûr et correct.

Nous resterons en contact avec vous sur ce blog, sur GitHub et sur notre chaîne Flowtype Discord .