-
Notifications
You must be signed in to change notification settings - Fork 1
PagageGeneratorで依存先モジュールの依存対象ファイルを生成対象にする #118
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
|
なるほど。 実装は難しそうだったので今度見ます。 |
omochi
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
よくわからない部分が多いので解説が欲しいです
|
@omochi 方針を見直し、改修しました。PRのdescriptionも更新しました。再度レビューをお願いします |
omochi
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ありがとうございます。
機能アイデアと実装方針良いと思います。
コードとロジックもわかりやすかったです。
変換対象のソースをスタックで持ってループして、
再訪問を防ぐためのチェックリストを合わせて持っているだけですね。
新しい変換対象ソースを見つけ出すところが、
TS側のインポート文の生成と連動してるのがわかりやすいです。
|
マージします |
課題
Core ← Entities ← Appのように依存関係があるコードベースにおいて。
Entitiesの一部の型に対してコード生成を試みたい場合に、もしEntitiesがCoreの型に依存している場合、現在はCoreも明示的にコード生成をする必要があります。
ここで、実際に必要なCoreの型はごく少数で、Coreの全ての型を生成対象にしたくはありません。
方針
PackageGeneratorはcontextと生成対象のmodulesをそれぞれ渡してコード生成を行うインターフェースとなっています。もし
modulesが依存している型がcontextに含まれていた場合、その型もコード生成の対象となるようにします。これにより、読み取りは広く行ってコード生成する範囲は狭くする、という運用が可能になります。
読み取りは未解決のシンボルなどを含められるため広く行うことができ、本当に必要な場面のみシンボルの解決が必要な形にすることで、C2TS導入の敷居を下げます。
変更内容
コード生成のロジックを全体的に改修し、以下の3つのステップに分けて実行します。
contextから全ての型をスキャンして、exportされるTSシンボルを収集するmodulesに指定された型についてTSへの変換を実行する。依存されたシンボルを2で作った辞書から調べ、まだ変換されてなければ変換キューに追加する。これをキューが空になるまで繰り返す。注意点として、変換は型単位ではなくファイル単位となっています。これは単にファイル内のシンボル間依存関係も調べる必要があってそこまで頑張れてないからです。