diff options
| author | David Czihak <git@dcz.at> | 2026-05-08 03:00:15 +0200 |
|---|---|---|
| committer | David Czihak <git@dcz.at> | 2026-05-08 03:00:15 +0200 |
| commit | b9d713336bd4fdc5e40899257b1fe7a356ca8dcf (patch) | |
| tree | e1d2860ddf998a9507db45f04a67670c34c336aa /extension.json | |
| parent | fa99e9c7564bafef500ec3b2218859319098ee74 (diff) | |
Feat: New task system
This commit brings a complete rewrite of the task system to align the Zig build system and Nova task system as closely as possible. Lots of new options and settings have been added to the tasks, and the Zig extension will auto-detect tasks from the `zig build --list-steps` command. Should you prefer to add tasks manually, or need a more fine-grained control, the auto-detection can be disabled.
This rewrite has not yet been thoroughly tested and will likely be a little rough around the edges.
Diffstat (limited to 'extension.json')
| -rw-r--r-- | extension.json | 304 |
1 files changed, 261 insertions, 43 deletions
diff --git a/extension.json b/extension.json index 8f455cd..83e5934 100644 --- a/extension.json +++ b/extension.json @@ -102,6 +102,20 @@ "description": "Write lldb-dap-proxy traffic to a log file in the extension's storage directory. For extension development only." } ] + }, + { + "type": "section", + "title": "Tasks", + "description": "Controls for the task system.", + "children": [ + { + "key": "at.dcz.nova-zig.tasks.discover-steps", + "title": "Discover Build Steps", + "type": "boolean", + "default": true, + "description": "Run `zig build --list-steps` and surface each step as a task in the task list. Disable for projects where running build.zig on activation is undesirable." + } + ] } ], "configWorkspace": [ @@ -170,6 +184,19 @@ "description": "Write lldb-dap-proxy traffic to a log file in the extension's storage directory. For extension development only." } ] + }, + { + "type": "section", + "title": "Tasks", + "description": "Workspace-specific task settings.", + "children": [ + { + "key": "at.dcz.nova-zig.tasks.discover-steps", + "title": "Discover Build Steps", + "type": "boolean", + "description": "Run `zig build --list-steps` and surface each step as a task in the task list. Disable for projects where running build.zig on activation is undesirable." + } + ] } ], "issueMatchers": { @@ -224,9 +251,36 @@ "key": "runStep", "title": "Run Step", "type": "string", - "default": "run", - "placeholder": "run", - "description": "The `zig build` step to execute for the Run action." + "default": "", + "placeholder": "install", + "description": "The `zig build` step to execute for the Run action. Leave blank to run `zig build` with no step (Zig's default install step)." + }, + { + "key": "optimize", + "title": "Optimize", + "type": "enum", + "default": "", + "values": [ + ["", "Project Default"], + ["Debug", "Debug"], + ["ReleaseSafe", "ReleaseSafe"], + ["ReleaseFast", "ReleaseFast"], + ["ReleaseSmall", "ReleaseSmall"] + ], + "description": "Passed as `-Doptimize=<mode>`. Leave on Project Default to let `build.zig` decide." + }, + { + "key": "target", + "title": "Target", + "type": "string", + "placeholder": "host", + "description": "Cross-compile target triple, passed as `-Dtarget=`. Leave blank for the host." + }, + { + "key": "userOptions", + "title": "User Options", + "type": "stringArray", + "description": "Custom `-D` flags. Each entry is `key` (boolean flag) or `key=value`." }, { "key": "buildArgs", @@ -239,23 +293,35 @@ "title": "Program Arguments", "type": "stringArray", "description": "Arguments passed after `--` to the built program." + }, + { + "key": "console", + "title": "Console", + "type": "enum", + "default": "internalConsole", + "values": [ + ["internalConsole", "Internal Console"], + ["externalTerminal", "External Terminal"] + ], + "description": "Where to run the program. External Terminal launches the macOS Terminal app." } ] }, - "zigBuildRunTerminal": { - "name": "Zig Package (macOS Terminal)", - "description": "Build a Zig package and run it in the external macOS Terminal app.", + "zigDebug": { + "name": "Zig Debug", + "description": "Build a Zig package in Debug mode and launch it under lldb-dap.", "tasks": { "build": { "resolve": "at.dcz.nova-zig.tasks", "data": { - "type": "build" + "type": "build-debug" } }, "run": { "resolve": "at.dcz.nova-zig.tasks", + "buildBeforeRunning": true, "data": { - "type": "build-run-terminal" + "type": "debug" } }, "clean": { @@ -276,42 +342,88 @@ "placeholder": "Workspace Root" }, { - "key": "runStep", - "title": "Run Step", + "key": "programPath", + "title": "Program", + "type": "path", + "allowFiles": true, + "allowFolders": false, + "relative": true, + "placeholder": "zig-out/bin/app", + "description": "Path to the executable to debug. Relative paths are resolved against the working directory. Leave blank to auto-detect from `build.zig.zon`." + }, + { + "key": "optimize", + "title": "Optimize", + "type": "enum", + "default": "Debug", + "values": [ + ["Debug", "Debug"], + ["ReleaseSafe", "ReleaseSafe"], + ["ReleaseFast", "ReleaseFast"], + ["ReleaseSmall", "ReleaseSmall"] + ], + "description": "Passed as `-Doptimize=<mode>`. Debug is the recommended default for stepping through code." + }, + { + "key": "target", + "title": "Target", "type": "string", - "default": "run", - "placeholder": "run", - "description": "The `zig build` step to execute for the Run action." + "placeholder": "host", + "description": "Cross-compile target triple, passed as `-Dtarget=`. Leave blank for the host." + }, + { + "key": "userOptions", + "title": "User Options", + "type": "stringArray", + "description": "Custom `-D` flags. Each entry is `key` (boolean flag) or `key=value`." }, { "key": "buildArgs", "title": "Build Arguments", "type": "stringArray", - "description": "Additional arguments appended after `zig build` for both Build and Run." + "description": "Additional arguments appended after `zig build`." }, { "key": "runArgs", "title": "Program Arguments", "type": "stringArray", - "description": "Arguments passed after `--` to the built program." + "description": "Arguments passed to the debugged program." + }, + { + "key": "console", + "title": "Console", + "type": "enum", + "default": "internalConsole", + "values": [ + ["internalConsole", "Internal Console"], + ["integratedTerminal", "Integrated Terminal"], + ["externalTerminal", "External Terminal"] + ], + "description": "Where the debugged program should run." + }, + { + "key": "stopOnEntry", + "title": "Stop On Entry", + "type": "boolean", + "default": false, + "description": "Pause immediately when the program starts." } ] }, - "zigDebug": { - "name": "Zig Debug", - "description": "Build a Zig package in Debug mode and launch it under lldb-dap.", + "zigTest": { + "name": "Zig Test", + "description": "Run `zig build test` with optional --test-filter and --summary controls.", "tasks": { "build": { "resolve": "at.dcz.nova-zig.tasks", "data": { - "type": "build-debug" + "type": "test-build" } }, "run": { "resolve": "at.dcz.nova-zig.tasks", - "buildBeforeRunning": true, "data": { - "type": "debug" + "type": "test-run" } }, "clean": { @@ -332,45 +444,151 @@ "placeholder": "Workspace Root" }, { - "key": "programPath", - "title": "Program", - "type": "path", - "allowFiles": true, - "allowFolders": false, - "relative": true, - "placeholder": "zig-out/bin/app", - "description": "Path to the executable to debug. Relative paths are resolved against the working directory." + "key": "testFilter", + "title": "Test Filter", + "type": "string", + "placeholder": "substring of test name", + "description": "Substring of the test name. Passed as `--test-filter`." + }, + { + "key": "summary", + "title": "Summary", + "type": "enum", + "default": "", + "values": [ + ["", "Default"], + ["all", "All"], + ["failures", "Failures only"], + ["none", "None"] + ], + "description": "Controls `zig build`'s --summary verbosity." + }, + { + "key": "optimize", + "title": "Optimize", + "type": "enum", + "default": "", + "values": [ + ["", "Project Default"], + ["Debug", "Debug"], + ["ReleaseSafe", "ReleaseSafe"], + ["ReleaseFast", "ReleaseFast"], + ["ReleaseSmall", "ReleaseSmall"] + ], + "description": "Passed as `-Doptimize=<mode>`." + }, + { + "key": "target", + "title": "Target", + "type": "string", + "placeholder": "host", + "description": "Cross-compile target triple, passed as `-Dtarget=`. Leave blank for the host." + }, + { + "key": "userOptions", + "title": "User Options", + "type": "stringArray", + "description": "Custom `-D` flags. Each entry is `key` (boolean flag) or `key=value`." }, { "key": "buildArgs", "title": "Build Arguments", "type": "stringArray", - "description": "Additional arguments appended after `zig build -Doptimize=Debug`." + "description": "Additional arguments appended after `zig build test`." }, { "key": "runArgs", "title": "Program Arguments", "type": "stringArray", - "description": "Arguments passed to the debugged program." + "description": "Arguments passed after `--` to the test runner." + } + ] + }, + "zigWatch": { + "name": "Zig Watch", + "description": "Run `zig build --watch` and rebuild on file changes. Note: inline issues only update on the first build cycle — Nova's matchers do not re-arm for streaming output.", + "tasks": { + "build": { + "resolve": "at.dcz.nova-zig.tasks", + "data": { + "type": "watch" + } + }, + "clean": { + "resolve": "at.dcz.nova-zig.tasks", + "data": { + "type": "clean" + } + } + }, + "config": [ + { + "key": "cwd", + "title": "Working Directory", + "type": "path", + "allowFiles": false, + "allowFolders": true, + "relative": true, + "placeholder": "Workspace Root" }, { - "key": "console", - "title": "Console", + "key": "step", + "title": "Step", + "type": "string", + "default": "", + "placeholder": "install", + "description": "Build step to watch. Leave blank for `zig build`'s default install step." + }, + { + "key": "debounceMs", + "title": "Debounce (ms)", + "type": "number", + "description": "Passed as `--debounce <N>`. Leave blank for Zig's default." + }, + { + "key": "incremental", + "title": "Incremental", "type": "enum", - "default": "internalConsole", + "default": "", "values": [ - ["internalConsole", "Internal Console"], - ["integratedTerminal", "Integrated Terminal"], - ["externalTerminal", "External Terminal"] + ["", "Default"], + ["on", "On"], + ["off", "Off"] ], - "description": "Where the debugged program should run." + "description": "Toggle `-fincremental` / `-fno-incremental`." }, { - "key": "stopOnEntry", - "title": "Stop On Entry", - "type": "boolean", - "default": false, - "description": "Pause immediately when the program starts." + "key": "optimize", + "title": "Optimize", + "type": "enum", + "default": "", + "values": [ + ["", "Project Default"], + ["Debug", "Debug"], + ["ReleaseSafe", "ReleaseSafe"], + ["ReleaseFast", "ReleaseFast"], + ["ReleaseSmall", "ReleaseSmall"] + ], + "description": "Passed as `-Doptimize=<mode>`." + }, + { + "key": "target", + "title": "Target", + "type": "string", + "placeholder": "host", + "description": "Cross-compile target triple, passed as `-Dtarget=`. Leave blank for the host." + }, + { + "key": "userOptions", + "title": "User Options", + "type": "stringArray", + "description": "Custom `-D` flags. Each entry is `key` (boolean flag) or `key=value`." + }, + { + "key": "buildArgs", + "title": "Build Arguments", + "type": "stringArray", + "description": "Additional arguments appended after `zig build`." } ] } |
