Skip to content

Phase 7: Language Host を isolated EH に移動 + FlatBuffers 導入 #246

Description

@j4rviscmd

目的

Phase 0-5 の Language Host(renderer → Rust プロセス)を isolated EH(Phase 6)に移動し、Rust↔EH wire に FlatBuffers を導入する。

前提作業(Phase 6 #245 から引き継ぎ): リソース分離 + アクティベート検証

Phase 6 で判明: isolated EH のプロセス起動・myExtensions・handshake は成功するが、拡張のアクティベートが silent に失敗する。原因は EH プロセス間のリソース分離(logsLocation / workspaceStorage)未対応で、workspaceStorage lock 競合が疑われる(exthost.log に3 EH が同じ lock を "Skipping acquiring lock" するログ)。

本 Phase の本来作業に先立ち、以下を完了すること(これができないと Language Host 移動もアクティベートしない):

  • isolated EH の logsLocation を LocalProcess から分離(extHostLogsPath の kind 別生成)
  • isolated EH の workspaceStorage を分離(lock 競合の解消)
  • 検証基準: vscode.typescript-language-featurescoderm.languageHost.isolatedExtensions に指定し、.ts ファイルで定義ジャンプ / hover が isolated EH で動くこと(Phase 6 の未達受入基準の回収)

スコープ

  • Language Host の MessagePort を renderer から isolated EH に転送
  • FlatBuffers を Rust↔EH wire に導入(JSON を置き換え、フレームヘッダー [reqId(4)][len(4)] は維持)
  • 新規 extHostLanguageHostService.ts(EH 側 port owner + request multiplexer)
  • languageFeatures.ts を renderer と EH で共有可能な位置へ移動
  • languageHostConfiguration.ts を renderer 侧 provider 登録から「isolated EH 有効化」に変更

前提: Phase 6.5 スパイク

Electron utilityProcess.postMessage で MessagePortMain を utilityProcess に転送できるか検証(VS Code 1.122 の Electron バージョン)。これが Phase 7 のトポロジーの前提。もし動かない場合、fallback は EH が acquirePort(responseChannel, nonce) パターンで Rust host の port を取得。

FlatBuffers スキーマ(案)

  • rust/schemas/message.fbs に型付きスキーマ(DocumentOpen, HoverRequest, DefinitionResult 等)
  • rust/crates/language-host-protocol/ に生成コード
  • renderer/EH 側に TS 生成コード

依存

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions