メインコンテンツにスキップ

プロジェクトで enum を有効にする

ツールをアップグレードする

リポジトリで Flow Enum を有効にするには、まず次のパッケージを更新する必要があります。

  • 少なくとも Flow 0.159 にアップグレードする
    • Flow が enum を有効にするには、いくつかの設定が必要です。以下を参照してください。
  • 少なくともバージョン 2.2 に Prettier をアップグレードする
    • このバージョン以降、Prettier は Flow Enum の解析と整形をすぐに処理できます。
    • Flow Enum をフォーマットするには、JavaScript ファイルで flow パーサーオプションを使用する必要があります。
  • 少なくともバージョン 7.13.0 に Babel をアップグレードする
    • このバージョン以降、Babel は Flow Enum を解析できます。ただし、この解析を有効にするには、いくつかの設定を提供する必要があり、さらに必要な変換は含まれていません。以下を参照してください。
  • 少なくともバージョン 0.11.0 に jscodeshift をアップグレードする
  • 少なくともバージョン 0.4.8 に hermes-parser をアップグレードする
  • ESLint の場合は、次のいずれかを使用します
    • 少なくともバージョン 0.4.8 で hermes-eslint を ESLint パーサーとして使用する
    • または、バージョン 10.1.0 に babel-eslint をアップグレードする
      • このバージョン以降、babel-eslint は Flow Enum をすぐに処理できます。
      • 11.x にアップグレードしないでください。このブランチは Flow Enum をサポートしていません。
    • または、Babel 7.13.0 以降を使用する別のソリューションを、Flow を有効にして使用することもできます。これも機能する可能性があります。

コードを検査する他のツールがある場合は、それも更新する必要があります。flow-parserhermes-parser、または @babel/parser を使用している場合は、上記の手順に従ってそれらをアップグレードします。他のパーサーを使用している場合は、そのパーサーに Flow Enum の解析を実装する必要があります。Babel、Flow、および Hermes パーサーの既存のコードを参照して、作業の参考にすることができます。

enum を有効にする

  • .flowconfig[options] ヘッダーの下に enums=true を追加します
  • Flow Enum の Babel 変換を追加します。これにより、enum 宣言 AST ノードがランタイムへの呼び出しに変換されます:babel-plugin-transform-flow-enums。開発依存関係に追加し、Babel 設定を調整して変換を使用します。デフォルトでは、変換はランタイムパッケージを直接(下記)必要としますが、これを設定できます。
  • Flow Enum ランタイムパッケージを本番環境の依存関係に追加します。これは Flow Enum を作成するために、実行時に必要になり使用されます:flow-enums-runtime

推奨される ESLint ルールを有効にする

enum は switch ステートメントで網羅的にチェックできるため、以前よりも switch ステートメントの使用が増加する可能性があります。switch ステートメントの一般的な問題を回避するために、これらの ESLint ルールを有効にする(少なくとも警告として)ことをお勧めします。

  • no-fallthrough:これにより、一般的なユースケースをサポートしながら、ユーザーが switch case の最後に誤って break ステートメントを忘れることを防ぎます。
  • no-case-declarations:これにより、新しいブロックでそのケースをラップせずに、switch case に字句スコープ宣言(letconst)が導入されるのを防ぎます。そうしないと、異なるケースの宣言が競合する可能性があります。

また、eslint-plugin-fb-flow の一部として、Flow Enum に固有のルールがいくつかあります。

  • use-flow-enums:enum のような Object.freeze および keyMirror の使用を、代わりに Flow Enum に変換することを提案します。
  • flow-enums-default-if-possible:メンバー名と同一の指定された値を持つ文字列 enum を、デフォルトの enum に自動修正します。
  • no-flow-enums-object-mapping:オブジェクトリテラルの代わりに、enum 値を他の値にマッピングするために、switch を持つ関数を使用することを提案します。