2020年に構築しているもの

Mar 10 2020
2020年の計画は、3つの領域をカバーしています。Flowは、エディター内診断(タイプエラー)、オートコンプリート、「定義への移動」などの豊富な編集およびコードブラウジング機能を提供する言語サーバーを提供します。私たちの焦点はVSCodeでクラス最高のエクスペリエンスを提供することにありますが、LSPを使用するエディターはFlowの言語サーバーを利用できます。
PexelsのAksonsatUanthoengによる写真

2020年の計画は、次の3つの領域をカバーしています。

  • VSCodeの編集とブラウジングエクスペリエンスの機能と応答性を向上させます
  • 型システムをよりシンプルで表現力豊かで正しいものにする
  • パフォーマンスの再チェックを維持しながら、ピークメモリ使用量を削減します

Flowは、エディター内診断(タイプエラー)、オートコンプリート、「定義への移動」などの豊富な編集およびコードブラウジング機能を提供する言語サーバーを提供します。私たちの焦点はVSCodeでクラス最高のエクスペリエンスを提供することにありますが、LSPを使用するエディターはFlowの言語サーバーを利用できます。

2020年には、編集とブラウジングのエクスペリエンスへの2種類の投資に焦点を当てます。まず、IDE機能の信頼性と応答性を引き続き改善します。次に、要望の多かったIntelliSense機能のサポートを追加します。

Flow言語サーバーは、最初の起動時に初期化する必要があり、大規模なリベースなどのイベントの後に再起動する必要があるため、常にすぐに応答するとは限りません。ほとんどの言語機能では、コードを編集している間、Flowサーバーが継続的に実行されている必要があります。可能な場合は、編集リクエストと参照リクエストを変換して、サーバーを必要とせずに完了できるようにします。また、Flowサーバーがそれ自体を再起動する必要がある状況を減らし続けます。

投資の2番目のセットは、最も要求の多いIntelliSense機能(パラメーター情報、クイック情報、およびクイック修正)のサポートを追加することから得られます。

  • パラメータ情報には、関数呼び出しを入力すると表示される署名ヘルプ(予想されるパラメータの数と種類)が含まれます。また、コード内のJSDocコメントから抽出されたパラメーターに関するドキュメントも示します。
  • クイック情報には、コード内の識別子にカーソルを合わせると宣言が表示されます。フローはすでに関数シグネチャを示しています。クイック情報のフォーマットを改善し、パラメーター情報と同様のドキュメントコメントを追加します。
  • 最初のクイックフィックス機能である「DidYouMean?」を追加しました。入力時にコード を修正することを提案します。たとえば、あなたが書いている場合foo.bar、オブジェクトにfooフィールドが名前の必要はありませんbarが、名前のフィールドを持っているbaz、クイックフィックスは、その提案を適用します。また、フローエラー抑制の追加と静的importステートメントの自動生成についても調査しています。

シンプルで表現力豊かで正確な、思慮深く設計された型システムは、開発者により良い体験を提供できると信じています。

  • シンプル:開発者は、フローがコード上でどのように動作するかを予測できますか?
  • 表現力:開発者は、フローによってブロックされることなく、必要なことを実行できますか?
  • 正解:開発者は、一般的なコストのかかるミスを回避するためにFlowに依存できますか?
  • thisin関数とメソッドを使用すると、暗黙的にany。として入力できるため、コードがチェックされないことがよくあります。使用anyは安全ではなく、Flowがエラーを報告するのを防ぎます。の入力を実装するthisと、フローはを使用するコードをチェックできるようになりますthis
  • 封印されていないオブジェクトタイプは、関数の空のオブジェクトリテラルとプロパティをモデル化するために使用されます。封印されていないオブジェクトを使用すると、いつでも新しいプロパティを書き込むことができます。これらは、複数のステートメント間でオブジェクトの初期化を有効にするなどのシナリオで役立ちます。ただし、Flowは、書き込みが一致しない、封印されていないオブジェクトからの読み取りをチェックしません。一般的な初期化パターンを注意深く追跡することにより、この不健全性に対処することに取り組みます。
  • フローの多くのユーティリティタイプのような、$ObjMapそして$PropertyType、対応する実行時の操作の意味を反映するものではありません。これらのタイプのファーストクラスのデザインを作成します。
  • フローエラーの抑制は非常に粗いです。$FlowFixMe1種類のエラーを抑制するためにコード行の上に追加すると、実際にはそのコードによって発生するすべてのエラーが抑制され、将来のエラーがマスクされる可能性があります。同じコード行に別のエラーを隠すことなく、特定のエラーを抑制できるエラーコードを設計しています。そして、サプレッションをエラーのプライマリ位置に移動し、定義にアタッチされたサプレッションが、その定義が使用されているエラーを非表示にしないようにします。
  • ジェネリック型と関数は現在、予測できない動作をしており、ジェネリック型パラメーターはスコープをエスケープでき、ジェネリック関数の呼び出しは呼び出しサイトから遠く離れた場所に新しい境界を蓄積できます。ジェネリック関数のエラーのより信頼性の高い検出、エスケープされた型パラメーターを防ぐためのテスト、関数呼び出しが適切に制約されていることを確認するためのチェックなど、ジェネリックの新しい動作を設計しています。

Flowチームは昨年、再チェック時間を70%短縮するなど、パフォーマンスを大幅に改善しました。Facebook開発者から、パフォーマンスの向上について圧倒的な肯定的なフィードバックを聞いています。JavaScriptコードベースが拡大しても、パフォーマンスを維持することを目指しています。また、あらゆる状況でフローのメモリ使用量を削減するよう取り組んでいます。

最後に

2020年に、Flowチームは、信頼性、機能の完全性、および喜びの業界標準に匹敵する開発者エクスペリエンスを提供します。この開発者エクスペリエンスの一環として、メモリ使用量と信頼性という基本事項を引き続き改善していきます。最も要望の多かったIDE編集およびブラウズ機能を提供します。また、Flowの型システムを拡張して、開発者が安全で正しいコードを簡単に記述できるようにします。

このブログ、GitHub、およびFlowtypeDiscordチャネルで連絡を取り合います。