Что мы строим в 2020 году

Mar 10 2020
Наш план на 2020 год охватывает три области: Flow предоставляет языковой сервер для предоставления расширенных функций редактирования и просмотра кода, таких как диагностика в редакторе (типовые ошибки), автозаполнение и «переход к определению». Хотя мы сосредоточены на обеспечении лучшего в своем классе опыта работы с VS Code, любой редактор, использующий LSP, может воспользоваться преимуществами языкового сервера Flow.
Фото Аксонсата Уантоэнга из Pexels

Наш план на 2020 год охватывает три области:

  • Улучшение возможностей и скорости отклика нашего VS Code редактирования и просмотра.
  • Сделайте нашу систему шрифтов более простой, выразительной и правильной
  • Уменьшите пиковое использование памяти, удерживая линию на повторной проверке производительности

Flow предоставляет языковой сервер для предоставления разнообразных функций редактирования и просмотра кода, таких как диагностика в редакторе (ошибки типа), автозаполнение и «переход к определению». Хотя мы сосредоточены на обеспечении лучшего в своем классе опыта работы с VS Code, любой редактор, использующий LSP, может воспользоваться преимуществами языкового сервера Flow.

В 2020 году мы сосредоточимся на двух видах инвестиций в редактирование и просмотр. Во-первых, мы продолжим улучшать надежность и скорость отклика наших функций IDE. Во-вторых, мы добавим поддержку некоторых наиболее востребованных функций IntelliSense.

Сервер языка Flow не всегда отвечает немедленно, потому что ему необходимо инициализировать при первом запуске, а иногда необходимо перезапускать после таких событий, как большие перезагрузки. Для большинства языковых функций требуется, чтобы сервер Flow работал постоянно, пока вы редактируете код. По возможности мы преобразуем наши запросы на редактирование и просмотр, чтобы их можно было выполнять без использования сервера. Мы также продолжим сокращать количество ситуаций, когда серверу Flow необходимо перезапускать себя.

Второй набор инвестиций связан с добавлением поддержки наиболее востребованных функций IntelliSense : информации о параметрах, быстрой информации и быстрых исправлений.

  • Информация о параметрах включает справку по сигнатуре - количество и типы ожидаемых параметров - отображаемую при вводе вызова функции. Мы также покажем документацию о параметре, извлеченном из комментариев JSDoc в коде.
  • Краткая информация показывает объявление, когда вы наводите курсор на идентификатор в коде. Flow уже показывает сигнатуры функций. Мы улучшим форматирование быстрой информации и добавим комментарии к документации, аналогичные информации о параметрах.
  • Мы только что добавили нашу первую функцию быстрого исправления - «Вы имели в виду?» который предлагает исправления в коде по мере ввода. Например, если вы пишете foo.barна объекте foo, у которого нет имени поля, barно есть поле с именем baz, быстрое исправление применит это предложение. Мы также изучаем возможность добавления подавления ошибок потока и автоматического создания статических importоператоров.

Мы считаем, что тщательно продуманная система шрифтов, которая является простой, выразительной и правильной, может улучшить взаимодействие с разработчиками.

  • Все просто: могут ли разработчики предсказать, как Flow поведет себя в их коде?
  • Выразительный: могут ли разработчики делать то, что им нужно, не блокируясь Flow?
  • Правильно: могут ли разработчики полагаться на Flow, чтобы избежать распространенных дорогостоящих ошибок?
  • Использование thisin функций и методов часто приводит к неконтролируемому коду, поскольку он может быть неявно набран как any. Использование anyнебезопасно и не позволяет Flow сообщать об ошибках. Внедрение ввода для thisпозволит Flow проверять код, который использует this.
  • Незапечатанные типы объектов используются для моделирования пустых объектных литералов и свойств функций. Незапечатанные объекты позволяют записывать новые свойства в любое время. Они полезны для таких сценариев, как включение инициализации объекта с помощью нескольких операторов. Но Flow не проверяет чтение из незапечатанных объектов без соответствующих записей . Мы будем работать над устранением этой ненадежности, тщательно отслеживая общие шаблоны инициализации.
  • Многие служебные типы Flow , такие как $ObjMapи $PropertyType, не отражают семантику соответствующих операций времени выполнения. Для этих типов мы создадим первоклассный дизайн.
  • Подавление ошибок потока очень грубое. Добавление $FlowFixMeвыше строки кода для подавления одного вида ошибок фактически подавляет все ошибки, вносимые этим кодом, потенциально маскируя будущие ошибки. Мы разрабатываем коды ошибок, которые позволят вам подавить определенные ошибки, не скрывая другую ошибку в той же строке кода. И мы переместим подавления в основную позицию ошибки, не позволяя подавлению, прикрепленному к определению, скрывать ошибки там, где это определение используется.
  • Универсальные типы и функции в настоящее время ведут себя непредсказуемо: параметры универсального типа могут выходить из своей области видимости, а вызовы универсальных функций могут накапливать новые границы вдали от места вызова. Мы разрабатываем новое поведение для универсальных функций, включая более надежное обнаружение ошибок в универсальных функциях, тест для предотвращения экранированных параметров типа и проверку для обеспечения правильного ограничения вызовов функций.

В прошлом году команда Flow добилась значительных улучшений производительности , например сократила время повторной проверки на 70%. Мы слышали огромное количество положительных отзывов от разработчиков Facebook о наших улучшениях производительности. Мы стремимся поддерживать производительность даже при росте нашей кодовой базы JavaScript. Мы также работаем над сокращением использования памяти Flow во всех ситуациях.

В заключение

В 2020 году команда Flow предоставит разработчикам опыт, соответствующий отраслевым стандартам надежности, полноты функций и удовольствия. В рамках этого опыта для разработчиков мы продолжим улучшать основы: использование памяти и надежность. Мы предоставим наиболее востребованные функции редактирования и просмотра в среде IDE. И мы улучшим систему типов Flow, чтобы разработчикам было проще писать безопасный и правильный код.

Мы будем поддерживать связь с вами в этом блоге, на GitHub и на нашем канале в Discord Flowtype .