Flowの速い環境変化
Flowの0.54.0が出てたのでアップグレードしたら、挙動が変わった。
# .flowconfig [ignore] .*/sass/* .*/static/* .*/bin/* .*/pkg/* .*/src/* .*/vendor/* [include] [libs] [lints] [options] suppress_comment= \\(.\\|\n\\)*\\flow-suppress esproposal.decorators=ignore
設定がスッキリしてしまいました。Immutable.jsの型定義ファイルは、libsエントリに入れずともnode_modulesの下から検索してくれるようになったようです。エントリを残しておくと、Flow組み込みのReactのほうにもある「Iterable」型定義を上書きしてしまう不都合が発生します。また、node_modulesの下は型チェックに行かなくなったみたい。ignoreエントリに明示しなくても動きが変わらなくなった。
History、material-ui、react-hot-loader、react-router-redux、redux-form、redux-form-material-uiの型定義スタブがなくてもエラーにならなくなった。現在唯一にスタブが必要なのはbrowser-cookies、マイナーだからか?
EslintにFlowを一緒にやってもらう
WebStormの機能をもちいてFlowの型チェックエラーをエディタに反映してもらってましたが、バックグラウンドでFlowサービスをずっと動かして重いせいなのか、今日はベイエリアも珍しく摂氏34度を超える猛暑になってるのでPCのファンが止まらない。WebStormじゃないところで動かすことも考えて、FlowをEslintに組み込みます。
すでに入れてるeslint-plugin-flowtypeはユーザーにFlowの型定義を利用したプログラムを書くように促すもので、eslint-plugin-flowtype-errorsはFlowの型チェック機能を随時呼び出しては出たエラーや警告をEslintのエラーや警告としてくれるものです。Eslintとエディタの連携はAtomやSublimeなど既に多くで提供されていて、もちろんWebStormでもあります。
// package.json "babel": { "presets": [["es2015", { "modules": false }], "react", "stage-1", "flow"], "plugins": ["transform-decorators-legacy", "react-hot-loader/babel"], "env": { "JEST": { "plugins": ["transform-es2015-modules-commonjs"] } } }, "eslintConfig": { "parser": "babel-eslint", "plugins": ["flowtype", "flowtype-errors"], "extends": ["airbnb", "plugin:flowtype/recommended"], "env": { "browser": true, "jest": true }, "rules": { "indent": ["warn", 4, { "SwitchCase": 1 }], "max-len": ["warn", 120], "react/jsx-indent": ["warn", 4], "react/jsx-indent-props": ["warn", 4], "flowtype/require-valid-file-annotation": "error", "flowtype/semi": "error", "flowtype-errors/show-errors": "error" } },
ドキュメントのとおりに何の疑問もなく動き、完了。WebStormでのFlowサーバー常駐を解きました。
しかし、どうなんだろう
Flowへ全部のソースコードを対応してみると…これってTypeScriptなんじゃね?という疑問が。。。今週はLabor Dayのお休みで連休なのだけど、普段は涼しいために家庭にクーラーが無い地域を襲った猛暑で外に行く気が起きない。喰わず嫌いをやめてTypeScriptの研究もしてみるとかしてみないとか。TypeScriptはApache License Version 2ですしね。とにかく型は正義。