Skip to content

LSP Features ​

Standard Language Server Protocol features. None of these need configuration except where noted.

FeatureWhat it does
HoverKind, type, and documentation of the symbol under the cursor
Go to definitionJumps to the declaration. A class name two packages both declare goes to the one the file imports (an explicit import p::name before a wildcard), then the nearest by path; rename picks the same class
Find referencesAll uses of a symbol, including macros (`WIDTH at its `define or any use). A class method reports its whole override chain, the same set rename edits
RenameRenames a symbol across all references. Keywords cannot be renamed. Refused with a message when the server cannot find the symbol's declaration (for example a member inherited from a library class that is not in the filelist) or when a module declared more than once in an implicit project would be renamed. A class method renames its whole override chain: the base declaration, every override, extern and out-of-block bodies, super. calls and calls through any handle. The rename is refused, naming the declaration, when that chain reaches a file outside your project (a library such as uvm-core, another project, or a file in no project while yours has one). When a base class is not indexed at all, the rename is refused only if a super. call in the chain shows the method overrides something there; an override that never calls super. is renamed without the base. Limits: implements is not followed, so an interface class method and its implementations rename separately; a same-named non-virtual method in a subclass joins the chain
Document highlightMarks every occurrence of the symbol under the cursor in the current file; for a class method, every occurrence of its override chain
Selection rangeExpands the selection step by step to each enclosing piece of syntax (smart selection)
CompletionContext-aware suggestions; see Completion
Signature helpParameters while typing a call or a #(...) list; triggers on ( and ,
Document symbolsOutline of the current file; see below
Workspace symbolsSearch across the project; see below
Inlay hintsSee below
Folding rangesSee Folding

Cross-file features need the project indexed through a filelist. See Design & filelist.

Document symbols ​

The outline of the current file: modules, interfaces and packages with their ports, parameters, signals, functions, tasks, instances, modports and generate blocks; classes with their properties and methods; typedefs with their enum members and struct fields.

Workspace symbols ​

A case-insensitive substring search over the open files and the indexed project files (the filelist, or the implicit project):

  • modules, interfaces, packages and classes, and each class's methods, always;
  • functions and tasks of packages and modules, and typedefs (struct, enum, other), once the query is not empty.

scope::name matches name inside a package, class or module whose name contains scope, and ::scope::name needs the scope to match exactly. An exact name ranks first, then a prefix, then a match at the start of a _-separated word, then anything else; at equal rank, modules, interfaces and packages come before classes, and classes before their members. At most 100 results are returned.

Inlay hints ​

Inside each module instantiation, LazyVerilog shows the direction and type of every connected port, and an N/M count of connected ports at the opening parenthesis. Instances of modules from the filelist show hints once the background index is ready, so a file opened at startup may briefly show none.

toml
[inlay_hint]
enable = true

Folding ranges ​

toml
[folding]
enable = true

Neovim asks for folds and inlay hints on every edit. With enable = false the server answers with nothing. To stop the requests altogether, also set folding = false or inlay_hints = false in the Neovim setup().

Released under the MIT License. Themed with Catppuccin.