unifiedプラグインアーキテクチャの再定式化

まず、ソフトウェアコンポネントを、

  1. プラグイン
  2. ドライバー

に分ける。プラグインの種類を、

  1. パーザー
  2. トランスフォーマー
  3. コンパイラ〈シリアライザー | ストリンギファイア〉

の3種に分ける。

プラグインは、

  1. アタッチャー
  2. パフォーマー

に2つの部分からなる。

プラグインの種類ごとにアタッチャーとパフォーマーが必要。

種別 アタッチャー パフォーマー
パーザー パーザー・アタッチャー パーザー・パフォーマー
トランスフォーマー トランスフォーマー・アタッチャー トランスフォーマー・パフォーマー
コンパイラ コンパイラ・アタッチャー コンパイラ・パフォーマー

それぞれのインターフェイスは unified の index.d.ts に書いてあるが、明示的な説明がみつけにくい。

Processorという概念
  • 型: Processor<ParseTree, CurrentTree, CompileTree, CompileResult>

型パラメータの意味:

  1. ParseTree: The node that the parser yields (and `run` receives).
  2. CurrentTree: The node that the last attached plugin yields.
  3. CompileTree: The node that the compiler receives (and `run` yields).
  4. CompileResult: The thing that the compiler yields.

言い方を変えると:

  1. parser : ? → ParseTree, run : ParseTree → ?
  2. lastAttached : ? → CurrentTree
  3. compiler : CompileTree → ?, run : ? → CompileTree
  4. compiler : CompileTree → CompileResult

まとめると:

? -(parser)→ ParseTree -(run)→ CompileTree -(compiler)→ CompileResult

プロセッサは原則的にドライバーのことで、次のメソッドを持つ。

  1. parse(input) : ParseTree
  2. stringify(input) : CompileResult なぜか名前が compile ではない
  3. run(input, callback) : void 結果をコールバックで受け取る、なぜか名前が transform ではない
  4. run(node, file?) : Promise プロミスが戻る
  5. runSync(node, file?) : CompileTree 同期戻り値が変える。
  6. process(input, callback) : void 結果をコールバックで受け取る
  7. プロミスが戻るバージョンがない
  8. processSync(node, file?) : CompileTree 同期戻り値が変える。

結果の受け取り方として:

  1. 同期戻り値
  2. 非同期コールバック
  3. 非同期プロミス

これらのインターフェイスがキレイに揃ってない。

ネーミング

次のようにすればキレイになる。

  • 名前なし → 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 同期

しかし、実際はそうなってないでグチャグチャ。

プラグインとドライバー

プラグインとドライバーの概念がゴッチャになっている。次のように分類すべき。

  1. バニラドライバー: プラグインを何も内蔵してないドライバー
  2. パーザードライバー: パーザーを内蔵したドライバー
  3. トランスフォーマードライバー: パーザーとトランスフォーマーを内蔵したドライバー
  4. フルドライバー: パーザー、トランスフォーマー、コンパイラ〈ストリンギファイア〉を内蔵したドライバー

後で整理する。