アーキテクチャ

SharpLsp は、軽量な構文処理と豊かなセマンティック解析を分離する 3 層アーキテクチャで構築されています。
第 1 層 — Rust LSP ホスト
ホストプロセスは次を担当します。
- LSP プロトコル: stdio 上の JSON-RPC。LSP 3.17 の動作を対象にします
- 仮想ファイルシステム(VFS): 変更追跡付きのメモリ上ファイル状態
- tree-sitter 解析: サブミリ秒級のインクリメンタル C# 解析。F# 文法統合は進行中で、F# の構文機能はサイドカーへルーティングされます
- salsa キャッシュ: インクリメンタル計算。変更されたものだけを再処理します
- リクエストルーティング: 高速な構文リクエストは Rust に残し、セマンティックリクエストはサイドカーへ送ります
第 2 層 — C# サイドカー(Roslyn)
長時間動作する .NET 10 プロセスで、次を提供します。
- ソリューションとプロジェクトを読み込む MSBuildWorkspace
- Roslyn ベースの C# 機能: 補完、診断、コードアクション、リファクタリング
- 逆コンパイル済みソースへの移動に使う ICSharpCode.Decompiler
- 名前付きパイプ / Unix ドメインソケット上の MessagePack シリアライズ
第 3 層 — F# サイドカー(FCS)
F# サポート用の独立した .NET 10 プロセスです。
- 型チェックと解析を行う FSharpChecker
- プロジェクトシステム統合のための Ionide.ProjInfo
- 追加診断のための FSharpLint
IPC プロトコル
Rust ホストと .NET サイドカーの通信には次を使います。
- MessagePack バイナリシリアライズ(小さく高速)
- 名前付きパイプ(Windows)または Unix ドメインソケット(Linux、macOS)
- 4 バイト little-endian 長プレフィックスフレーミング
- 目標: 往復オーバーヘッド <500µs
リクエストルーティング
| カテゴリ | ハンドラー | レイテンシ目標 | 例 |
|---|---|---|---|
| 構文のみ | Rust (tree-sitter) | <5ms | documentSymbol、foldingRange |
| セマンティック | サイドカー | <200ms | completion、hover、definition |
| ハイブリッド | Rust + サイドカー | <100ms | semanticTokens |
| キャッシュ済み | Rust (salsa) | <1ms | 変更されていない文書への繰り返しリクエスト |