コントリビュートとソースからのビルド

このページはコントリビューター向けです。通常、VS Code ユーザーはホストとサイドカーが同梱された Marketplace 拡張機能をインストールしてください。

前提条件

  • rustup でインストールした Rust stable
  • .NET 10 SDK(リポジトリでは 10.0.203 を固定し、互換性のあるロールフォワードを許可しています)
  • Node.js 20 以降
  • Git

一部のプロファイラーテストには、グローバルツールの dotnet-tracedotnet-countersdotnet-dump も必要です。

Dev Container

同梱の dev container には、プロジェクトで使用する Rust、.NET、Node、テストツールが用意されています。VS Code でリポジトリを開き、Dev Containers: Reopen in Container を選択します。

リポジトリ構成

SharpLsp/
├── Cargo.toml                    # ルートの Rust ワークスペースマニフェスト
├── src/
│   ├── sharplsp/                 # Rust ホスト、ビルドスクリプト、Rust E2E テスト
│   ├── sidecars/                 # C#、F#、共有 .NET サイドカー/テスト
│   ├── editors/
│   │   ├── vscode/               # VS Code 拡張機能
│   │   ├── zed/                  # Zed 連携のソース
│   │   └── rider/                # Rider 連携のソース
│   ├── examples/                 # サンプルソリューションと設定
│   ├── fixtures/                 # テスト用および実環境用フィクスチャ
│   └── website/                  # Eleventy ドキュメントサイト
├── docs/                         # 技術仕様と計画
└── tools/                        # ビルド、パッケージング、カバレッジ、共有 make 用ヘルパー

ビルドとテスト

コマンドはリポジトリルートで実行します。

# Rust ホスト
cargo build
cargo clippy --all-targets --all-features
cargo test

# .NET サイドカー
dotnet test src/sidecars/SharpLsp.Sidecars.sln

# VS Code 拡張機能
npm --prefix src/editors/vscode ci
npm --prefix src/editors/vscode run lint
npm --prefix src/editors/vscode run package

# ウェブサイト
npm --prefix src/website ci
npm --prefix src/website run build
npm --prefix src/website test

拡張機能のエンドツーエンドテストスイートは、実際の SharpLsp バイナリをステージングし、VS Code テストホストを起動します。TypeScript のチェックより負荷が高いため、完全なマトリックスについてはリポジトリの Make ターゲットと CI ワークフローを信頼できる情報源として使用してください。

アーキテクチャ

SharpLsp には 3 つのランタイム層があります。

  • Rust LSP ホスト
  • Roslyn C# サイドカー
  • FCS F# サイドカー

IPC は、Windows では名前付きパイプ、Linux/macOS では Unix ドメインソケット上の MessagePack を使用します。層をまたぐ動作を変更する前に、アーキテクチャを読んでください。

ドキュメントのソース

公開ウェブサイトのドキュメントは src/website/src/docs にあり、日本語版と簡体字中国語版はそれぞれ src/website/src/ja/docssrc/website/src/zh/docs にあります。

技術的な動作仕様は docs/specs に、実装計画は docs/plans にあります。ユーザーから見える動作を変更するときは、公開ドキュメントと両方の翻訳を更新してください。