# zc for vs code this extension connects vscode to the zc language server. the server runs the compiler in check mode, so diagnostics and semantic highlighting reflect the language the compiler actually parses, including syntax introduced with parse words. features include compiler diagnostics, import quick fixes, optimization hints, semantic highlighting, hover documentation (values, types, ownership and lifetimes, module include names, embedded declarations and assembly instruction descriptions), fuzzy completions with signatures and descriptions (consumed variables are crossed out and sorted last), go to definition and find references (also into included files), document formatting and immediate textmate highlighting while the server starts. module completion goes one level at a time: `std.` lists the groups (`File`, `Io`, `Text`, ...) and plain members, `std.Io.` the members of that group. borrow errors are the compiler's own messages (the same check `zy` runs), marked on the conflicting use, with related information pointing at where the owner ended and where it was declared. import quick fixes preserve namespace headers, comments and crlf line endings, and the editor drops edits for stale document versions. hints are shown as blue information squiggles; `hints on`, `hints small` and `hints off` in the source change which ones appear. formatting reads a `.zcformat` file (`UseTab`, `IndentWidth`, `MaxEmptyLines`, `ContinuationIndent`, `NormalizeSpacing`, `CaseIndent`, `FinalNewline`) from the document's directory upward, and falls back to the editor's tab settings. by default, case labels are indented one level inside their switch; `CaseIndent: 0` aligns them with the switch. ## install there is no build step for local installation. package the extension with `bash src/tools/mkvsix.sh`, then choose “extensions: install from vsix” in vscode. the package includes a webassembly server; if that file is unavailable, the extension can run the server in the tinyvm javascript vm, which is slower. a native server can be selected with `zc.lsp.serverPath`. ## settings ```json { "zc.lsp.serverPath": "", "zc.trace.server": "messages" } ``` an empty server path uses the bundled server. if the server exits, the extension restarts it and resends open documents. ## diagnostics cache diagnostics are cached per document using a sha256 key that includes the server build, document path and text, and files read through `include`. included files are resolved from the workspace folder and from the including file's directory. saving an included file triggers checks for open documents that use it. cached diagnostics are restored from extension storage when vscode starts; workspaces with more than 300 files are not cached. ## limitations the extension sends included source files to both bundled servers. relative paths are resolved next to the including file, then in the workspace folder. `include std;` uses the embedded library; it is never automatically imported. hovering an import name shows the module overview. `core.zc` is embedded, and qualified navigation distinguishes `core.syscall` from `rt.syscall`. source libraries can provide module documentation in the overview comment after their namespace and include headers. go to definition for built-ins opens embedded runtime, compiler or library source in a read-only document. see `tests/drivers/lsp_test.js` for protocol tests, `tests/drivers/codeactions_client_test.js` for workspace-edit version handling, `tests/drivers/ext_cache_test.js` for the real editor provider and bundled server, and `src/tools/mkvsix.sh` for packaging. the native language server also accepts `--help` or `-h`; its `--format`, `--annotate` and `--types` source modes remain available. use `build/bin/zclsp --help` for the stdin protocol and source-mode details. `python3 tests/drivers/cli_help_test.py` checks these command-line options along with the bundled command-line tools.