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

このページはコントリビューター向けです。通常、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 を選択します。

リポジトリ構成

flowchart LR
    ROOT["SharpLsp/"]
    ROOT --> SRC["src/"]
    SRC --> EDITORS["editors/"]
    ROOT --> CARGO["Cargo.toml<br/>ルートの Rust ワークスペースマニフェスト"]
    ROOT --> DOCS["docs/<br/>技術仕様と計画"]
    ROOT --> TOOLS["tools/<br/>ビルド、パッケージング、カバレッジ、共有 make 用ヘルパー"]
    SRC --> HOST["sharplsp/<br/>Rust ホスト、ビルドスクリプト、Rust E2E テスト"]
    SRC --> SIDECARS["sidecars/<br/>C#、F#、共有 .NET サイドカー/テスト"]
    SRC --> EXAMPLES["examples/<br/>サンプルソリューションと設定"]
    SRC --> FIXTURES["fixtures/<br/>テスト用および実環境用フィクスチャ"]
    SRC --> WEBSITE["website/<br/>Eleventy ドキュメントサイト"]
    EDITORS --> VSCODE["vscode/<br/>VS Code 拡張機能"]
    EDITORS --> ZED["zed/<br/>Zed 連携のソース"]
    EDITORS --> RIDER["rider/<br/>Rider 連携のソース"]

ビルドとテスト

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

# 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 にあります。ユーザーから見える動作を変更するときは、公開ドキュメントと両方の翻訳を更新してください。