Skip to content

Comments

feat: add clap-sort unit test and sort CLI flags alphabetically#419

Merged
jdx merged 1 commit intomainfrom
feat/add-clap-sort-test
Nov 14, 2025
Merged

feat: add clap-sort unit test and sort CLI flags alphabetically#419
jdx merged 1 commit intomainfrom
feat/add-clap-sort-test

Conversation

@jdx
Copy link
Owner

@jdx jdx commented Nov 14, 2025

Summary

  • Added clap-sort dependency (same as mise uses) to enforce alphabetical flag ordering
  • Added test_subcommands_are_sorted unit test to verify all CLI flags are alphabetically sorted
  • Reordered CLI flags across multiple commands to satisfy the test

Context

Following the pattern from the mise repository, this PR adds automated testing to ensure CLI flags remain alphabetically sorted. This improves CLI consistency and maintainability.

Changes

  • Cargo.toml: Added clap-sort = "1" as dev dependency
  • src/cli/mod.rs: Added test_subcommands_are_sorted unit test
  • src/hook_options.rs: Reordered flags to be alphabetically sorted
    • Short flags: -a, -c, -e, -f, -g, -P, -S
    • Long-only flags: --fail-fast, --from-ref, --no-fail-fast, --skip-step, --stash, --to-ref
  • src/cli/migrate/pre_commit.rs: Reordered flags (-c, -f, -o)
  • src/cli/test.rs: Reordered flags (--list, --name, --step)

Test plan

  • All existing tests pass (115 tests)
  • New clap-sort test passes
  • Pre-commit hooks pass (cargo-fmt, cargo-check, etc.)
  • Verified CLI help output still correct

🤖 Generated with Claude Code


Note

Adds a clap-sort-based unit test to enforce alphabetical CLI flag ordering and reorders flags across commands to satisfy it.

  • Testing:
    • Add clap-sort (dev-dependency) and test_subcommands_are_sorted to validate alphabetical ordering of CLI options.
  • CLI:
    • Reorder flags in src/hook_options.rs::HookOptions, src/cli/test.rs::Test, and src/cli/migrate/pre_commit.rs::PreCommit to be alphabetically sorted.
  • Build/Config:
    • Update Cargo.toml to include clap-sort under [dev-dependencies].

Written by Cursor Bugbot for commit 96b870a. This will update automatically on new commits. Configure here.

Add clap-sort dependency and unit test to ensure CLI flags are
alphabetically sorted, following the pattern from mise. This helps
maintain consistent and predictable CLI flag ordering.

Changes:
- Added clap-sort as dev dependency
- Added test_subcommands_are_sorted unit test in src/cli/mod.rs
- Reordered flags in HookOptions to be alphabetically sorted by short flag
- Reordered long-only flags in HookOptions to be alphabetically sorted
- Reordered flags in migrate pre-commit subcommand (-c, -f, -o)
- Reordered flags in test subcommand (--list, --name, --step)

All cargo tests pass including the new clap-sort test.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>
@jdx jdx enabled auto-merge (squash) November 14, 2025 12:14
@jdx jdx merged commit ae81c8a into main Nov 14, 2025
16 checks passed
@jdx jdx deleted the feat/add-clap-sort-test branch November 14, 2025 12:17
@jdx jdx mentioned this pull request Nov 14, 2025
jdx added a commit that referenced this pull request Nov 15, 2025
## [1.21.0](https://github.com/jdx/hk/compare/v1.20.0..v1.21.0) -
2025-11-15

### 🚀 Features

