Skip to content

Repository files navigation

VB.NET Language Support

Open-source VB.NET language tooling built around Roslyn:

  • A VS Code extension: VB.NET Language Support
  • Standalone language server binaries for non-VS Code LSP clients
  • Thin editor adapters for non-VS Code clients (Neovim, Emacs)

License: MIT

Choose How To Use It

1. VS Code extension (recommended for most users)

2. Standalone language server binaries (non-VS Code clients)

Install as a global .NET tool (recommended):

dotnet tool install --global DNAKode.VbNet.Lsp

Or download from GitHub Releases:

  • Releases: https://github.com/DNAKode/vbnet-lsp/releases
  • Language server artifacts:
    • vbnet-language-server-win-x64.zip
    • vbnet-language-server-linux-x64.tar.gz
    • vbnet-language-server-osx-x64.tar.gz
    • vbnet-language-server-osx-arm64.tar.gz
  • VSIX artifacts:
    • vbnet-language-support-win32-x64.vsix
    • vbnet-language-support-linux-x64.vsix
    • vbnet-language-support-darwin-x64.vsix
    • vbnet-language-support-darwin-arm64.vsix

Use these with any LSP client that supports stdio or named pipes.

3. Editor adapters (thin wrappers)

Use editor-native adapters that launch the standalone language server:

  • Neovim adapter source: adapters/nvim/vbnet-lsp.nvim
  • Emacs eglot adapter source: adapters/emacs/vbnet-eglot

Packaging guidance for native channels is documented in docs/editor-packaging.md.

What You Get

  • Roslyn-backed semantic analysis and project loading (.sln, .slnf, .slnx, .vbproj)
  • Best-effort fallback support for old-style / non-SDK VB.NET Framework project files, including project-level imports, framework references, restored packages, WinForms application-framework startup artifacts, and common My.Application project-system symbols
  • Core language features: diagnostics, completion, hover, definition, references, rename, symbols
  • Advanced navigation: type definition, implementation, call hierarchy, type hierarchy
  • Editing support: formatting, semantic tokens, signature help, folding ranges, code actions, and Roslyn-backed Extract Method
  • Debugger integration in the VS Code extension via bundled netcoredbg

Current implementation details and roadmap are tracked in PROJECT_PLAN.md and docs/features.md.

Quick Start

VS Code

  1. Install the extension from the Marketplace.
  2. Open a folder containing a .sln or .vbproj.
  3. Start coding in .vb files.

Useful commands:

  • VB.NET: Select Workspace Context
  • VB.NET: Select Workspace Solution
  • VB.NET: Show Logs
  • VB.NET: Toggle LSP Trace
  • VB.NET: Reload Workspace

The status bar shows the active VB.NET context: a loaded solution, one selected project, all discovered projects in Workspace Dev Mode, or Select Context when multiple solutions are present and an explicit choice is needed. Restore and test commands follow the selected context when no active file gives a more specific project target.

For GitHub issue reports or shared logs, set vbnet.output.language to en-US to request English diagnostics and build output from the language server, .NET CLI, MSBuild, and Roslyn where supported.

Non-VS Code (LSP client)

  1. Install the global tool (dotnet tool install --global DNAKode.VbNet.Lsp) or download and extract the server artifact for your platform from Releases.
  2. Configure your editor/client to launch the server with --stdio.

Examples:

# Global tool
vbnet-ls --stdio

# Linux/macOS (app host)
./VbNet.LanguageServer --stdio

# Linux/macOS/Windows (dotnet host)
dotnet VbNet.LanguageServer.dll --stdio

# Windows (app host)
VbNet.LanguageServer.exe --stdio

The server also supports --pipe (named pipe transport), --logLevel, and --msbuildPath.

Prerequisites

  • .NET SDK 10.0 or later
  • For VS Code extension development: Node.js 18+
  • For VS Code users: VS Code 1.80+

Notes:

  • Dev containers / SSH / WSL are supported if .NET SDK is available in the runtime environment.
  • VS Code Web (vscode.dev / github.dev) is not supported.

Release Automation

GitHub Actions release automation is available in .github/workflows/release.yml and publishes:

  • Platform-specific standalone language server archives
  • Platform-specific VSIX packages
  • A GitHub Release containing all artifacts

The dotnet tool package (DNAKode.VbNet.Lsp, command: vbnet-ls) is built in .github/workflows/publish-dotnet-tool.yml and published to NuGet when NUGET_API_KEY is configured.

Editor adapters are validated separately in .github/workflows/editor-adapters.yml and are intended for editor-native distribution channels (for example, Neovim plugin managers and MELPA/package-vc for Emacs).

Downstream snapshot sync guidance (adapters + Claude plugin) is documented in docs/downstream-repositories.md.

The release workflow runs on tag push (v*) and can also be run manually with workflow_dispatch. For non-draft releases it publishes VSIX packages to the VS Code Marketplace after creating the GitHub Release.

Backend Model

The extension supports backend selection:

  • vbnet (default)
  • roslyn

Only one backend is active at a time by design (single active backend) to reduce regression risk.

The Roslyn backend currently uses stdio transport even when vbnet.server.transportType is set to auto or namedPipe. Roslyn named-pipe mode requires the client to provide the pipe name; the extension-managed pipe handshake is only used by the default vbnet backend.

For Roslyn packaging constraints (.roslyn + .roslyn-vb split), see docs/roslyn-packaging.md.

Documentation

Development and Testing

Build from source:

dotnet build src/VbNet.LanguageServer.Vb
dotnet test
cd src/extension && npm ci && npm run compile

For full workflows and exploratory harnesses, see:

Contributing

Issues, bug reports, docs improvements, and code contributions are welcome.

License

MIT - see LICENSE.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages