Skip to content
| Marketplace
Sign in
Visual Studio Code>Programming Languages>WaxNew to Visual Studio Code? Get it now.
Wax

Wax

Wax Tools

|
5 installs
| (0) | Free
Syntax highlighting and formatting for Wax, a Rust-like syntax for WebAssembly.
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

Wax for Visual Studio Code

Syntax highlighting, formatting, diagnostics, and snippets for Wax (a Rust-like syntax for WebAssembly) in .wax files and for WebAssembly text (.wat) files.

Features

  • Formatting with the Wax formatter itself, compiled to WebAssembly and run in-process, so it works the same in desktop and web VS Code with no separate install. Run "Format Document", or turn on "Format on Save" (editor.formatOnSave). Files with syntax errors are left untouched.
  • Diagnostics as you type: syntax errors, type errors, and lints from the same toolchain are shown inline (squiggles) and in the Problems panel.
  • Hover types (.wax): hover over an expression to see its inferred type, read straight off the type-checker's typed tree. Hovering a name that is not an expression shows what it resolves to instead — a type reference shows the type's definition, an assignment target or global shows its type. Works mid-edit through the recovering parser even while other parts of the file have errors.
  • Inlay hints (.wax): the inferred type is shown inline on each un-annotated let binding (e.g. let x = 3 displays x: i32). Toggle them with the editor.inlayHints.enabled setting.
  • Go to definition (.wax): jump from a use to its definition — a function, global, type, or tag; a let/parameter binding; or a block/loop label. Works through shadowing (a use resolves to the binding actually in scope).
  • Go to type definition (.wax): from a value, jump to the declaration of its type — e.g. from a variable of type &point to type point = { … }.
  • Find all references / highlight (.wax): from a use or a definition, list every occurrence of the symbol (Shift+F12), and highlight them in the file when the cursor is on one.
  • Rename (.wax): rename a symbol (F2) across all its occurrences, resolving through shadowing. A punned struct field is expanded ({p| x} becomes {p| x: new}) so the struct's field is left intact; rename is declined when the cursor is not on a renameable symbol.
  • Completion (.wax): suggests the names in scope — the module's functions, globals, types, and tags, the enclosing function's parameters and locals, and keywords — and, after ., the fields of a struct value (including chains like l.a.x) plus the value methods for the receiver (clz/sqrt/… on a number, length/fill/… on an array, the SIMD ops on a v128, the load/store/management ops on a memory or table); after ::, an intrinsic namespace's functions (v128::, i64::, atomic::). Suggestions respect conditional compilation and the wax.define configuration, so a definition in a branch the defines rule out is not offered. Works while the file is mid-edit.
  • Signature help (.wax): while typing a call, shows the callee's signature with the active argument highlighted — for functions, imported functions, ns:: intrinsics, and methods (x.min(…), mem.load8(…)).
  • Semantic highlighting (.wax): colours identifiers by role — functions, parameters, locals/globals, types (including references like &point), struct fields, and intrinsic namespaces — refining the grammar's coarser colouring.
  • Expand / shrink selection (.wax): Shift+Alt+→ grows the selection along the syntax tree — identifier, expression, statement, block, function, whole file — and Shift+Alt+← shrinks it back. Works mid-edit through the recovering parser.
  • Code folding (.wax): fold block bodies (functions, if/loop/while/ match/try blocks), #[if]/#[else] branches, and multi-line block comments, from the parse tree rather than by indentation.
  • Conditional-compilation dimming (.wax): set wax.define (e.g. ["debug=true", "arch=wasm64"], mirroring the -D flag) and the #[if] / #[else] branches that configuration makes unreachable are dimmed as dead code, like a preprocessor greying out inactive #ifdef regions. A status-bar item shows the active defines and edits them in a click. Diagnostics specialize to the same configuration (like wax -D … check), so a type error that lives only in a branch the defines rule out is not reported.
  • Convert / preview: "Wax: Show compiled WAT" (in a .wax file) opens the compiled WebAssembly text in a read-only document beside the source, updating live as you edit; "Wax: Show as Wax" does the reverse from a .wat file. Both are on the editor toolbar and in the command palette.
  • WebAssembly text (.wat): the same features apply to .wat files too: formatting, diagnostics, document outline, syntax highlighting, snippets, and comment/bracket handling, all from the same in-process toolchain and grammar.
  • Syntax highlighting via a TextMate grammar covering the full language: keywords and control flow (fn, let, do, loop, match, dispatch, try/catch, the br* branch family, stack-switching, …), primitive and abstract heap types, references, numeric/char/string literals with escapes, labels ('label), attributes (#[export = …], #[if(…)], #[likely], …), aggregate literals ({point| …}, [bytes| …]), qualified intrinsics (v128::const_i32x4, i64::add128), and method-style intrinsics.
  • Language configuration: line/block comments, bracket matching and colorization, auto-closing pairs, and indentation rules. Single quotes are intentionally not auto-closed, because they introduce labels.
  • Snippets for common constructs (functions, imports/exports, control flow, types, tags, memories).
  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
© 2026 Microsoft