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.16.0.tar.gz (78.4 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.16.0-py3-none-any.whl (71.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: systemrdl_lsp-0.16.0.tar.gz
  • Upload date:
  • Size: 78.4 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.16.0.tar.gz
Algorithm Hash digest
SHA256 97b16f5c53a2f326cce61f7e9a2be681bc7c77b65682361e11d8fa2f0f9bf3ea
MD5 f80213aff906682a11c2e9ede3139a93
BLAKE2b-256 1319bdf91967917dd9abcca6515589fe033bb0d2f35cf4d0c89f4954adf4fe9d

See more details on using hashes here.

Provenance

The following attestation bundles were made for systemrdl_lsp-0.16.0.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.16.0-py3-none-any.whl.

File metadata

  • Download URL: systemrdl_lsp-0.16.0-py3-none-any.whl
  • Upload date:
  • Size: 71.4 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.16.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6c337be436620218440b9d47906a5f19fbff9db4dac29fcb44719251e439b23e
MD5 95aec027ba4538b598440d413f621c4d
BLAKE2b-256 4a49917d986c55a8d511e840a6d6036f0975056a6fa219dad461903a89c8aff2

See more details on using hashes here.

Provenance

The following attestation bundles were made for systemrdl_lsp-0.16.0-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