-
Notifications
You must be signed in to change notification settings - Fork 0
Add a prek/pre-commit hook so clang-format runs before you push, not in CI #7
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
+86
−16
Merged
Changes from all commits
Commits
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,32 @@ | ||
| # Runs the same checks CI does, before CI does — install once with `prek install` (or | ||
| # `pre-commit install`, prek reads this same file) and this runs automatically on every | ||
| # `git commit`. Skip it for one commit with `git commit --no-verify`; run it on demand | ||
| # against everything with `prek run --all-files`. | ||
| # | ||
| # Scoped to the files in the commit, not the whole tree: CI's `clang-format` job checks | ||
| # every source file on every push, but a commit here should live or die on the files it | ||
| # actually changed, not on some unrelated file elsewhere that happened to already be | ||
| # unformatted — that file is CI's problem to catch (on whatever commit touches it), not a | ||
| # reason to block this one. | ||
| # | ||
| # A local hook, not one of the upstream clang-format mirrors: those track whatever | ||
| # clang-format version they were packaged against, and scripts/format.sh already pins the | ||
| # exact version CI uses (22.1.8) so a contributor's hook and CI's job never disagree about | ||
| # what "formatted" means. Install that exact version with | ||
| # `pip install clang-format==22.1.8` — not `brew install clang-format`, whose formula | ||
| # tracks upstream's latest release rather than this pin, and will eventually drift ahead | ||
| # of it. | ||
| repos: | ||
| - repo: local | ||
| hooks: | ||
| - id: clang-format | ||
| name: clang-format (scripts/format.sh) | ||
| description: >- | ||
| Reformats the C/C++ source files in this commit in place with the pinned | ||
| clang-format, matching what CI's `clang-format` job would say about those | ||
| specific files. If it changes anything, the commit is blocked — `git add -u` | ||
| the reformatted files and commit again. | ||
| entry: scripts/format.sh | ||
| language: system | ||
| files: \.(c|h|cpp|hpp)$ | ||
| pass_filenames: true | ||
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
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
Oops, something went wrong.
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.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Bug: The pre-commit hook is skipped for commits without C/C++ files, creating a discrepancy with CI which always runs the formatter.
Severity: LOW
Suggested Fix
Add
always_run: trueto theclang-formathook configuration in.pre-commit-config.yaml. This will ensure the formatting script runs on every commit, regardless of the file types being committed, aligning local behavior with the CI process.Prompt for AI Agent