- **(dprint)** new builtin by [@scop](https://github.com/scop) in
[#402](#402)
- **(mypy,ruff,ruff_format)** associate with .pyi by
[@scop](https://github.com/scop) in
[#404](#404)
- **(prettier)** support Vue files by
[@minusfive](https://github.com/minusfive) in
[#388](#388)
- **(terraform,tofu)** include .tftest.hcl in glob by
[@scop](https://github.com/scop) in
[#397](#397)
- **(tflint)** add fix command by [@scop](https://github.com/scop) in
[#401](#401)
- **(typos)** new builtin by [@scop](https://github.com/scop) in
[#400](#400)
- use recursive glob patterns in all builtins by
[@jdx](https://github.com/jdx) in
[#383](#383)
- shfmt improvements by [@scop](https://github.com/scop) in
[#410](#410)
- add content-based file type matching by [@jdx](https://github.com/jdx)
in [#416](#416)
- add clap-sort unit test and sort CLI flags alphabetically by
[@jdx](https://github.com/jdx) in
[#419](#419)
- Add alternate config directory support with tests by
[@jdx](https://github.com/jdx) in
[#407](#407)

### 🐛 Bug Fixes

- **(golangci-lint)** check with --fix=false by
[@scop](https://github.com/scop) in
[#399](#399)
- **(shfmt)** don't pass -s by [@scop](https://github.com/scop) in
[#398](#398)
- **(tf_lint)** don't pass filenames by [@scop](https://github.com/scop)
in [#396](#396)
- Import elixir builtins by [@arthurcogo](https://github.com/arthurcogo)
in [#390](#390)
- Add warning for existing Git hooks path by
[@jdx](https://github.com/jdx) in
[#409](#409)
- prevent untracked files from being staged with <JOB_FILES> by
[@jdx](https://github.com/jdx) in
[#408](#408)

### 📚 Documentation

- Add Elixir builtins to docs by
[@arthurcogo](https://github.com/arthurcogo) in
[#389](#389)
- glossary grammar fix by [@scop](https://github.com/scop) in
[#395](#395)
- fix link to Pkl language docs by [@scop](https://github.com/scop) in
[#394](#394)

### 📦️ Dependency Updates

- update anthropics/claude-code-action digest to 8a1c437 by
[@renovate[bot]](https://github.com/renovate[bot]) in
[#391](#391)
- update jdx/mise-action digest to be3be22 by
[@renovate[bot]](https://github.com/renovate[bot]) in
[#392](#392)
- update github artifact actions (major) by
[@renovate[bot]](https://github.com/renovate[bot]) in
[#393](#393)
- update rust crate infer to 0.19 by
[@renovate[bot]](https://github.com/renovate[bot]) in
[#418](#418)
- update jdx/mise-action digest to 9dc7d5d by
[@renovate[bot]](https://github.com/renovate[bot]) in
[#417](#417)

### New Contributors

- @scop made their first contribution in
[#410](#410)
- @arthurcogo made their first contribution in
[#390](#390)
- @minusfive made their first contribution in
[#388](#388)

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> Cut v1.21.0: bump versions, add changelog, refresh CLI docs/usage with
alphabetized flags, update templates/messages, and tweak deps.
> 
> - **Release 1.21.0**:
> - Bump `hk` version to `1.21.0` across `Cargo.toml`, `Cargo.lock`,
`hk.usage.kdl`, docs, and example configs.
>   - Add `CHANGELOG.md` entry for 1.21.0.
> - **CLI/Docs**:
> - Regenerate `docs/cli/commands.json`, CLI markdown, and
`hk.usage.kdl` with alphabetized flags and reordered options (e.g.,
`--fix`, `--from-ref`, `--to-ref`, `--skip-step`).
>   - Update migration docs flag order (`--force` before `--output`).
>   - Update `hk test` flags (add `--list`, reorder `--name`/`--step`).
> - **Templates/References**:
> - Update Pkl `amends/import` URLs in examples and generator
(`src/cli/init.rs`) to `v1.21.0`.
>   - Update Pkl error hint in `src/config.rs` to reference `v1.21.0`.
> - **Dependencies**:
>   - Bump crates (`bytes` 1.11.0, `serde_with` 3.16.0) in `Cargo.lock`.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
93af5e6. 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 21, 2025
This MR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [hk](https://github.com/jdx/hk) | minor | `1.20.0` -> `1.22.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.22.0`](https://github.com/jdx/hk/blob/HEAD/CHANGELOG.md#1220---2025-11-19)

[Compare Source](jdx/hk@v1.21.1...v1.22.0)

##### 🚀 Features

- Add `stdin` to step config by [@&#8203;thejcannon](https://github.com/thejcannon) in [#&#8203;435](jdx/hk#435)

##### 🐛 Bug Fixes

- save patch backup files when using git as stash method by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;434](jdx/hk#434)

##### 📚 Documentation

- Clarify `stash` default (behavior) by [@&#8203;thejcannon](https://github.com/thejcannon) in [#&#8203;431](jdx/hk#431)
- Clarify hook fix default by [@&#8203;thejcannon](https://github.com/thejcannon) in [#&#8203;433](jdx/hk#433)

### [`v1.21.1`](https://github.com/jdx/hk/blob/HEAD/CHANGELOG.md#1211---2025-11-19)

[Compare Source](jdx/hk@v1.21.0...v1.21.1)

##### 🐛 Bug Fixes

- **(ruff)** Make `ruff` respect user config `exclude` by [@&#8203;thejcannon](https://github.com/thejcannon) in [#&#8203;421](jdx/hk#421)
- **(ruff\_format)** Pass `--force-exclude` to `ruff format` (as well) by [@&#8203;thejcannon](https://github.com/thejcannon) in [#&#8203;428](jdx/hk#428)
- Fix --check docstring by [@&#8203;thejcannon](https://github.com/thejcannon) in [#&#8203;423](jdx/hk#423)
- Configuration Read Support YML File Extension by [@&#8203;hcoona](https://github.com/hcoona) in [#&#8203;427](jdx/hk#427)
- treat check\_list\_files stderr as informational, not an error by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;425](jdx/hk#425)
- remove trailing whitespace in ruff\_format.pkl by [@&#8203;jdx](https://github.com/jdx) in [9f4abdc](jdx/hk@9f4abdc)

##### 🚜 Refactor

- Enable `trailing-whitespace` in this repo by [@&#8203;thejcannon](https://github.com/thejcannon) in [#&#8203;429](jdx/hk#429)

##### 📚 Documentation

- Don't suggest configuring hk in config env by [@&#8203;thejcannon](https://github.com/thejcannon) in [#&#8203;424](jdx/hk#424)

##### New Contributors

- [@&#8203;thejcannon](https://github.com/thejcannon) made their first contribution in [#&#8203;428](jdx/hk#428)
- [@&#8203;hcoona](https://github.com/hcoona) made their first contribution in [#&#8203;427](jdx/hk#427)

### [`v1.21.0`](https://github.com/jdx/hk/blob/HEAD/CHANGELOG.md#1210---2025-11-15)

[Compare Source](jdx/hk@v1.20.0...v1.21.0)

##### 🚀 Features

- **(dprint)** new builtin by [@&#8203;scop](https://github.com/scop) in [#&#8203;402](jdx/hk#402)
- **(mypy,ruff,ruff\_format)** associate with .pyi by [@&#8203;scop](https://github.com/scop) in [#&#8203;404](jdx/hk#404)
- **(prettier)** support Vue files by [@&#8203;minusfive](https://github.com/minusfive) in [#&#8203;388](jdx/hk#388)
- **(terraform,tofu)** include .tftest.hcl in glob by [@&#8203;scop](https://github.com/scop) in [#&#8203;397](jdx/hk#397)
- **(tflint)** add fix command by [@&#8203;scop](https://github.com/scop) in [#&#8203;401](jdx/hk#401)
- **(typos)** new builtin by [@&#8203;scop](https://github.com/scop) in [#&#8203;400](jdx/hk#400)
- use recursive glob patterns in all builtins by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;383](jdx/hk#383)
- shfmt improvements by [@&#8203;scop](https://github.com/scop) in [#&#8203;410](jdx/hk#410)
- add content-based file type matching by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;416](jdx/hk#416)
- add clap-sort unit test and sort CLI flags alphabetically by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;419](jdx/hk#419)
- Add alternate config directory support with tests by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;407](jdx/hk#407)

##### 🐛 Bug Fixes

- **(golangci-lint)** check with --fix=false by [@&#8203;scop](https://github.com/scop) in [#&#8203;399](jdx/hk#399)
- **(shfmt)** don't pass -s by [@&#8203;scop](https://github.com/scop) in [#&#8203;398](jdx/hk#398)
- **(tf\_lint)** don't pass filenames by [@&#8203;scop](https://github.com/scop) in [#&#8203;396](jdx/hk#396)
- Import elixir builtins by [@&#8203;arthurcogo](https://github.com/arthurcogo) in [#&#8203;390](jdx/hk#390)
- Add warning for existing Git hooks path by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;409](jdx/hk#409)
- prevent untracked files from being staged with \<JOB\_FILES> by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;408](jdx/hk#408)

##### 📚 Documentation

- Add Elixir builtins to docs by [@&#8203;arthurcogo](https://github.com/arthurcogo) in [#&#8203;389](jdx/hk#389)
- glossary grammar fix by [@&#8203;scop](https://github.com/scop) in [#&#8203;395](jdx/hk#395)
- fix link to Pkl language docs by [@&#8203;scop](https://github.com/scop) in [#&#8203;394](jdx/hk#394)

##### 📦️ Dependency Updates

- update anthropics/claude-code-action digest to [`8a1c437`](jdx/hk@8a1c437) by [@&#8203;renovate\[bot\]](https://github.com/renovate\[bot]) in [#&#8203;391](jdx/hk#391)
- update jdx/mise-action digest to [`be3be22`](jdx/hk@be3be22) by [@&#8203;renovate\[bot\]](https://github.com/renovate\[bot]) in [#&#8203;392](jdx/hk#392)
- update github artifact actions (major) by [@&#8203;renovate\[bot\]](https://github.com/renovate\[bot]) in [#&#8203;393](jdx/hk#393)
- update rust crate infer to 0.19 by [@&#8203;renovate\[bot\]](https://github.com/renovate\[bot]) in [#&#8203;418](jdx/hk#418)
- update jdx/mise-action digest to [`9dc7d5d`](jdx/hk@9dc7d5d) by [@&#8203;renovate\[bot\]](https://github.com/renovate\[bot]) in [#&#8203;417](jdx/hk#417)

##### New Contributors

- [@&#8203;scop](https://github.com/scop) made their first contribution in [#&#8203;410](jdx/hk#410)
- [@&#8203;arthurcogo](https://github.com/arthurcogo) made their first contribution in [#&#8203;390](jdx/hk#390)
- [@&#8203;minusfive](https://github.com/minusfive) made their first contribution in [#&#8203;388](jdx/hk#388)

</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:eyJjcmVhdGVkSW5WZXIiOiI0MS4xNzMuMSIsInVwZGF0ZWRJblZlciI6IjQxLjE3My4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJSZW5vdmF0ZSBCb3QiXX0=-->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant