VS Code extension for Nessus / CIS .audit files — full-featured syntax highlighting, beautifier, validator, snippets, outline, and block-style visualizer. Tested against 1,568 real Tenable portal audit files.
Install
From VSIX (local):
- Download
audit-language-support-X.Y.Z.vsixfrom Releases (or build it yourself — see below). - In VS Code:
Ctrl+Shift+P→ "Extensions: Install from VSIX..." → pick the.vsix. - Reload the window.
Or via command line:
code --install-extension audit-language-support-X.Y.Z.vsix
Features
Syntax highlighting
- File association for
*.audit - XML-like tags (
<custom_item>,<if>,<condition>,<then>,<else>,<report>, etc.) - Single AND double quoted strings (Tenable's Windows audits use single quotes for
info/solutionheavily) - Field-color groups — distinct colors per semantic role:
- Identity (purple) —
description - Prose (soft green) —
info,solution - Pattern (warm coral) —
regex,expect,not_expect,cmd - Target (teal) —
file,rpm,name,service,reg_key,svc_name - Citation (muted gray) —
reference,see_also
- Identity (purple) —
- Severity-tinted values —
CRITICALred,HIGHorange,MEDIUMyellow,LOWgreen,INFOblue - ~80 known check types highlighted as enums (
CMD_EXEC,REGISTRY_SETTING,AUDIT_POWERSHELL, etc.) - Comment lines (
#-prefixed) muted;<ui_metadata>block recognized \"escape handling, including trailing-quote registry-path quirk
Beautifier (Format Document)
- Aligns
key : valuecolumns within each<custom_item>block (per-block, longest-key wins) - Re-indents tags by depth
- Wraps long
info/solutionprose atauditFormatter.wrapColumn(default 120), continuation aligned under the opening quote - Comma-wraps long
referencevalues at token boundaries - Single + double quote aware
- Preserves shell-command examples and CLI snippets verbatim inside prose
- Trigger:
Shift+Alt+F, right-click menu, status-bar Beautify button, orAudit: Beautify Filefrom Command Palette
Validator (Problems panel)
- Tag balance / nesting / unclosed-tag detection
- Universal-required-key check (
description, plusinfo/solution/referenceon strict Windows/Unix audits) - Type-specific required-key check for ~30 types (CMD_EXEC needs
cmd+expect|not_expect, REGISTRY_SETTING needsreg_key+reg_item+value_type+value_data, etc.) with any-of alternatives for multi-platform variants - Duplicate description detection — skips legitimate CIS
<then>/<else>mutually-exclusive branch patterns and<condition>probe duplicates <if>structure validation (must have<condition>+<then>)@VARIABLE@reference validation against<ui_metadata><variables><debug/>flag info diagnostic- File-wide consistency rule: only warns about missing info/solution/reference if ≥80% of items in the file have it (avoids noise on minimal-format files like AIX, MSCT)
- Platform-aware strictness — Windows/Unix strict; Cisco / ArubaOS / Brocade / cloud-native files lenient
Snippets (30 templates)
Type a prefix in any .audit file:
| Prefix | Block |
|---|---|
audit-checktype |
<check_type:"..."> wrapper |
audit-group |
<group_policy:"..."> section |
audit-if, audit-if-and, audit-if-or |
full <if>/<condition>/<then>/<else> blocks |
audit-report |
`<report type:"PASSED |
audit-cmd |
Unix CMD_EXEC |
audit-filecontent, audit-filecontentnot, audit-filecheck |
Unix file checks |
audit-rpm, audit-process, audit-banner, audit-chkconfig |
Unix system checks |
audit-regset, audit-auditpolicy, audit-userrights, audit-passwordpolicy, audit-lockoutpolicy, audit-servicepolicy, audit-wmi |
Windows checks |
audit-powershell, audit-allowedports |
Modern Windows checks |
audit-config, audit-offlineconfig |
Network device checks |
audit-sql |
Database SQL_POLICY |
audit-debug |
<debug/> flag |
audit-cmdbash |
multi-line shell cmd body |
Tabstop dropdowns for severity / platform / condition type — no need to remember enum values.
Tenable docs shortcuts
Audit: Open Tenable Compliance Checks Reference— opens the official Tenable Compliance Checks Reference in your browserAudit: Look Up Check Type at Cursor— context-aware: scans up from the cursor for the nearesttype:line and opens a Tenable-docs-scoped search for that check type. Falls back to an input prompt if notype:is found. Available from the right-click menu, command palette, or viaeditor/context
Outline + Visualizer
- Built-in Outline panel (Explorer sidebar) — full tag tree, breadcrumbs, sticky scroll,
Ctrl+Shift+Ofor symbol search. Click any node → editor jumps and selects the whole block. - Audit Outline (custom Explorer view) — same tree plus toggle buttons in the title bar:
- Group by Structure (default)
- Group by Type — flattens custom_items grouped by
type:value, sorted by count - Group by Severity —
CRITICAL/HIGH/MEDIUM/LOW/INFOgroups
- Block-style flowchart visualizer (webview, opens beside) — nested colored cards with collapse/expand per block. Header tinted by tag kind (
check_typeblue,ifyellow,thengreen,elsered, etc.), severity-badged custom_items. Toolbar: Expand all / Collapse all / Collapse leaves / live filter search.- Trigger via
Audit: Show Conditional Flowchartcommand, right-click menu, or editor title bar icon - Click any block → editor jumps to that line
- Auto-refreshes as you edit the file
- Trigger via
Settings
All settings are under auditHighlighter.* and auditFormatter.*. Find them via Ctrl+, → search "audit":
Field colors (5 groups)
| Setting | Default | Affects |
|---|---|---|
auditHighlighter.identityColor |
#C586C0 |
description values |
auditHighlighter.proseColor |
#A9C77B |
info, solution values |
auditHighlighter.patternColor |
#CE9178 |
regex, expect, not_expect, cmd values |
auditHighlighter.targetColor |
#4EC9B0 |
file, rpm, name, service, reg_key, svc_name values |
auditHighlighter.citationColor |
#7F848E |
reference, see_also values |
Severity colors
| Setting | Default | Severity |
|---|---|---|
auditHighlighter.severityCriticalColor |
#F44747 |
CRITICAL |
auditHighlighter.severityHighColor |
#FF8C42 |
HIGH |
auditHighlighter.severityMediumColor |
#DCDCAA |
MEDIUM |
auditHighlighter.severityLowColor |
#98C379 |
LOW |
auditHighlighter.severityInfoColor |
#4FC1FF |
INFO |
Other highlight colors
| Setting | Default | Purpose |
|---|---|---|
auditHighlighter.tagColor |
#E06C75 |
XML-like tags |
auditHighlighter.keyColor |
#61AFEF |
key names on key : value lines |
auditHighlighter.stringColor |
#D7DCE2 |
generic quoted strings |
auditHighlighter.commentColor |
#5F7A5C |
#-prefixed comments |
auditHighlighter.enumColor |
#E5C07B |
enum tokens (CMD_EXEC, POLICY_DWORD, AND, OR, etc.) |
auditHighlighter.braceContentColor |
#98C379 |
content inside { ... } braces |
Formatter
| Setting | Default | Purpose |
|---|---|---|
auditFormatter.wrapColumn |
120 |
Wrap column for info/solution/reference. Set to 99999 to disable physical wrapping. |
Auto-applied per-language defaults
When you open an .audit file, the extension also sets:
"[audit]": {
"editor.insertSpaces": true,
"editor.tabSize": 2,
"editor.wordWrap": "on",
"editor.wrappingIndent": "indent"
}
Override any of these in your user settings if needed.
Build the VSIX yourself
git clone https://github.com/Leng-Phirun/audit-highlighter.git
cd audit-highlighter
npx @vscode/vsce package
Produces audit-language-support-X.Y.Z.vsix in the repo root.
Development
git clone https://github.com/Leng-Phirun/audit-highlighter.git
cd audit-highlighter
code .
Press F5 to launch an Extension Development Host. Edit extension.js, then Ctrl+R in the dev host to reload.
License
MIT — see LICENSE.