HVP Language Support
VS Code support for the HVP (Hierarchical Verification Plan) language used by Synopsys
Verification Planner.
This extension is a thin LSP client. All language intelligence (parsing, diagnostics,
completion, outline, folding) lives in the standalone hvp-language-server npm package
(sibling repo, ../hvp-language-server); this repo only wires that server into VS Code
and ships a generated TextMate grammar for syntax highlighting. See CLAUDE.md in this
folder for the file-by-file map.
Features
- Syntax highlighting for
.hvp files (keywords, types, built-in metrics, strings,
numeric/percent literals, comments) — syntaxes/hvp.tmLanguage.json, generated by
hvp-language-server's grammar generator (see "Syntax grammar" below).
- Feature outline: the Outline view and "Go to Symbol" (
Ctrl+Shift+O) list every
feature block, nested to match the file's actual feature ... endfeature hierarchy.
Only features are shown — measures, metrics, plans, subplans, overrides, and filters are
intentionally excluded.
- Block snippets: typing a block-opener keyword (
plan, feature, metric, measure,
override, filter, until) and accepting the suggestion inserts the full
<keyword> <name>; ... end<keyword> skeleton with tabstops. Sent by the server as
insertTextFormat: Snippet completion items — there's no local snippets/hvp.json file
anymore.
- Autocompletion: block keywords, built-in attributes/annotations (
description, weight,
owner, at_least, phase, source, test.expected), built-in metric names (Line,
Group, test.*, etc.), type keywords, and aggregator names — all offered everywhere, but
ranked by what block the cursor is currently inside (e.g. source sorts first inside a
measure, measure/metric sort first inside a feature). Suppressed inside strings and
comments. Triggers automatically after . (for dotted names like test.expected).
- Auto-indentation: a line ending a
feature ...; declaration increases the indent of the
next line; endfeature decreases it (language-configuration.json, client-side).
- Block folding: every
plan/feature/metric/measure/override/filter/until block
can be folded, from the server's foldingRangeProvider.
- Problems (diagnostics), refreshed as you type (debounced 300ms server-side):
- Error — a statement line doesn't end with a
; (block closers like endfeature/
endmeasure/endmetric/endoverride/endfilter/endplan/enduntil are exempt, and a
line ending in , is treated as a continued list, e.g. a multi-line source = "...", "...";).
- Error — block imbalance, treating every block pair (
plan/endplan,
feature/endfeature, metric/endmetric, measure/endmeasure,
override/endoverride, filter/endfilter, until/enduntil) like matching
parentheses: an unclosed block left open at end of file, a close keyword with no matching
open, or a close keyword that doesn't match the innermost open block.
- Warning — a
feature block has no nested features and no measures.
- Warning — a
measure block has no source assignment.
Known limitations (v1)
- Source-region keywords inside
source = "..." strings (module:, instance:, tree:,
property:, backtick wildcard/regex tags like `r`/`n`) are not tokenized —
the whole string is highlighted as a plain string literal.
License
MIT
| |