Skip to main content

Language Server Protocol implementation for SystemRDL 2.0 — diagnostics, hover, goto-def, completion, semantic tokens, and the full LSP feature surface (powered by systemrdl-compiler)

Project description

systemrdl-lsp

Language Server Protocol implementation for SystemRDL 2.0 — backed by systemrdl-compiler and pygls. Editor-agnostic; ships the full LSP feature surface most tools have for mainstream languages.

Install

pip install systemrdl-lsp
# or
uv pip install systemrdl-lsp

The server speaks LSP over stdio. Editor integrations launch the systemrdl-lsp CLI and pipe.

Use it from your editor

VSCode / VSCodium / Cursor / Theia

Install the SystemRDL Pro extension (also on Open VSX). The extension supervises this LSP for you — restart, crash recovery, the lot.

Neovim (nvim-lspconfig)

require'lspconfig.configs'.systemrdl_lsp = {
  default_config = {
    cmd = { 'systemrdl-lsp' },
    filetypes = { 'systemrdl' },
    root_dir = require'lspconfig.util'.root_pattern('peakrdl.toml', '.git'),
    settings = {
      ['systemrdl-pro'] = {
        includePaths = {},   -- list of dirs searched by `include
        includeVars = {},    -- $VAR / ${VAR} substitution in include paths
      },
    },
  },
}
require'lspconfig'.systemrdl_lsp.setup{}

Helix

Add to ~/.config/helix/languages.toml:

[language-server.systemrdl-lsp]
command = "systemrdl-lsp"

[[language]]
name = "systemrdl"
scope = "source.rdl"
file-types = ["rdl"]
language-servers = ["systemrdl-lsp"]

Emacs (eglot)

(add-to-list 'eglot-server-programs '(systemrdl-mode . ("systemrdl-lsp")))

Feature surface

Implemented and shipped in v0.15.0:

  • Live diagnostics — 300 ms debounce, 10 s timeout fallback, last-good cache, per-URI bucketing for `included files (clear-on-resolve cycle).
  • Hover — instance address/width/access for regs, parameter values for parametrized types, bridge flag for addrmaps, (← default at line N) annotation when a property comes from a default or dynamic assignment.
  • Goto-definition (F12 / Ctrl-click) — top-level types, instance names (signals, registers), reference paths like top.regfile.CTRL.enable (segment-by-segment), cross-file via `include.
  • Find references (Shift+F12) — every instantiation of a type, cross-file.
  • Rename (F2) — workspace-wide, refuses on collision.
  • Completion — ~85 keywords / properties / access values + user-defined types + user-defined properties. Context-aware narrowing: after sw = only access modes, after addressing = only compact / regalign / fullalign.
  • Document symbols / outlineaddrmap → regfile → reg → field.
  • Folding ranges, inlay hints (resolved absolute address ghost-grey at end-of-line), CodeLens (📊 N regs · 0xS..0xE summary above every addrmap).
  • Workspace symbols (Ctrl+T) with optional pre-index for cross-file search.
  • Type hierarchy — subtypes ≡ instances of the type.
  • Document links on `include "..." paths.
  • Document highlight, selection range, signature help inside #(...).
  • Code action — quick-fix "Add = 0 reset value" on field declarations missing a reset.
  • Document formatting — conservative whitespace normaliser.
  • Address conflict warnings — per-addrmap-scoped, skips reused-type bodies.
  • Semantic tokens — distinguishes properties / values / types beyond TextMate scopes.

The custom rdl/elaboratedTree JSON-RPC method powers the memory-map viewer in the VSCode extension and the standalone rdl-viewer CLI; the schema lives at schemas/elaborated-tree.json.

Configuration

Setting Default What
systemrdl-pro.includePaths [] Directories searched by `include. Auto-discovered from peakrdl.toml; sibling-directory fallback.
systemrdl-pro.includeVars {} $VAR / ${VAR} substitution in `include "..." paths.

One-shot CLI

systemrdl-lsp also exposes a non-LSP one-shot for tooling:

python -m systemrdl_lsp.dump my-chip.rdl > tree.json

Emits the full elaborated tree (schema: schemas/elaborated-tree.json) on stdout. Used by the standalone rdl-viewer CLI to drive the browser-served viewer without an editor.

Compatibility

  • Python: 3.10+
  • perl on PATH (optional) unlocks the SystemRDL Perl preprocessor (clause 16.3) for parametric register generation.

Source

github.com/seimei-d/systemrdl-pro (monorepo: LSP + viewer + VSCode extension).

License

MIT — see LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

systemrdl_lsp-0.15.1.tar.gz (62.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

systemrdl_lsp-0.15.1-py3-none-any.whl (60.7 kB view details)

Uploaded Python 3

File details

Details for the file systemrdl_lsp-0.15.1.tar.gz.

File metadata

  • Download URL: systemrdl_lsp-0.15.1.tar.gz
  • Upload date:
  • Size: 62.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for systemrdl_lsp-0.15.1.tar.gz
Algorithm Hash digest
SHA256 8fcbb99fa0ed0e1223fa566b66a931321b53349e085ac05aeaf6587dcc04948b
MD5 32a60fd652f908c58739475cac5f597a
BLAKE2b-256 1028051d3e7bf0d0107fcd7ed2d761f0126e72341d95ac8da7f11d1f23391dfb

See more details on using hashes here.

Provenance

The following attestation bundles were made for systemrdl_lsp-0.15.1.tar.gz:

Publisher: lsp-publish.yml on seimei-d/systemrdl-pro

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file systemrdl_lsp-0.15.1-py3-none-any.whl.

File metadata

  • Download URL: systemrdl_lsp-0.15.1-py3-none-any.whl
  • Upload date:
  • Size: 60.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for systemrdl_lsp-0.15.1-py3-none-any.whl
Algorithm Hash digest
SHA256 aa15f4bbbdba6f8b6adbcb0ea6a7a442c62f05aee3e0b163965552d388f8053f
MD5 f1ee822cb0bc7dee52e46b7518ad7d1d
BLAKE2b-256 94fe92fbfa4f0d47aea227878806dced6799e0dc73b29386123dcd4063f471eb

See more details on using hashes here.

Provenance

The following attestation bundles were made for systemrdl_lsp-0.15.1-py3-none-any.whl:

Publisher: lsp-publish.yml on seimei-d/systemrdl-pro

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page