O que estamos construindo em 2020

Mar 10 2020
Nosso plano para 2020 abrange três áreas: O Flow fornece um servidor de linguagem para fornecer recursos avançados de edição e navegação de código, como diagnóstico no editor (erros de tipo), preenchimento automático e “ir para definição”. Embora nosso foco seja fornecer a melhor experiência em VS Code, qualquer editor que use LSP pode aproveitar as vantagens do servidor de linguagem do Flow.
Foto de Aksonsat Uanthoeng de Pexels

Nosso plano para 2020 abrange três áreas:

  • Melhore os recursos e a capacidade de resposta da nossa experiência de edição e navegação do VS Code
  • Torne nosso sistema de tipos mais simples, expressivo e correto
  • Reduza nosso pico de uso de memória enquanto mantém a linha na verificação de desempenho

O Flow fornece um servidor de linguagem para fornecer recursos avançados de edição e navegação de código, como diagnóstico no editor (erros de tipo), preenchimento automático e “ir para definição”. Embora nosso foco seja fornecer a melhor experiência em VS Code, qualquer editor que use LSP pode aproveitar as vantagens do servidor de linguagem do Flow.

Em 2020 focaremos em dois tipos de investimentos em nossa experiência de edição e navegação. Primeiro, continuaremos a melhorar a confiabilidade e a capacidade de resposta dos nossos recursos IDE. Em segundo lugar, adicionaremos suporte para alguns dos recursos mais solicitados do IntelliSense.

O servidor de linguagem Flow nem sempre responde imediatamente porque precisa ser inicializado na primeira inicialização e, às vezes, precisa ser reiniciado após eventos como grandes rebases. A maioria dos recursos de linguagem exige que o servidor Flow esteja em execução contínua enquanto você edita o código. Sempre que possível, converteremos nossas solicitações de edição e navegação para que possam ser concluídas sem a necessidade do servidor. Também continuaremos a reduzir as situações em que o servidor Flow precisa ser reiniciado.

Um segundo conjunto de investimentos vem da adição de suporte para os recursos mais solicitados do IntelliSense : informações de parâmetros, informações rápidas e soluções rápidas.

  • As informações dos parâmetros incluem ajuda de assinatura — o número e os tipos de parâmetros esperados — exibidos conforme você digita a chamada de função. Também mostraremos documentação sobre o parâmetro extraído dos comentários JSDoc no código.
  • As informações rápidas mostram a declaração quando você passa o mouse sobre um identificador no seu código. O fluxo já mostra assinaturas de funções. Melhoraremos a formatação para obter informações rápidas e adicionaremos comentários de documentação semelhantes às informações dos parâmetros.
  • Acabamos de adicionar nosso primeiro recurso de solução rápida - um “Você quis dizer?” que sugere correções em seu código enquanto você digita. Por exemplo, se você escrever foo.barem um objeto fooque não possui um campo nomeado bar, mas possui um campo denominado baz, a solução rápida aplicará essa sugestão. Também estamos investigando a adição de supressões de erros de fluxo e a geração automática de importinstruções estáticas.

Acreditamos que um sistema de tipos cuidadosamente projetado, simples, expressivo e correto, pode fornecer uma experiência melhor para os desenvolvedores.

  • Simples: os desenvolvedores podem prever como o Flow se comportaria em seu código?
  • Expressivo: os desenvolvedores podem fazer o que precisam sem serem bloqueados pelo Flow?
  • Correto: os desenvolvedores podem confiar no Flow para ajudá-los a evitar erros comuns e dispendiosos?
  • O uso de thisfunções e métodos in geralmente leva a código não verificado, porque pode ser digitado implicitamente como any. O uso anynão é seguro e evita que o Flow relate erros. A implementação da digitação for thispermitirá que o Flow verifique o código que usa this.
  • Tipos de objetos não lacrados são usados ​​para modelar literais de objetos vazios e propriedades em funções. Objetos não lacrados permitem que novas propriedades sejam gravadas a qualquer momento. Eles são úteis para cenários como permitir a inicialização de objetos em várias instruções. Mas o Flow não verifica leituras de objetos não lacrados sem gravações correspondentes . Trabalharemos para resolver essa deficiência, rastreando cuidadosamente os padrões comuns de inicialização.
  • Muitos dos tipos de utilitário do Flow , como $ObjMape $PropertyType, não refletem a semântica das operações de tempo de execução correspondentes. Criaremos designs de primeira classe para esses tipos.
  • As supressões de erros de fluxo são muito grosseiras. Adicionar uma $FlowFixMelinha de código acima para suprimir um tipo de erro, na verdade, suprime todos os erros introduzidos por esse código, potencialmente mascarando erros futuros. Estamos projetando códigos de erro que permitirão suprimir erros específicos sem ocultar outro erro na mesma linha de código. E moveremos as supressões para a posição primária de um erro, evitando que uma supressão anexada a uma definição oculte erros onde essa definição é usada.
  • Atualmente , tipos e funções genéricos têm comportamento imprevisível, com parâmetros de tipo genérico capazes de escapar de seu escopo e chamadas para funções genéricas capazes de acumular novos limites longe do local da chamada. Estamos projetando um novo comportamento para genéricos, incluindo detecção mais confiável de erros em funções genéricas, um teste para evitar parâmetros de tipo escapados e uma verificação para garantir que as chamadas de função sejam devidamente restritas.

A equipe do Flow apresentou grandes melhorias de desempenho no ano passado , como a redução do tempo de nova verificação em 70%. Ouvimos comentários extremamente positivos dos desenvolvedores do Facebook sobre nossas melhorias de desempenho. Nosso objetivo é manter o desempenho, mesmo à medida que nossas bases de código JavaScript crescem. Também estamos trabalhando para reduzir o uso de memória do Flow em todas as situações.

Para encerrar

Em 2020, a equipe do Flow oferecerá uma experiência de desenvolvedor que esteja de acordo com os padrões de confiabilidade, integridade de recursos e prazer de todo o setor. Como parte dessa experiência do desenvolvedor, continuaremos aprimorando os fundamentos: uso de memória e confiabilidade. Forneceremos os recursos de edição e navegação do IDE mais solicitados. E melhoraremos o sistema de tipos do Flow para facilitar aos desenvolvedores a escrita de código seguro e correto.

Manteremos contato com você neste blog, no GitHub e em nosso canal Flowtype Discord .