Skip to content

Releases: lazyverilog/LazyVerilog

v2.1.0

Choose a tag to compare

@github-actions github-actions released this 19 Sep 14:05

LazyVerilog v2.1.0 Release Notes

Faster startup and edits, and proper multi-project support.

Highlights

  • Multi-project workspaces. Each file now uses the nearest lazyverilog.toml, with its own defines, include directories, and settings. Neovim no longer needs a root_dir.
  • Correct module resolution across projects. When two projects define the same module name, go-to-definition, hover, Connect, references, and rename pick the one from the asking file's project. Semantic diagnostics are compiled per project.
  • Persistent index cache. Project indexing reuses unchanged files from an on-disk cache, so restarts are much faster. It is always on and no longer configurable; a leftover [index] section is ignored.

Performance

  • Faster project startup, using every available core.
  • Folding, inlay hints, hover, definition, and signature help stay responsive while you type, including while a reparse is still running.

Fixes

  • LSP positions now use UTF-16 columns, and UTF-8 is used when the client asks for it. This fixes wrong ranges on lines with non-ASCII characters.
  • Folding no longer runs past the end of the file and handles CRLF line endings.
  • [folding].enable = false is now respected.
  • Rename correctly expands an implicit .name port connection.
  • Formatter fixes for expression braces, attribute instances, escaped identifiers, and a macro call's trailing semicolon.
  • Corrupt or stale cache shards no longer crash or mislead the server, and a non-file path no longer aborts it.
  • Editing lazyverilog.toml or a filelist takes effect without restarting.
  • Connect, inlay hints, and Windows path handling fixes.
  • Control characters in file contents no longer break AutoFF/AutoWire replies.
  • initialize now reports the server name and version.

Documentation

  • Added Korean and Simplified Chinese READMEs, a comparison table, and an architecture diagram.

v2.0.1

Choose a tag to compare

@github-actions github-actions released this 10 Sep 17:13

LazyVerilog v2.0.1 Release Notes

Navigation, references, and project-index startup.

v2.0.0 brought UVM and class-based SystemVerilog into scope. This release is
about making navigation hold up on the shapes real designs are written in:
member access through interfaces, arrays, type aliases and hierarchical paths;
references that find every use of an inherited or cross-file member; and a
project index that no longer multiplies the cost of a package that includes
its whole library.

Highlights

  • Definition and references resolve member access through multi-level
    receivers, array elements, virtual interface handles, interface ports and
    modports, and type aliases.
  • References match inherited members, extends clauses, package members
    spelled pkg::name, and struct fields whose typedef lives in another file.
  • Hierarchical paths resolve to the generate block or signal they name,
    including indexed paths and signals reached through an instance.
  • Document symbols report macro-generated declarations at their invocation
    site, nest classes and named generate blocks, and give declarations their
    full body range.
  • Workspace symbols now cover class methods, package subroutines and typedefs,
    with ranked, capped, scope-filtered results.
  • Signature help resolves calls through an object handle and reads formals for
    package-qualified calls, including from closed project files.

Performance

  • A package that includes its library is sharded from one walk of its tree
    instead of one walk per included fragment. On a 320-file UVM design this cut
    project indexing from 12.9 s to 1.5 s at full CPU and from 16.5 s to 5.1 s on
    a single-core slice, with peak memory down from 492 MB to 158 MB. A 3988-file
    RTL corpus improved from 6.6 s to 2.4 s.
  • A shared header's directives-only projection is installed before an indexing
    burst fans out, so the header's bulk is read once rather than once per
    worker.
  • A parse and the headers it pulled in are recorded together, closing a race
    that could drop a shared header from the seed list mid-burst and send the
    next file back to reading it whole.
  • Member-access classification is kept off the request hot path.

