参与贡献与从源码构建

本页面面向贡献者。VS Code 用户通常应安装 Marketplace 扩展,其中已包含宿主和 sidecar。

先决条件

  • 通过 rustup 安装的 Rust stable
  • .NET 10 SDK(代码库固定使用 10.0.203,并允许兼容的前向滚动)
  • Node.js 20 或更高版本
  • Git

部分性能分析器测试还需要全局工具 dotnet-tracedotnet-countersdotnet-dump

开发容器

随附的开发容器提供项目使用的 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 端到端测试"]
    SRC --> SIDECARS["sidecars/<br/>C#、F# 和共享的 .NET sidecar/测试"]
    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 sidecar
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 有三个运行时层级:

  • Rust LSP 宿主;
  • Roslyn C# sidecar;
  • FCS F# sidecar。

IPC 在 Windows 上通过命名管道传输 MessagePack,在 Linux/macOS 上通过 Unix 域套接字传输。更改跨层级行为之前,请阅读架构

文档来源

面向公众的网站文档位于 src/website/src/docs,对应的日语和简体中文版本分别位于 src/website/src/ja/docssrc/website/src/zh/docs

技术行为规范位于 docs/specs;实现计划位于 docs/plans。每当用户可见的行为发生变化时,请同时更新公开文档和两种翻译。