MCPcopy Index your code
hub / github.com/Nimblesite/SharpLsp

github.com/Nimblesite/SharpLsp @v0.12.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.12.0 ↗ · + Follow
3,354 symbols 11,172 edges 299 files 987 documented · 29%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

SharpLsp

Open-source, editor-agnostic .NET language tooling for C# and F#.

Available today in VS Code. Rider, Zed, Neovim, Helix, and Emacs support is on the way.

Any Editor

Use the editor you already like. SharpLsp provides the same C# and F# intelligence behind the scenes.

C# + F#

Roslyn powers C# semantics. FSharp.Compiler.Service powers F#. F# is a first-class target, not a bolt-on.

No Lock-In

MIT licensed. No per-seat licenses, no Windows VM requirement, no editor-specific language engine.

SharpLsp is building the .NET development stack that should already exist: Visual Studio/Rider-grade language intelligence, solution awareness, diagnostics, refactoring, package management, debugging, and profiling without forcing every developer into the same IDE.

Why This Exists

.NET tooling is powerful, but the experience is fragmented:

  • Visual Studio still sets the benchmark for .NET tooling, but it is Windows-only.
  • C# Dev Kit is tied to VS Code, carries enterprise licensing constraints, and does not replace Visual Studio's profiler or performance tooling.
  • Rider is excellent, but its .NET intelligence lives inside Rider and cannot be reused by the rest of your team's editors.
  • F# too often trails behind C# instead of receiving equal first-class tooling.
  • Neovim, Zed, Helix, Emacs, and other editors are left stitching together partial community workflows.

SharpLsp treats language tooling as infrastructure. The editor should be a preference, not the place where the .NET language engine is trapped.

Architecture

SharpLsp is split into three parts:

  • Rust host: owns editor communication, request routing, virtual files, tree-sitter syntax work, and sidecar lifecycle.
  • C# sidecar: hosts Roslyn for semantic C# features.
  • F# sidecar: hosts FSharp.Compiler.Service for semantic F# features.

That split keeps the editor protocol fast and portable while letting the .NET compilers do the semantic work they are built for.

Install

VS Code

Install the SharpLsp extension from the VS Code Marketplace. The extension ships with the SharpLsp engine and both sidecars — no Rust toolchain or separate install required.

Other editors

Rider, Zed, Neovim, Helix, and Emacs support is coming soon.

Documentation

Full documentation is available at sharplsp.dev/docs.

For the full argument behind the project, read Why .NET Needs Editor-Agnostic Tooling.

Contributing

Want to build from source or contribute? See the Contributing guide.

License

MIT

Extension points exported contracts — how you extend this code

HasTextDocumentPosition (Interface)
Trait for extracting text document position from LSP params. [2 implementers]
src/handlers.rs
RestoreOutcome (Interface)
Install/uninstall responses that may trigger a background restore. [2 implementers]
src/nuget/handlers.rs
Trackable (Interface)
* Tracked signals during an active effect run. Each signal registers itself * via the `trackable` hook passed to `track [1 …
editors/vscode/src/signals.ts
ForgeLsp4jServer (Interface)
* Custom LSP server interface for forge-lsp's forge/ extensions. * * JetBrains's LSP API lets us override `LspServerDe
editors/rider/src/main/kotlin/com/forgelsp/rider/lsp/ForgeLsp4jServer.kt
XmlRefElement (Interface)
Shape emitted by fast-xml-parser for a PackageReference/ProjectReference element.
editors/vscode/src/dependencies.ts
ForgeTreeNode (Interface)
* Base contract for every node in the Forge Solution tree. * * Nodes own their own: * - rendering (icon + label + t
editors/rider/src/main/kotlin/com/forgelsp/rider/toolwindow/nodes/ForgeTreeNode.kt
XmlItemGroup (Interface)
Shape emitted by fast-xml-parser for an ItemGroup element.
editors/vscode/src/dependencies.ts
XmlProject (Interface)
Shape emitted by fast-xml-parser for a Project element.
editors/vscode/src/dependencies.ts

Core symbols most depended-on inside this repo

request
called by 263
tests/e2e_modules/mod.rs
wait_with_timeout
called by 255
tests/e2e_modules/mod.rs
shutdown_and_exit
called by 253
tests/e2e_modules/mod.rs
start
called by 179
src/profiler/trace.rs
iter
called by 148
src/vfs.rs
open_document
called by 148
tests/e2e_modules/mod.rs
initialize
called by 137
tests/e2e_modules/mod.rs
get
called by 112
src/nav_cache.rs

Shape

Function 1,665
Method 1,157
Class 403
Interface 113
Enum 16

Languages

Rust42%
C#28%
TypeScript23%
Kotlin7%

Modules by API surface

src/workspace_symbols.rs62 symbols
editors/vscode/src/profiler.ts56 symbols
tests/nuget_e2e.rs52 symbols
src/profiler/heap_diff.rs47 symbols
src/sidecar/manager.rs43 symbols
src/semantic.rs43 symbols
editors/vscode/src/tree.ts43 symbols
sidecars/SharpLsp.Sidecar.CSharp.Tests/WorkspaceManagerFeatureCoverageTests.cs41 symbols
editors/vscode/src/nuget-browser.ts41 symbols
src/sort_members.rs37 symbols
sidecars/SharpLsp.Sidecar.CSharp.Tests/WorkspaceManagerExtraCoverageTests.cs35 symbols
src/profiler/object_inspection.rs34 symbols

For agents

$ claude mcp add SharpLsp \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact