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.3.tar.gz (130.0 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.3-py3-none-any.whl (110.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: systemrdl_lsp-0.21.3.tar.gz
  • Upload date:
  • Size: 130.0 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.3.tar.gz
Algorithm Hash digest
SHA256 54cbf562943aedf323d1c0899ee6514cb22c2277d15733af6d3c250bb5386287
MD5 7ecf0aa8951eddc7384c184e504f4181
BLAKE2b-256 f8eec19f452cf52b614b2838a8bc65729daa3f16b9b4b30b3c4218d36c62f558

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: systemrdl_lsp-0.21.3-py3-none-any.whl
  • Upload date:
  • Size: 110.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.21.3-py3-none-any.whl
Algorithm Hash digest
SHA256 6fe3536ffbfa91748c5d3f8b26ff57aa9cebf8e15fd03a46f83d316ffb79c6c5
MD5 498c647a48eabb6a4a8f5a3df8285e88
BLAKE2b-256 0df886cfe0bc3f5cdc37b49a203efc3d2dec77f77a3c5bc3dea89779ec94dfea

See more details on using hashes here.

Provenance

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