...

четверг, 20 ноября 2014 г.

Flow — статический анализ типов в JS от Facebook

Flow — это статический анализатор кода и набор синтаксических конструкций, для прямого указания типа переменной. В отличии от TypeScript, есть возможность делать код типизированным постепенно. Фактически можно взять любой проект на js и сразу начать использовать Flow (аналогично LESS для CSS).

Есть 3 режима:



  1. Не проверять ничего, по умолчанию

  2. Проверка без использования аннотаций (с коментарием-аннотацией, как в React)

  3. Строгое указание типа переменной (с внесением изменения непосредственно в код)






/* @flow */
function foo(x) {
return x * 10;
}
foo('Hello, world!');



$> flow
hello.js:5:5,19: string
This type is incompatible with
hello.js:3:10,15: number


В данном случае анализатор самостоятельно вывел тип переменной, но можно и подсказать:



/* @flow */
function foo(x: string, y: number): string {
return x.length * y;
}
foo('Hello', 42);



$> flow
hello.js:3:10,21: number
This type is incompatible with
hello.js:2:37,42: string


Также есть weak режим, позволяющий проверять код на ошибки, которые легко быстро исправить:



  • Потенциально возможные значения undefined и null, которые легко исправить добавлением проверки

  • Примитивне ошибки с типами, вроде true + 3


Установка

Flow написан на OCaml (>=4.01.0).

Для OSX и Linux есть бинарные сборки, Windows не поддерживается.

Для тех, кто пишет на OCaml, можно воспользоваться пакетным менеджером OPAM:



opam install flowtype




А пользователям OSX есть возможность поставить через Brew:

brew install flow


Планы на будущее



  • Поддержка существующих для TypeScript файлов интерфейсов (.d.ts) с DefinitelyTyped.org в аналогичный формат для Flow

  • Поддержка модулей ES6

  • Компиляция Flow в JS с помощью js_of_ocaml

  • Интеграция с редакторами кода и IDE

  • Сортировка ошибок и фильтрация по файлам

  • Улучшить сообщения об ошибках: причина ошибки и ее трейс

  • Куча фич типизированных систем, таких как ограниченный полиморфизм, перечисления, анализ чистоты функций и многое другое


Ссылки


This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Комментариев нет:

Отправить комментарий