feat: add --stats flag to show file counts per step#446
Merged
Conversation
Add a new --stats flag to the check and fix commands that displays statistics about how many files match each step's patterns. Changes: - Added --stats flag to HookOptions (hook_options.rs:32) - Implemented Hook::stats() method to collect and display statistics (hook.rs:364) - Made Step::filter_files(), is_binary_file(), and is_symlink_file() public (step.rs:33,61,359) The stats display shows: - Total number of files being processed - Run type (check or fix) - File count and percentage for each step Usage examples: - hk check --stats # Show stats for modified files - hk check --stats --all # Show stats for all repository files - hk fix --stats --all # Show stats with fix run type - hk check --stats --step foo # Show stats for specific step(s) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
Move --stats flag to appear after --stash to maintain alphabetical ordering of long-only flags as required by clap-sort test. Fixes the test_subcommands_are_sorted test failure. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
Generate documentation for the new --stats flag using mise run render. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
Fix two bugs in the stats method: 1. Stats now checks if steps have commands for the current run type - Steps without check/fix commands are shown as skipped - Prevents misleading file counts for steps that won't actually run 2. Stats now respects skip configuration - Honors --skip-step CLI flags - Honors HK_SKIP_STEPS environment variable - Honors skip_steps from config - Shows appropriate skip reason for each skipped step Skipped steps are now displayed with dimmed text showing the skip reason instead of a file count, giving users an accurate picture of what will actually run. Examples: - cargo-clippy (skipped: profile not enabled (slow)) - cargo-fmt (skipped: disabled via --skip-step cargo-fmt) - dbg (skipped: disabled via HK_SKIP_STEPS) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
Merged
jdx
added a commit
that referenced
this pull request
Nov 21, 2025
## [1.23.0](https://github.com/jdx/hk/compare/v1.22.0..v1.23.0) - 2025-11-21 ### 🚀 Features - **(vacuum)** new builtin by [@scop](https://github.com/scop) in [#414](#414) - add --stats flag to show file counts per step by [@jdx](https://github.com/jdx) in [#446](#446) - Plumb `stage` through CLI and PKL by [@thejcannon](https://github.com/thejcannon) in [#442](#442) ### 🐛 Bug Fixes - **(cli)** check help description by [@scop](https://github.com/scop) in [#439](#439) ### 📚 Documentation - **(stash)** rephrase uncommitted -> unstaged by [@scop](https://github.com/scop) in [#451](#451) - re-Remove "auto" stash value by [@thejcannon](https://github.com/thejcannon) in [#444](#444) - Delete `schema.md` by [@thejcannon](https://github.com/thejcannon) in [#445](#445) - fix --fix description by [@scop](https://github.com/scop) in [#450](#450) ### 📦️ Dependency Updates - update actions/checkout digest to 93cb6ef by [@renovate[bot]](https://github.com/renovate[bot]) in [#452](#452) - update anthropics/claude-code-action digest to 6902c22 by [@renovate[bot]](https://github.com/renovate[bot]) in [#453](#453) <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Release 1.23.0: expose `stage` setting via CLI/PKL, add `--stage`/`--no-stage` and `--stats` flags, update docs/examples to v1.23.0, and bump deps. > > - **Release/Versioning** > - Bump version to `1.23.0` across `Cargo.toml`, CLI specs, docs, examples, and templates. > - Add `CHANGELOG.md` entry for 1.23.0. > - **CLI & Config** > - Expose `stage` setting: add `--stage` / `--no-stage` flags across `commands.json`, `hk.usage.kdl`, and CLI docs. > - Add `--stats` flag to display per-step file counts. > - Include `stage` in `hk config get` available keys. > - **Docs/Examples** > - Update all `amends`/`import` URLs and version strings to `v1.23.0`. > - Clarify `--fix` help text; refresh CLI help pages. > - **Code** > - Update init template (`src/cli/init.rs`) and Pkl error message example (`src/config.rs`) to `v1.23.0`. > - **Dependencies** > - Bump crates in `Cargo.lock` (e.g., `indexmap` → `2.12.1`, `hashbrown` → `0.16.1`, `cc` → `1.2.47`, `zerocopy` → `0.8.28`, `insta` → `1.44.1`). > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 91c5bd9. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY --> Co-authored-by: mise-en-dev <[email protected]>
tmeijn
pushed a commit
to tmeijn/dotfiles
that referenced
this pull request
Nov 27, 2025
This MR contains the following updates: | Package | Update | Change | |---|---|---| | [hk](https://github.com/jdx/hk) | minor | `1.22.0` -> `1.25.0` | MR created with the help of [el-capitano/tools/renovate-bot](https://gitlab.com/el-capitano/tools/renovate-bot). **Proposed changes to behavior should be submitted there as MRs.** --- ### Release Notes <details> <summary>jdx/hk (hk)</summary> ### [`v1.25.0`](https://github.com/jdx/hk/blob/HEAD/CHANGELOG.md#1250---2025-11-25) [Compare Source](jdx/hk@v1.24.1...v1.25.0) ##### 🚀 Features - add fix\_smart\_quotes builtin by [@​joonas](https://github.com/joonas) in [#​463](jdx/hk#463) ##### 🐛 Bug Fixes - Use `stage = "<JOB_FILES>"` for the builtins by [@​thejcannon](https://github.com/thejcannon) in [#​465](jdx/hk#465) - Actually makes `files` for step tests default to write keys by [@​thejcannon](https://github.com/thejcannon) in [#​464](jdx/hk#464) - remove test cleanup to prevent race conditions by [@​jdx](https://github.com/jdx) in [#​468](jdx/hk#468) ### [`v1.24.1`](https://github.com/jdx/hk/blob/HEAD/CHANGELOG.md#1241---2025-11-22) [Compare Source](jdx/hk@v1.24.0...v1.24.1) ##### ⚡ Performance - show progress bars before expensive git status call by [@​jdx](https://github.com/jdx) in [#​459](jdx/hk#459) ### [`v1.24.0`](https://github.com/jdx/hk/blob/HEAD/CHANGELOG.md#1240---2025-11-21) [Compare Source](jdx/hk@v1.23.0...v1.24.0) ##### 🚀 Features - hook stage by [@​thejcannon](https://github.com/thejcannon) in [#​448](jdx/hk#448) ##### 🐛 Bug Fixes - Pass/render `stdin` for `hk test` tests by [@​thejcannon](https://github.com/thejcannon) in [#​455](jdx/hk#455) ##### 📚 Documentation - Fix `from_ref` docstring by [@​thejcannon](https://github.com/thejcannon) in [#​454](jdx/hk#454) ##### ⚡ Performance - skip stash operations when no unstaged changes by [@​jdx](https://github.com/jdx) in [#​457](jdx/hk#457) - skip staging when jobs are skipped by conditions by [@​jdx](https://github.com/jdx) in [#​458](jdx/hk#458) ### [`v1.23.0`](https://github.com/jdx/hk/blob/HEAD/CHANGELOG.md#1230---2025-11-21) [Compare Source](jdx/hk@v1.22.0...v1.23.0) ##### 🚀 Features - **(vacuum)** new builtin by [@​scop](https://github.com/scop) in [#​414](jdx/hk#414) - add --stats flag to show file counts per step by [@​jdx](https://github.com/jdx) in [#​446](jdx/hk#446) - Plumb `stage` through CLI and PKL by [@​thejcannon](https://github.com/thejcannon) in [#​442](jdx/hk#442) ##### 🐛 Bug Fixes - **(cli)** check help description by [@​scop](https://github.com/scop) in [#​439](jdx/hk#439) ##### 📚 Documentation - **(stash)** rephrase uncommitted -> unstaged by [@​scop](https://github.com/scop) in [#​451](jdx/hk#451) - re-Remove "auto" stash value by [@​thejcannon](https://github.com/thejcannon) in [#​444](jdx/hk#444) - Delete `schema.md` by [@​thejcannon](https://github.com/thejcannon) in [#​445](jdx/hk#445) - fix --fix description by [@​scop](https://github.com/scop) in [#​450](jdx/hk#450) ##### 📦️ Dependency Updates - update actions/checkout digest to [`93cb6ef`](jdx/hk@93cb6ef) by [@​renovate\[bot\]](https://github.com/renovate\[bot]) in [#​452](jdx/hk#452) - update anthropics/claude-code-action digest to [`6902c22`](jdx/hk@6902c22) by [@​renovate\[bot\]](https://github.com/renovate\[bot]) in [#​453](jdx/hk#453) </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever MR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this MR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box --- This MR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0Mi4xOS4wIiwidXBkYXRlZEluVmVyIjoiNDIuMTkuNyIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiUmVub3ZhdGUgQm90Il19-->
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
--statsflag tohk checkandhk fixcommandsMotivation
Users often want to understand the scope of what
hk checkorhk fixwill process without actually running the linters/formatters. This is especially useful for:Changes
--statsflag toHookOptions(src/hook_options.rs:32)Hook::stats()method to collect and display statistics (src/hook.rs:364)Step::filter_files(),is_binary_file(), andis_symlink_file()public (src/step.rs)Usage Examples
Show stats for modified files:
Show stats for all repository files:
Show stats with fix run type:
Show stats for specific step(s):
Sample Output
Test plan
mise run buildhk check --stats(modified files)hk check --stats --all(all files)hk fix --stats --all(fix mode)hk check --stats --step cargo-fmt --step prettier(specific steps)🤖 Generated with Claude Code
Co-Authored-By: Claude [email protected]
Note
Adds a --stats flag to check/fix/run commands that prints per-step file match counts, with docs and usage updated.
--statsflag tohk check,hk fix, andhk run(includingcommit-msg,pre-commit,pre-push,prepare-commit-msg).docs/cli/*.md) and usage specs (docs/cli/commands.json,hk.usage.kdl).Hook::stats()to compute and print per-step matched file counts, considering run type and skip reasons.HookOptionsto invoke stats mode.Step::filter_files,is_binary_file, andis_symlink_filepublic for reuse.Written by Cursor Bugbot for commit 649f87e. This will update automatically on new commits. Configure here.