😸

眠くなるまでTypeScriptのパッケージを眺める(Part1

2021/10/30に公開

TypeScriptパッケージをただ、だらだらと眺めた足跡を残すための記事です。
コマンドラインのtscの処理をみてく。

コマンドラインのオプションの参照
https://www.typescriptlang.org/docs/handbook/compiler-options.html

tscのentry pointはここ
https://github.com/microsoft/TypeScript/blob/fd620c93f6d13999225230e9f2da1be654b56c9e/src/executeCommandLine/executeCommandLine.ts#L628

渡されたargsがObjectがParseされる場所はここ
https://github.com/microsoft/TypeScript/blob/248d478956489a1d005f163d3b5060a9712835ee/src/compiler/commandLineParser.ts#L1459

コンパイル対象のtsファイルを指定した場合は、filenamesに格納されてく
https://github.com/microsoft/TypeScript/blob/248d478956489a1d005f163d3b5060a9712835ee/src/compiler/commandLineParser.ts#L1501

ここで、ビルドモードの場合は複合プロジェクトとなり以下の条件分岐に入る

ビルドモードではない場合は、こっちの関数
https://github.com/microsoft/TypeScript/blob/fd620c93f6d13999225230e9f2da1be654b56c9e/src/executeCommandLine/executeCommandLine.ts#L445

ちなみに、エラーなどのメッセージの管理はここ
https://github.com/microsoft/TypeScript/blob/abfd53750377e84bc5836d2453c623492f0cc22d/src/compiler/diagnosticMessages.json

コマンドラインの引数の最初のオプションにビルドオプションが指定されていないとエラーになる
https://github.com/microsoft/TypeScript/blob/fd620c93f6d13999225230e9f2da1be654b56c9e/src/executeCommandLine/executeCommandLine.ts#L447

コマンドラインの引数にエラーがある場合は、ここで終了
https://github.com/microsoft/TypeScript/blob/fd620c93f6d13999225230e9f2da1be654b56c9e/src/executeCommandLine/executeCommandLine.ts#L460

オプションに、init help version all が指定されている場合は、各オプションに沿った処理をして終了
https://github.com/microsoft/TypeScript/blob/fd620c93f6d13999225230e9f2da1be654b56c9e/src/executeCommandLine/executeCommandLine.ts#L464-L477

オプションでall指定しないとヘルプに、listfilesonly generateTrace locale あたりが載ってないんだなー。

listfilesonly オプションは、型定義を含め現状の構成ファイルで読み込まれるファイルを確認できるから困った時に重宝する

ここに書いてある通りにカレントディレクトリから親ディレクトリに向かって構成ファイルを探しに行く
https://github.com/microsoft/TypeScript/blob/fd620c93f6d13999225230e9f2da1be654b56c9e/src/executeCommandLine/executeCommandLine.ts#L508

コンパイル対象のファイルの指定がなくて、構成ファイルもみつからなければエラー
https://github.com/microsoft/TypeScript/blob/fd620c93f6d13999225230e9f2da1be654b56c9e/src/executeCommandLine/executeCommandLine.ts#L519

最終の構成ファイルはここで作られる
https://github.com/microsoft/TypeScript/blob/fd620c93f6d13999225230e9f2da1be654b56c9e/src/executeCommandLine/executeCommandLine.ts#L529

ここで、incrementalフラグが設定されているかを確認してる
https://github.com/microsoft/TypeScript/blob/fd620c93f6d13999225230e9f2da1be654b56c9e/src/executeCommandLine/executeCommandLine.ts#L561

そういえば、このフラグつかったことなかったな
結構効果あるものなんでしょうか。
https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-4.html#faster-subsequent-builds-with-the---incremental-flag
https://qiita.com/daishi/items/1b33f9c3d04f10a24f5b

フラグがあるときとないときで、呼び出す関数が変わるよう
https://github.com/microsoft/TypeScript/blob/fd620c93f6d13999225230e9f2da1be654b56c9e/src/executeCommandLine/executeCommandLine.ts#L562

https://github.com/microsoft/TypeScript/blob/fd620c93f6d13999225230e9f2da1be654b56c9e/src/executeCommandLine/executeCommandLine.ts#L570

ここからコンパイルの中身に入っていくので、続きは次回

Discussion