Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions INTEGRATIONS.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
# Integrations

ZShellCheck is verified against the script trees of widely used Zsh integrations.
Every release runs a parse and lint sweep over each — no panics, no crashes, deterministic output.
Every release runs a parse and lint sweep over the pinned corpus matrix — no panics, no crashes, deterministic output.
The heaviest Featured trees are swept manually rather than in the per-release gate, because their clones are too large to pin in CI.
The list grows with every release.

## Featured
Expand Down Expand Up @@ -140,7 +141,8 @@ To propose another corpus, follow [Adding an integration](#adding-an-integration

## How the sweep runs

Each release tag triggers a parse and lint pass over every integration listed in the **Featured** and per-category tables.
Each release tag triggers a parse and lint pass over every integration in the pinned corpus matrix.
The heaviest Featured trees, whose clones are too large to pin in CI, are swept manually instead.
Each pass produces:

- `parse_errors` — total parser failures across the integration.
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -115,8 +115,8 @@ Pin `@latest` and `rev: latest` to a tag from [Releases](https://github.com/afad
## Integrations

ZShellCheck is verified against widely used Zsh frameworks, plugin managers, plugins, and prompts on every release.
Each runs a parse-and-findings sweep: zero parser errors, zero crashes, and kata findings locked to a reviewed baseline.
The full catalog with file counts lives in [INTEGRATIONS.md](INTEGRATIONS.md).
The pinned corpus matrix runs a parse-and-findings sweep: zero parser errors, zero crashes, and kata findings locked to a reviewed baseline.
The heaviest trees are swept manually; the full catalog with file counts lives in [INTEGRATIONS.md](INTEGRATIONS.md).

| Category | Examples |
| :--- | :--- |
Expand Down
10 changes: 6 additions & 4 deletions docs/USER_GUIDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ Files with `.go`, `.md`, `.json`, `.yml`, `.yaml`, or `.txt` extensions are skip
| `-add-noka` | off | Append a `# noka: ZC####` directive to every line with a finding, write the files, and exit. |
| `-detect-stale-noka` | off | Report `# noka` directives that suppress no actual finding; exit non-zero if any. |
| `-verbose` | off | Emit full kata descriptions in text output. |
| `-no-color` | off | Disable ANSI colours. Implied when stdout is not a TTY. |
| `-no-color` | off | Disable ANSI colours in the report. |
| `-no-banner` | off | Suppress the startup banner. Implied for JSON and SARIF output and when `-no-color` is set. |
| `-cpuprofile <path>` | — | Write a Go pprof CPU profile to `<path>` for benchmarking. |
| `-fix` | off | Apply auto-fixes in place. Safe (value-preserving) fixes only, unless `-unsafe-fixes` is set. |
Expand All @@ -57,7 +57,8 @@ Files with `.go`, `.md`, `.json`, `.yml`, `.yaml`, or `.txt` extensions are skip
| Code | Meaning |
| ---: | --- |
| `0` | No violations. |
| `1` | One or more violations, a parse error, or a usage error. |
| `1` | One or more violations, a parse error, or an invalid flag value. |
| `2` | A command-line parsing error: an unknown flag, or a flag missing its value. |

### Examples

Expand Down Expand Up @@ -330,9 +331,10 @@ The set of fixable katas is listed in [KATAS.md](../KATAS.md) — every entry ca
`-fix` runs multi-pass (up to five iterations) so nested rewrites resolve in a single invocation.
Pair `-fix` with `-dry-run` to report what would change without writing.

### The SARIF output is empty after a parse error. Why?
### Why does a file with a parse error report no findings?

When the parser rejects a file, ZShellCheck exits before katas run; there is nothing to emit.
A parse error stops ZShellCheck before the katas run, so the file yields no findings and the run exits `1`.
The machine-readable formats still emit a well-formed document — JSON an empty array, SARIF a valid run with an empty `results` list — so downstream tooling always receives parseable output.
Fix the syntax (`zsh -n file.zsh` is a fast sanity check), or open an issue when valid Zsh is being rejected.

### Where does ZShellCheck look for config?
Expand Down
Loading