Fixes

  • Definition resolves an `include path to the included file, a named
    parameter override to the child module's parameter, and super.new to the
    base class constructor; a constructor is located at new rather than at the
    function keyword.
  • Rename refuses an edit whose range does not cover the old name.
  • Subroutine and block declarations get their own identity, so a local name no
    longer collides with a module-level one.
  • genvar declarations, parameter type declarations, extern method
    prototypes in open buffers, and package imports written in a module header
    are all indexed.
  • References never claim a hierarchical member for the enclosing module, and a
    generate-block declaration is reported once instead of per elaboration.
  • Hover reports the real type of a macro-generated declaration, the correct
    field kind and enum member type, a symbol reached through a hierarchical
    path, and a generate-block signal from a closed file.
  • Completion follows nested member chains past the first dot and takes the
    document buffer from the include root.
  • AutoInst keeps an instance's parameter override and its original
    indentation; AutoWire anchors insertion on module-level declarations only.
  • Diagnostics publish one entry per problem instead of one per macro
    expansion.

CLI

  • lazyverilog-lint accepts --maxerror to set slang's compilation error
    limit.

Documentation

  • The AutoWire example that contradicted the documented output/inout-only rule
    is corrected.

v2.0.0

Choose a tag to compare

@github-actions github-actions released this 02 Sep 00:48

LazyVerilog v2.0.0 Release Notes

UVM and class-based SystemVerilog support.

LazyVerilog now resolves the constructs UVM testbenches are built from: class inheritance chains, package imports, macro-generated declarations, and factory type aliases. Definition, references, rename, hover, completion, and signature help work across the open buffer and closed project files.

Highlights

  • Class inheritance: resolve inherited members, base classes, and this./super. across files and packages.
  • Macro-heavy code: resolve declarations, macro arguments, and references inside macro bodies, including class members declared entirely by a macro.
  • UVM factory: resolve T::type_id::create through its type alias.
  • Packages: resolve and rename package members, parameters, and package-qualified types across every importing file.
  • Class scope: class-scoped typedefs, extern method prototypes, and virtual-interface fields.
  • Added textDocument/documentSymbol.
  • Added CLI --version and --compile-only.

Performance

  • A shared included header is parsed and indexed once, then projected to its includers as directives only.
  • Header include-fanout is deferred to typing idle, so includers are no longer reparsed on every keystroke.
  • Include directories are resolved once per project instead of once per parse.
  • Linting skips included text.

Fixes

  • [lint.function] and [lint.statement] now honor enable and severity.
  • Lint no longer reports findings that describe macro-body code.
  • Formatter applies function_call.space_before_paren to new() constructor calls.
  • Folding no longer shadows an instance fold with its parameter-list region.
  • File identity is normalized so open-buffer parsing survives symlinked and short-name paths.
  • Semantic diagnostics are published for version-untracked files.

v1.3.6

Choose a tag to compare

@github-actions github-actions released this 14 Aug 17:24

LazyVerilog v1.3.6 Release Notes

Two correctness fixes.

Fixes

  • Fix rename/references treating a module signal and a same-named struct field in an included header as one symbol, so renaming the signal no longer renames the field (fixes #30).
  • Fix instance inlay hints counting header #(...) parameters as ports, inflating the N/M ports coverage count (fixes #29).

v1.3.5

Choose a tag to compare

@github-actions github-actions released this 12 Aug 15:57

LazyVerilog v1.3.5 Release Notes

Faster cold project-index startup, new CLI binaries, and filelist/indexing fixes.

Features

  • Add lazyverilog-lint and lazyverilog-rtltree CLI binaries, published alongside lazyverilog-fmt in releases.

Performance

  • Cut cold project-index startup time: parallel indexing pool, per-included-header shards instead of one copy per includer, right-sized occurrence tables, and a mention filter built only when needed.
  • Reduce indexing CPU and memory further: cached source-file-id resolution, reused parse-config snapshots, skipped diagnostics on the background index path, and deduped the background indexing queue.

Fixes

  • Warn instead of silently ignoring unreadable or missing filelist entries.
  • Canonicalize paths for closed-file URIs and fix Windows command-line quoting in the RTL sweep.
  • Fix folding lookups that compared uncanonicalized document buffer paths.
  • Keep the project index snapshot alive while request handlers hold shard pointers into it.

Changed

  • Retire the background_compilation_threads and nice_value config keys; both had exactly one useful value. Existing config files with these keys still load.

v1.3.4

Choose a tag to compare

@github-actions github-actions released this 06 Aug 13:12

LazyVerilog v1.3.4 Release Notes

Package-scoped symbol resolution, nested filelists, and indexing fixes.

Features

  • Resolve package-scoped symbols (pkg::sym) in go-to-definition, hover, and find-references.
  • Support nested file lists (.f files that include other .f files).

Fixes

  • Fix filelist regressions: URI paths, backslashes, and duplicate entries.
  • Go-to-definition no longer picks the wrong symbol when an included function's formal arguments shadow module ports.
  • Index instances nested inside generate blocks.
  • Renaming a module port now updates both its declaration and body usages.
  • Package members are indexed once instead of twice.

v1.3.3

Choose a tag to compare

@github-actions github-actions released this 16 Jun 14:15

LazyVerilog v1.3.3 Release Notes

Go-to-definition bug fix.

Fixes

  • Go-to-definition now chooses the correct signal when a struct field and a module signal share the same name.

v1.3.2

Choose a tag to compare

@github-actions github-actions released this 15 Jun 12:06

LazyVerilog v1.3.2 Release Notes

Managed binary update fix.

This release makes VS Code and Neovim refresh LazyVerilog-managed server binaries when they are stale. Custom binaries configured explicitly or provided through PATH remain user-controlled and are not replaced.

v1.3.1

Choose a tag to compare

@github-actions github-actions released this 15 Jun 09:58

LazyVerilog v1.3.1 Release Notes

Windows fix.

This release fixes the Windows server binary. LazyVerilog commands and language features such as go-to-definition now start correctly on Windows in supported editors, including VS Code and Neovim.

v1.3.0

Choose a tag to compare

@github-actions github-actions released this 14 Jun 18:39

LazyVerilog v1.3.0 Release Notes

VS Code extension release.

LazyVerilog now includes a VS Code extension for SystemVerilog and Verilog editing. The extension starts the LazyVerilog language server, installs the matching server binary when needed, contributes syntax highlighting, exposes common LazyVerilog commands through the Command Palette, and adds VS Code UI for RTL hierarchy, Interface, and Connect workflows.

The VS Code package is bundled for Marketplace distribution, so the VSIX contains only the extension manifest, license, bundled runtime entry point, and syntax grammar files.

Highlights

  • Added VS Code language support for .sv, .svh, .v, and .vh files.
  • Added automatic lazyverilog-lsp binary resolution and release-binary installation with checksum verification.
  • Added Command Palette entries for linting, formatting, RTL tree, Interface, and Connect commands.
  • Added an RTL Hierarchy sidebar view with jump-to-definition support.
  • Added Interface webview panels for inspecting and editing instance connections.
  • Added a Connect wizard for guided cross-hierarchy wiring edits.
  • Bundled the VS Code extension for a small Marketplace-ready VSIX without shipping node_modules.
image