Skip to content

feat: add Deno language server support - #1778

Open
shiersa wants to merge 1 commit into
oraios:mainfrom
shiersa:feat/deno-language-server
Open

feat: add Deno language server support#1778
shiersa wants to merge 1 commit into
oraios:mainfrom
shiersa:feat/deno-language-server

Conversation

@shiersa

@shiersa shiersa commented Jul 29, 2026

Copy link
Copy Markdown

Summary

Adds a Deno language server backed by the Deno CLI's built-in deno lsp, serving TypeScript/JavaScript in Deno projects. Unlike the plain typescript-language-server it understands Deno module resolution (npm: / jsr: / https: imports) and the Deno.* global namespace.

It is experimental and must be selected explicitly via language_servers: [deno] — it overlaps the TypeScript server on file extensions (.ts/.tsx/.js/.jsx/…), so it is not auto-detected. Requires the deno CLI on PATH (it bundles the language server).

This is a fresh implementation against the current DependencyProvider architecture, following .serena/memories/adding_new_language_support_guide.md. (There is an older, stalled PR #1048 from before that refactor; this does not build on it and deliberately avoids the auto-detect / replace-TypeScript behaviour that overlapping extensions can't disambiguate.)

Changes

  • src/solidlsp/language_servers/deno_language_server.py — the language server (deno lsp, single-path dependency provider, TS-family language ids)
  • src/solidlsp/ls_config.pyDENO enum, file-extension matcher, factory wiring, experimental flag
  • test/solidlsp/deno/test_deno_basic.py + test/resources/repos/deno/test_repo/ — tests + a minimal Deno repo
  • pyproject.tomldeno pytest marker
  • .github/workflows/pytest.yml — the deno marker joins the other-langs batch, which now installs Deno via denoland/setup-deno
  • README.md, docs/01-about/020_programming-languages.md, src/serena/resources/project.template.yml, CHANGELOG.md — docs

Testing

Tests run in CI in the other-langs batch on all three OSes: language-server startup, cross-file definition, cross-file references, document symbols, full symbol tree, and two hover tests — one on a local function signature, one on Deno.cwd(), i.e. the Deno.* namespace resolution that is the reason to use this server over the plain TypeScript one. Wherever the deno CLI is absent the tests skip through the central conftest guard, following the existing pattern for toolchain-gated language servers.

Also verified locally against deno 2.9.0 (7 passed), along with ruff lint/format and ty type checks.

Checklist

  • This PR follows the guidelines in CONTRIBUTING.md regarding the scope of PRs (isolated addition of a new language server).
  • For changes that add features, I have added an entry to CHANGELOG.md.

@shiersa
shiersa force-pushed the feat/deno-language-server branch 2 times, most recently from 1af6e49 to d4b8bee Compare July 29, 2026 07:01
@shiersa
shiersa force-pushed the feat/deno-language-server branch 3 times, most recently from c473e95 to 9464d92 Compare August 3, 2026 16:58
@shiersa
shiersa force-pushed the feat/deno-language-server branch from 9464d92 to 227af27 Compare August 6, 2026 15:03
Add a Deno language server backed by the Deno CLI's built-in `deno lsp`,
serving TypeScript/JavaScript in Deno projects. Unlike the plain
typescript-language-server it understands Deno module resolution
(npm:/jsr:/https: imports) and the `Deno.*` global namespace.

It is experimental and must be selected explicitly via
`language_servers: [deno]`; it overlaps the TypeScript server on file
extensions, so it is not auto-detected. Requires the `deno` CLI on PATH.

Tests run in CI: the `deno` marker joins the other-langs batch, which now
installs Deno via denoland/setup-deno. Off-CI and wherever the CLI is
absent they skip through the central conftest guard, following the existing
pattern for toolchain-gated language servers. Hover is covered explicitly,
including hover on a `Deno.*` global, which is the capability this server
adds over the TypeScript one.
@shiersa
shiersa force-pushed the feat/deno-language-server branch from 227af27 to 7a87087 Compare August 6, 2026 15:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant