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.21.0.tar.gz (128.9 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.21.0-py3-none-any.whl (110.3 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: systemrdl_lsp-0.21.0.tar.gz
  • Upload date:
  • Size: 128.9 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.21.0.tar.gz
Algorithm Hash digest
SHA256 8a104091d27988bd3022217f57ba4117ba5f255e688eeafbff2850a65e0dda22
MD5 3e6ab54c20a94fbf9c17057abe3195cc
BLAKE2b-256 5c18a5701fdbd28836c71e0ab56a0d9ad2023057428fe9b2332ad41328bd7601

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: systemrdl_lsp-0.21.0-py3-none-any.whl
  • Upload date:
  • Size: 110.3 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.21.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1d7ecbbc58c7f2b69ae6956d40dfa0be4b4977a405abcb5e8fa31cadc6e80e24
MD5 d18338515d9a6ec0940372f96d544b9e
BLAKE2b-256 5c2c1c007266c9aac274b5c6a1fe2b9b3a4ec936f0cbbc770b8122b86e4b814b

See more details on using hashes here.

Provenance

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