Releases: lazyverilog/LazyVerilog
Release list
v2.1.0
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 aroot_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 = falseis now respected.- Rename correctly expands an implicit
.nameport 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.tomlor 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.
initializenow reports the server name and version.
Documentation
- Added Korean and Simplified Chinese READMEs, a comparison table, and an architecture diagram.
v2.0.1
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,
extendsclauses, package members
spelledpkg::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
`includepath to the included file, a named
parameter override to the child module's parameter, andsuper.newto the
base class constructor; a constructor is located atnewrather than at the
functionkeyword. - 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. genvardeclarations,parameter typedeclarations,externmethod
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-lintaccepts--maxerrorto set slang's compilation error
limit.
Documentation
- The AutoWire example that contradicted the documented output/inout-only rule
is corrected.
v2.0.0
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::createthrough its type alias. - Packages: resolve and rename package members, parameters, and package-qualified types across every importing file.
- Class scope: class-scoped typedefs,
externmethod prototypes, and virtual-interface fields. - Added
textDocument/documentSymbol. - Added CLI
--versionand--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 honorenableandseverity.- Lint no longer reports findings that describe macro-body code.
- Formatter applies
function_call.space_before_parentonew()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
LazyVerilog v1.3.6 Release Notes
Two correctness fixes.
Fixes
v1.3.5
LazyVerilog v1.3.5 Release Notes
Faster cold project-index startup, new CLI binaries, and filelist/indexing fixes.
Features
- Add
lazyverilog-lintandlazyverilog-rtltreeCLI binaries, published alongsidelazyverilog-fmtin 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_threadsandnice_valueconfig keys; both had exactly one useful value. Existing config files with these keys still load.
v1.3.4
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 (
.ffiles that include other.ffiles).
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
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
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
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
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.vhfiles. - Added automatic
lazyverilog-lspbinary 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.
