aboutsummaryrefslogtreecommitdiff
path: root/MANUAL.md
diff options
context:
space:
mode:
authorDavid Czihak <git@dcz.at>2026-05-10 19:21:33 +0200
committerDavid Czihak <git@dcz.at>2026-05-10 19:21:33 +0200
commitb80b9c1f82585677a7c042557576c41b1670d259 (patch)
tree9a741dfd7725205dba35b42bc6d5a6a7e084ced0 /MANUAL.md
parent33ea57ddd69f35f3f2db64a1a2d31b410ed7afb2 (diff)
Chore: Move extension bundle into Zig.novaextension/ subdirectory
Separates Nova extension resources from development-only items. Development items (ISSUES.md, vendor/, examples/) remain at the repo root. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Diffstat (limited to 'MANUAL.md')
-rw-r--r--MANUAL.md656
1 files changed, 0 insertions, 656 deletions
diff --git a/MANUAL.md b/MANUAL.md
deleted file mode 100644
index 27a555e..0000000
--- a/MANUAL.md
+++ /dev/null
@@ -1,656 +0,0 @@
-# Zig for Nova — User Manual
-
-This manual covers the task system. For installation, language-server, and
-debugging prerequisites see [README.md](README.md).
-
----
-
-## Table of Contents
-
-- [Overview](#overview)
-- [Creating a task](#creating-a-task)
-- [Common options](#common-options)
- - [Working Directory](#working-directory)
- - [Optimize](#optimize)
- - [Target](#target)
- - [User Options](#user-options)
- - [Build Arguments](#build-arguments)
- - [Program Arguments](#program-arguments)
-- [Task templates](#task-templates)
- - [Zig Package](#zig-package)
- - [Zig Debug](#zig-debug)
- - [Zig Test](#zig-test)
- - [Zig Watch](#zig-watch)
-- [Automatic tasks](#automatic-tasks)
- - [Current Zig File](#current-zig-file)
- - [Discovered build steps](#discovered-build-steps)
-- [Recipes](#recipes)
- - [Run a single executable](#recipe-run-executable)
- - [Run with a custom step name](#recipe-custom-step)
- - [Cross-compile to a different target](#recipe-cross-compile)
- - [Pass custom -D flags](#recipe-d-flags)
- - [Run specific tests](#recipe-tests)
- - [Ziglings-style projects](#recipe-ziglings)
- - [Debug a binary that isn't in zig-out/bin](#recipe-debug)
-- [Clean action](#clean-action)
-- [Inline issue reporting](#inline-issues)
-- [Settings reference](#settings)
-
----
-
-<a id="overview"></a>
-## Overview
-
-The extension integrates with `zig build` at three levels:
-
-| Kind | How it appears | Configurable | Persistent |
-|---|---|---|---|
-| **Task template** | Added by you in Project Settings | Yes — full config UI | Yes — saved in `.nova/` |
-| **Current Zig File** | Always present automatically | No | No |
-| **Discovered step** | One per step in `zig build --list-steps` | No | No |
-
-Task templates are the right tool when you need to control optimize mode,
-target, test filters, or program arguments. Automatic tasks are zero-config
-quick-launchers.
-
----
-
-<a id="creating-a-task"></a>
-## Creating a task
-
-1. Open **Project Settings** (`⌘,` with a project open, or **Project →
- Project Settings…**).
-2. Select the **Tasks** tab.
-3. Click **+** and choose a template from the Zig section.
-4. Fill in the options and close the panel — Nova saves the task automatically.
-
-Each task exposes up to three action slots that map to Nova's toolbar buttons:
-
-| Slot | Toolbar button | What it does |
-|---|---|---|
-| **Build** | ⌘B | Compiles without running |
-| **Run** | ▶ | Builds (if needed) and runs |
-| **Clean** | Broom icon | Removes build artifacts |
-
----
-
-<a id="common-options"></a>
-## Common options
-
-Several options appear in more than one template. They are documented once
-here and referenced from each template section.
-
-<a id="working-directory"></a>
-### Working Directory
-
-| Field | Default |
-|---|---|
-| Working Directory | Workspace root |
-
-The directory from which `zig build` is invoked. Relative paths in other
-options are resolved against this directory. Leave blank to use the workspace
-root.
-
-Change this for monorepos or sub-package layouts where `build.zig` lives
-below the workspace root.
-
-<a id="optimize"></a>
-### Optimize
-
-| Value | Flag emitted | When to use |
-|---|---|---|
-| **Project Default** | *(nothing)* | Let `build.zig` decide (most projects default to `Debug`) |
-| **Debug** | `-Doptimize=Debug` | Development, debugging |
-| **ReleaseSafe** | `-Doptimize=ReleaseSafe` | Production with safety checks |
-| **ReleaseFast** | `-Doptimize=ReleaseFast` | Maximum performance |
-| **ReleaseSmall** | `-Doptimize=ReleaseSmall` | Smallest binary size |
-
-The flag is inserted immediately after `zig build`:
-```
-zig build -Doptimize=ReleaseFast …
-```
-
-<a id="target"></a>
-### Target
-
-| Field | Default |
-|---|---|
-| Target | *(host)* |
-
-A Zig target triple such as `aarch64-macos`, `x86_64-linux-gnu`, or
-`wasm32-wasi`. Passed as `-Dtarget=<value>`. Leave blank to compile for the
-machine you are running on.
-
-```
-zig build -Dtarget=aarch64-macos …
-```
-
-See `zig targets` for the full list of supported triples.
-
-<a id="user-options"></a>
-### User Options
-
-A list of custom `-D` flags defined by the project's `build.zig`. Each entry
-can be either:
-
-- `key` — emits `-Dkey` (boolean `true`)
-- `key=value` — emits `-Dkey=value`
-
-Example entries and the flags they produce:
-
-| Entry | Flag |
-|---|---|
-| `verbose` | `-Dverbose` |
-| `n=42` | `-Dn=42` |
-| `healed-path=patches/healed` | `-Dhealed-path=patches/healed` |
-
-Entries that do not match the pattern `[A-Za-z_][A-Za-z0-9_-]*(=.*)?` are
-silently skipped with a warning in the Extension Console.
-
-<a id="build-arguments"></a>
-### Build Arguments
-
-Free-form arguments appended after the `-D` flags but before the step name.
-Use this for `zig build` flags that are not exposed as dedicated fields, such
-as `--summary all`, `--verbose`, or `-j4`.
-
-```
-zig build [-Doptimize=…] [-Dtarget=…] [-D…] <Build Arguments> [step] …
-```
-
-<a id="program-arguments"></a>
-### Program Arguments
-
-Arguments passed to the compiled program after `--`:
-
-```
-zig build … run -- <Program Arguments>
-```
-
-For the **Zig Debug** template these are forwarded to the debugger's launch
-request instead.
-
----
-
-<a id="task-templates"></a>
-## Task templates
-
-<a id="zig-package"></a>
-### Zig Package
-
-> **Build → Run → Clean** a Zig package from a single task configuration.
-
-**When to use:** everyday development — building, running, and cleaning a
-package whose output is an executable.
-
-#### Actions
-
-| Action | Command |
-|---|---|
-| Build | `zig build [flags…]` |
-| Run | `zig build [flags…] [step] [-- program-args]` |
-| Clean | removes `.zig-cache`, `zig-cache`, `zig-out` |
-
-The Build action compiles without running (equivalent to `zig build` with no
-run step). The Run action builds *and* runs in a single `zig build` invocation
-— Nova does not chain them; `zig build` handles both internally.
-
-#### Options
-
-| Option | Type | Default | Description |
-|---|---|---|---|
-| Working Directory | path | workspace root | See [Working Directory](#working-directory) |
-| Run Step | string | *(blank)* | Step name for the Run action. See below. |
-| Optimize | enum | Project Default | See [Optimize](#optimize) |
-| Target | string | host | See [Target](#target) |
-| User Options | string list | — | See [User Options](#user-options) |
-| Build Arguments | string list | — | See [Build Arguments](#build-arguments) |
-| Program Arguments | string list | — | See [Program Arguments](#program-arguments) |
-| Console | enum | Internal Console | Where to run the program |
-
-#### Run Step
-
-The step name appended to `zig build` for the Run action. Common values:
-
-| Value | Command produced | When |
-|---|---|---|
-| *(blank)* | `zig build` | Default install step — artifacts land in `zig-out/` |
-| `run` | `zig build run` | Project exposes a `run` step |
-| `serve` | `zig build serve` | Any custom step name |
-
-Leave blank if the project uses `-D` flags instead of a step name (Ziglings
-style — see [Recipes](#recipes)).
-
-#### Console
-
-| Value | Behaviour |
-|---|---|
-| **Internal Console** | Output appears in Nova's built-in console panel |
-| **External Terminal** | Opens macOS Terminal.app in a new window or tab |
-
-Use External Terminal for interactive programs that read from stdin.
-
----
-
-<a id="zig-debug"></a>
-### Zig Debug
-
-> **Build → Debug** a Zig executable under lldb-dap.
-
-**When to use:** stepping through code, setting breakpoints, inspecting
-variables.
-
-The Run action always triggers a Build first (`buildBeforeRunning`), so the
-debugger always launches the freshest binary.
-
-Requires `lldb-dap`, discovered automatically via `xcrun` or `PATH`. Install
-the Xcode Command Line Tools if it is missing: `xcode-select --install`.
-
-#### Actions
-
-| Action | Command |
-|---|---|
-| Build | `zig build -Doptimize=<mode> [flags…]` |
-| Run | launches lldb-dap (build runs first automatically) |
-| Clean | removes `.zig-cache`, `zig-cache`, `zig-out` |
-
-#### Options
-
-| Option | Type | Default | Description |
-|---|---|---|---|
-| Working Directory | path | workspace root | See [Working Directory](#working-directory) |
-| Program | path | *(auto-detected)* | Path to the executable to debug. See below. |
-| Optimize | enum | **Debug** | See [Optimize](#optimize) |
-| Target | string | host | See [Target](#target) |
-| User Options | string list | — | See [User Options](#user-options) |
-| Build Arguments | string list | — | See [Build Arguments](#build-arguments) |
-| Program Arguments | string list | — | Forwarded to the debugged process |
-| Console | enum | Internal Console | Where the debugged process runs |
-| Stop On Entry | boolean | off | Pause at the very first instruction |
-
-#### Program path auto-detection
-
-When the **Program** field is blank, the extension reads `build.zig.zon` and
-extracts the package `.name`. It then probes `zig-out/bin/<name>` relative to
-the working directory. If the file exists it is used automatically; otherwise
-the task shows a warning asking you to fill in the field manually.
-
-This works for the common case of a single executable whose name matches the
-package name. For other layouts — multiple executables, custom install
-prefixes, library packages — set the path explicitly.
-
-#### Console (debug)
-
-| Value | Where the debugged process runs |
-|---|---|
-| **Internal Console** | Nova's built-in console (default) |
-| **Integrated Terminal** | Nova's integrated terminal |
-| **External Terminal** | macOS Terminal.app |
-
----
-
-<a id="zig-test"></a>
-### Zig Test
-
-> **Build → Run → Clean** tests via `zig build test`.
-
-**When to use:** running the project's test suite, optionally filtered to a
-subset of tests.
-
-#### Actions
-
-| Action | Command |
-|---|---|
-| Build | `zig build test [flags…]` |
-| Run | `zig build test [flags…] [--summary=…] [--test-filter …] [-- runner-args]` |
-| Clean | removes `.zig-cache`, `zig-cache`, `zig-out` |
-
-Both Build and Run invoke `zig build test`. The distinction is that the Run
-action additionally applies the Test Filter and Summary fields.
-
-Test failures surface as inline issues in the editor via the same
-`file:line:col: error:` pattern used for compiler errors.
-
-#### Options
-
-| Option | Type | Default | Description |
-|---|---|---|---|
-| Working Directory | path | workspace root | See [Working Directory](#working-directory) |
-| Test Filter | string | — | Substring filter on test names. See below. |
-| Summary | enum | Default | Verbosity of `--summary`. See below. |
-| Optimize | enum | Project Default | See [Optimize](#optimize) |
-| Target | string | host | See [Target](#target) |
-| User Options | string list | — | See [User Options](#user-options) |
-| Build Arguments | string list | — | Appended after `zig build test` |
-| Program Arguments | string list | — | Passed after `--` to the test runner |
-
-#### Test Filter
-
-A substring of the test name. Only tests whose names contain this string are
-run. Maps directly to `zig build`'s `--test-filter` flag.
-
-```
-zig build test --test-filter "parser"
-```
-
-Leave blank to run all tests.
-
-#### Summary
-
-Controls how much output `zig build` prints about the test run.
-
-| Value | Flag | Output |
-|---|---|---|
-| **Default** | *(nothing)* | Zig's built-in default |
-| **All** | `--summary=all` | Every step result |
-| **Failures only** | `--summary=failures` | Only failed steps |
-| **None** | `--summary=none` | Silent on success |
-
----
-
-<a id="zig-watch"></a>
-### Zig Watch
-
-> **Build** with `zig build --watch`, rebuilding automatically on file changes.
-
-**When to use:** tight edit–compile loops where you want continuous feedback
-without manually re-triggering the Build action.
-
-> **⚠ Known limitation:** Nova's issue matchers fire only on the first build
-> cycle. Errors found in subsequent automatic rebuilds will not appear as
-> inline annotations in the editor. Re-run the task (stop and start again) to
-> refresh the issue overlay.
-
-#### Actions
-
-| Action | Command |
-|---|---|
-| Build | `zig build [step] --watch [--debounce N] [-fincremental] [flags…]` |
-| Clean | removes `.zig-cache`, `zig-cache`, `zig-out` |
-
-There is no Run action — `zig build --watch` manages the build loop itself.
-
-#### Options
-
-| Option | Type | Default | Description |
-|---|---|---|---|
-| Working Directory | path | workspace root | See [Working Directory](#working-directory) |
-| Step | string | *(blank)* | Step to watch. Leave blank for Zig's default install step. |
-| Debounce (ms) | number | *(Zig default)* | Milliseconds to wait after a change before rebuilding. |
-| Incremental | enum | Default | Force incremental compilation on or off. |
-| Optimize | enum | Project Default | See [Optimize](#optimize) |
-| Target | string | host | See [Target](#target) |
-| User Options | string list | — | See [User Options](#user-options) |
-| Build Arguments | string list | — | See [Build Arguments](#build-arguments) |
-
-#### Debounce
-
-Passed as `--debounce <N>` to `zig build`. Controls how long Zig waits after
-detecting a file change before starting a rebuild. Useful on projects with
-slow file-system events or many simultaneous saves. Leave blank to use Zig's
-built-in default.
-
-#### Incremental
-
-| Value | Flag | Effect |
-|---|---|---|
-| **Default** | *(nothing)* | Zig decides |
-| **On** | `-fincremental` | Force incremental compilation on |
-| **Off** | `-fno-incremental` | Force incremental compilation off |
-
----
-
-<a id="automatic-tasks"></a>
-## Automatic tasks
-
-Automatic tasks appear in the task list without any configuration. They cannot
-be edited and are not saved in project settings.
-
-<a id="current-zig-file"></a>
-### Current Zig File
-
-Always present. Targets whichever `.zig` file is currently focused in the
-editor.
-
-| Action | Command |
-|---|---|
-| Run | `zig run <active-file>` (in the file's directory) |
-| Clean | removes `.zig-cache`, `zig-cache`, `zig-out` from the nearest ancestor directory that contains a `build.zig` |
-
-The Clean action walks up the directory tree from the active file until it
-finds a `build.zig`, then cleans that project root. If no `build.zig` is
-found above the file, it falls back to the workspace root.
-
-**Note:** there is no Build action — `zig run` compiles and runs in one step.
-
----
-
-<a id="discovered-build-steps"></a>
-### Discovered build steps
-
-When the workspace contains a `build.zig`, the extension runs
-`zig build --list-steps` in the background and creates one task per step:
-
-```
-Zig Build: install
-Zig Build: run
-Zig Build: test
-Zig Build: bench
-…
-```
-
-Each task has a single **Run** action that invokes `zig build <step>` in the
-workspace root with no extra flags.
-
-#### How discovery works
-
-1. On workspace open (or task-list refresh), the extension stats `build.zig`
- and `build.zig.zon` to capture their modification times.
-2. It spawns `zig build --list-steps` asynchronously — the workspace is usable
- immediately; discovered tasks appear once the command finishes.
-3. The result is cached. The cache is considered fresh if:
- - Both `build.zig` and `build.zig.zon` have the same mtimes as when last
- fetched, **and**
- - The cache is less than 5 minutes old.
-4. When `build.zig` or `build.zig.zon` changes on disk, the cache is
- invalidated and `--list-steps` is re-run automatically.
-
-#### What steps appear
-
-`zig build --list-steps` executes `build.zig` with no `-D` options, so only
-the steps registered unconditionally by the build script are visible. Steps
-that are registered only under a `-D` branch (such as Ziglings' `zigling` and
-`random` steps) do not appear unless that branch is taken — and it won't be,
-because the discovery command passes no flags.
-
-Steps whose names are not valid identifiers (`[A-Za-z_][A-Za-z0-9_-]*`) are
-silently filtered out.
-
-#### Disabling discovery
-
-Some projects run expensive logic at the top of `build()` that you may not
-want triggered on every workspace open. Discovery can be turned off:
-
-- **Globally:** Nova Preferences → Extensions → Zig → Tasks → uncheck
- **Discover Build Steps**.
-- **Per workspace:** Project Settings → Zig → Tasks → uncheck **Discover Build
- Steps** (overrides the global setting for this project only).
-
-When disabled, the `Zig Build: <step>` tasks disappear; the
-[Current Zig File](#current-zig-file) task and all configured templates are
-unaffected.
-
----
-
-<a id="recipes"></a>
-## Recipes
-
-<a id="recipe-run-executable"></a>
-### Run a single executable
-
-Create a **Zig Package** task.
-
-- **Run Step:** `run` (or the name your `build.zig` uses for the run step)
-- Leave everything else at defaults.
-
-The Run (▶) button compiles and launches the program in Nova's console.
-
-<a id="recipe-custom-step"></a>
-### Run with a custom step name
-
-Same as above but change **Run Step** to whatever `b.step(…)` name your
-`build.zig` declares:
-
-```zig
-const serve_step = b.step("serve", "Start the HTTP server");
-```
-
-→ set **Run Step** to `serve`.
-
-<a id="recipe-cross-compile"></a>
-### Cross-compile to a different target
-
-Create a **Zig Package** task and set:
-
-- **Target:** `aarch64-linux-musl`
-- **Optimize:** `ReleaseSmall`
-
-The command produced will be:
-```
-zig build -Doptimize=ReleaseSmall -Dtarget=aarch64-linux-musl run
-```
-
-<a id="recipe-d-flags"></a>
-### Pass custom -D flags
-
-Your `build.zig` declares:
-
-```zig
-const verbose = b.option(bool, "verbose", "Enable verbose output") orelse false;
-const port = b.option(u16, "port", "Listening port") orelse 8080;
-```
-
-Add two entries to **User Options**:
-
-| Entry | Flag produced |
-|---|---|
-| `verbose` | `-Dverbose` |
-| `port=9000` | `-Dport=9000` |
-
-<a id="recipe-tests"></a>
-### Run specific tests
-
-Create a **Zig Test** task and set:
-
-- **Test Filter:** `parser` (runs any test whose name contains "parser")
-- **Summary:** Failures only (quieter output when most tests pass)
-
-<a id="recipe-ziglings"></a>
-### Ziglings-style projects
-
-Ziglings selects exercises with `-Dn=<number>` rather than a named step.
-
-For "run all exercises" use a **Zig Package** task with:
-- **Run Step:** *(blank)* — runs `zig build`, which hits the default `ziglings`
- step
-
-For a single exercise use:
-- **Run Step:** *(blank)*
-- **User Options:** `n=42`
-
-This produces `zig build -Dn=42`.
-
-Alternatively, if you have step discovery enabled, **Zig Build: ziglings**
-appears automatically and covers the "run all" case with one click.
-
-<a id="recipe-debug"></a>
-### Debug a binary that isn't in zig-out/bin
-
-Create a **Zig Debug** task and set **Program** explicitly:
-
-- `zig-out/bin/my-tool` (relative to Working Directory)
-- or an absolute path
-
-When the field is left blank the extension checks `build.zig.zon` for the
-package name and probes `zig-out/bin/<name>`. If your binary name doesn't
-match the package name, set the path manually.
-
----
-
-<a id="clean-action"></a>
-## Clean action
-
-Every template task includes a Clean action. It:
-
-1. Checks that the working directory is a real absolute path inside the current
- workspace. Clean refuses to run if the path resolves to `/`, `$HOME`, or
- anywhere outside the workspace root, and shows a warning instead.
-2. If the project's `build.zig` exposes an `uninstall` step (already in the
- step discovery cache), runs `zig build uninstall` first.
-3. Removes `.zig-cache`, `zig-cache`, and `zig-out` with `rm -rf`.
-
-The [Current Zig File](#current-zig-file) automatic task's Clean action
-applies the same logic but targets the nearest ancestor directory that contains
-a `build.zig`, rather than a configured working directory.
-
----
-
-<a id="inline-issues"></a>
-## Inline issue reporting
-
-Compiler and test errors are shown as inline annotations in the editor using
-the pattern:
-
-```
-<file>:<line>:<column>: error: <message>
-<file>:<line>:<column>: warning: <message>
-```
-
-This covers output from `zig build`, `zig build test`, `zig run`, `zig test`,
-and `zig fmt` (non-`--check` mode).
-
-`zig fmt --check` only prints filenames, not line numbers, so it does not
-produce inline annotations.
-
-For the **Zig Watch** template, annotations are populated from the first build
-cycle only. Subsequent automatic rebuilds do not update them — stop and restart
-the task to refresh.
-
----
-
-<a id="settings"></a>
-## Settings reference
-
-Settings live in two places:
-
-- **Nova Preferences → Extensions → Zig** — global defaults for all projects.
-- **Project Settings → Zig** — workspace-specific overrides. These take
- precedence over the global settings for the open project.
-
-### Tooling
-
-| Setting | Description |
-|---|---|
-| Zig Executable | Absolute path to `zig`. Leave blank to discover from `PATH`. |
-| ZLS Executable | Absolute path to `zls`. Leave blank to discover from `PATH`. |
-| LLDB DAP Executable | Absolute path to `lldb-dap`. Leave blank to discover via `xcrun` or `PATH`. |
-
-### Language Server
-
-| Setting | Default | Description |
-|---|---|---|
-| Enable ZLS | on | Enable diagnostics, completion, hover, go-to-definition, and formatting via ZLS. |
-| Build On Save | off | Allow ZLS to run its build/check runner when you save a file. |
-| Debug Server Messages | off | Log ZLS protocol traffic to the Extension Console (for troubleshooting). |
-
-### Debug Adapter
-
-| Setting | Default | Description |
-|---|---|---|
-| Enable Proxy Log | off | Write lldb-dap proxy traffic to a log file. For extension development only. |
-
-### Tasks
-
-| Setting | Default | Description |
-|---|---|---|
-| Discover Build Steps | on | Run `zig build --list-steps` and surface each step as a task. Disable for projects where executing `build.zig` on activation is undesirable. |