microsoft / microsoft/TypeScript

CFA should consider branch flags

オープン
#20,497 コメント 4 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

Needs Proposal Suggestion
主要言語
Go
スター
111k
フォーク
14.3k
平均マージ
2日 4時間
マージ済み PR(30日)
132

説明

This is a suggestion to improve the CFA. It would be good if TypeScript considered branch flags when analysing code paths.

function f() {
    let text: string;
    let hasTakenVerySpecificBranch = false;
    if (0.5 < Math.random()) {
        if (0.5 < Math.random()) {
            if (0.5 < Math.random()) {
                hasTakenVerySpecificBranch = true;
                text = '';
            }
        }
    }
    if (!hasTakenVerySpecificBranch) {
        text = ''
    }
    console.log(text); // Error 'text' is used before assigned.
}

We assign text on all possible code paths above. And it shouldn't error above.

A branch flag is simply a boolean variable that is considered when doing the control flow analysis.

コントリビューションガイド

コントリビューションガイドを開く

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

調査の方向性

まず TypeScript の例を再現し、現在の definite-assignment エラーを確認します。コンパイラーの control-flow analysis の実装と、definite assignment および boolean narrowing に関する既存のテストを読みます。branch-flag 条件が組み込まれ、関連する control-flow の動作を後退させることなく、例を対象とするテストがある状態を完了とします。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
typescript
領域
compilers
issue の種類
機能追加
難易度
5/5
見積もり時間
1週間以上
活発さ
停滞
明瞭さ
おおむね明確
初心者へのやさしさ
30/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。