Contributing and Building from Source

This page is for contributors. VS Code users should normally install the Marketplace extension, which bundles the host and sidecars.

Prerequisites

  • Rust stable, installed with rustup
  • .NET 10 SDK (the repository pins 10.0.203 with compatible roll-forward)
  • Node.js 20 or newer
  • Git

Some profiler tests also require the dotnet-trace, dotnet-counters, and dotnet-dump global tools.

Dev Container

The included dev container supplies the Rust, .NET, Node, and test tooling used by the project. Open the repository in VS Code and choose Dev Containers: Reopen in Container.

Repository Layout

SharpLsp/
├── Cargo.toml                    # Root Rust workspace manifest
├── src/
│   ├── sharplsp/                 # Rust host, build script, and Rust E2E tests
│   ├── sidecars/                 # C#, F#, and shared .NET sidecars/tests
│   ├── editors/
│   │   ├── vscode/               # VS Code extension
│   │   ├── zed/                  # Zed integration source
│   │   └── rider/                # Rider integration source
│   ├── examples/                 # Example solutions and configuration
│   ├── fixtures/                 # Test and real-world fixtures
│   └── website/                  # Eleventy documentation site
├── docs/                         # Technical specifications and plans
└── tools/                        # Build, packaging, coverage, and shared make helpers

Build and Test

Run commands from the repository root.

# Rust host
cargo build
cargo clippy --all-targets --all-features
cargo test

# .NET sidecars
dotnet test src/sidecars/SharpLsp.Sidecars.sln

# VS Code extension
npm --prefix src/editors/vscode ci
npm --prefix src/editors/vscode run lint
npm --prefix src/editors/vscode run package

# Website
npm --prefix src/website ci
npm --prefix src/website run build
npm --prefix src/website test

The extension's end-to-end suite stages real SharpLsp binaries and launches a VS Code test host. It is heavier than the TypeScript checks; use the repository's Make targets and CI workflow as the source of truth for the complete matrix.

Architecture

SharpLsp has three runtime tiers:

  • the Rust LSP host;
  • the Roslyn C# sidecar;
  • the FCS F# sidecar.

IPC uses MessagePack over named pipes on Windows and Unix domain sockets on Linux/macOS. Read Architecture before changing cross-tier behavior.

Documentation Sources

Public website documentation lives under src/website/src/docs with Japanese and Simplified Chinese counterparts under src/website/src/ja/docs and src/website/src/zh/docs.

Technical behavior specifications live in docs/specs; implementation plans live in docs/plans. Update public docs and both translations whenever user-visible behavior changes.