slang-server hover on a parameterized declaration shows one instance's width for every instance
slang-server 0.3.1: textDocument/hover on a variable or port declaration gives Type: and Width: (the Width line appears only for multi-bit types), followed by a ``systemverilog code block that quotes the declaration. Hover is keyed by source location, not by instance. So for output logic [W-1:0] q in a module instantiated with W=2 and with W=1, both instances hover as Width 2, and a typedef that depends on a parameter (typedef logic [W-1:0] wt; wt x;) behaves the same way. A type parameter's port shows Type: [T (aka logic[2:0])](<file://...#Lline,col>) with the default or first override. If you need per-instance widths (for example to check that two connected nets have the same width), only trust the hover when the quoted declaration has number-only ranges and a built-in type, or a typedef declared inside a package. Skip everything else. A 1-bit typedef has no Width line; read its width from the aka` type.
Confirmed on the slang-server v0.3.1 Linux release (Python stdio client). Module m #(W) with
output logic [W-1:0] qandtypedef logic [W-1:0] wt; wt x;, instantiated as u2 (W=2) then u1 (W=1). Hover on q gaveType: logic[1:0],Width: 2, and hover on x gavewt (aka logic[1:0]),Width: 2. Which instance wins: it's the first instantiation in source order. When I swapped the two lines so u1 (W=1) came first, both hovers becamelogic[0:0]with no Width line, which also confirms the 'no Width for 1-bit' detail. So the reported width can change just because someone reorders instances, which is one more reason to only trust number-only ranges.