まず、ソフトウェアコンポネントを、
- プラグイン
- ドライバー
に分ける。プラグインの種類を、
- パーザー
- トランスフォーマー
- コンパイラ〈シリアライザー | ストリンギファイア〉
の3種に分ける。
プラグインは、
- アタッチャー
- パフォーマー
に2つの部分からなる。
プラグインの種類ごとにアタッチャーとパフォーマーが必要。
種別 | アタッチャー | パフォーマー |
---|---|---|
パーザー | パーザー・アタッチャー | パーザー・パフォーマー |
トランスフォーマー | トランスフォーマー・アタッチャー | トランスフォーマー・パフォーマー |
コンパイラ | コンパイラ・アタッチャー | コンパイラ・パフォーマー |
それぞれのインターフェイスは unified の index.d.ts に書いてあるが、明示的な説明がみつけにくい。
Processorという概念
- 型: Processor<ParseTree, CurrentTree, CompileTree, CompileResult>
型パラメータの意味:
- ParseTree: The node that the parser yields (and `run` receives).
- CurrentTree: The node that the last attached plugin yields.
- CompileTree: The node that the compiler receives (and `run` yields).
- CompileResult: The thing that the compiler yields.
言い方を変えると:
- parser : ? → ParseTree, run : ParseTree → ?
- lastAttached : ? → CurrentTree
- compiler : CompileTree → ?, run : ? → CompileTree
- compiler : CompileTree → CompileResult
まとめると:
? -(parser)→ ParseTree -(run)→ CompileTree -(compiler)→ CompileResult
プロセッサは原則的にドライバーのことで、次のメソッドを持つ。
- parse(input) : ParseTree
- stringify(input) : CompileResult なぜか名前が compile ではない
- run(input, callback) : void 結果をコールバックで受け取る、なぜか名前が transform ではない
- run(node, file?) : Promise プロミスが戻る
- runSync(node, file?) : CompileTree 同期戻り値が変える。
- process(input, callback) : void 結果をコールバックで受け取る
- プロミスが戻るバージョンがない
- processSync(node, file?) : CompileTree 同期戻り値が変える。
結果の受け取り方として:
- 同期戻り値
- 非同期コールバック
- 非同期プロミス
これらのインターフェイスがキレイに揃ってない。
ネーミング
次のようにすればキレイになる。
- 名前なし → ParsingSource
- ParseTree → ParsedTree
- stringify → compile 、または Compile → Stringify
- run → transform
- CompileTree → CompilingTree
- CompileResult → CompiledResult
? -(parser)→ ParsedTree -(transform)→ CompilingTree -(compiler)→ CompiledResult
メソッド名は:
- parse
- parse コールバック
- parseAsync プロミス
- parseSync 同期
- stringify
- stringify コールバック
- stringifyAsync プロミス
- stringifySync 同期
- transform
- transform コールバック
- transformAsync プロミス
- transformSync 同期
- process
- process コールバック
- processAsync プロミス
- processSync 同期
しかし、実際はそうなってないでグチャグチャ。
プラグインとドライバー
プラグインとドライバーの概念がゴッチャになっている。次のように分類すべき。
- バニラドライバー: プラグインを何も内蔵してないドライバー
- パーザードライバー: パーザーを内蔵したドライバー
- トランスフォーマードライバー: パーザーとトランスフォーマーを内蔵したドライバー
- フルドライバー: パーザー、トランスフォーマー、コンパイラ〈ストリンギファイア〉を内蔵したドライバー
後で整理する。