Conversation
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## master #2702 +/- ##
==========================================
+ Coverage 94.10% 94.15% +0.05%
==========================================
Files 141 142 +1
Lines 30066 30218 +152
==========================================
+ Hits 28293 28453 +160
+ Misses 1773 1765 -8 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 04f42f5e79
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
🟡 Changes recommended
The new test currently depends on host uv availability and the env-parsing unit test should be updated to cover the added none branch.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Pull request overview
Adds support for PREK_UV_SOURCE=none so users can disable prek’s automatic uv installation and instead require an already-available compatible uv (alongside the prek binary, on PATH, or already in prek’s tools cache).
Changes:
- Document
PREK_UV_SOURCE=nonebehavior in the env var reference and Python language docs. - Implement a
noneinstall source that fails with a clear error when no compatibleuvis found. - Add an integration test covering the
nonebehavior.
File summaries
| File | Description |
|---|---|
| docs/reference/environment-variables.md | Documents the new none option and clarifies how prek behaves when auto-install is disabled. |
| docs/languages.md | Adds a pointer telling users how to disable automatic uv installation for Python hooks. |
| crates/prek/tests/languages/python.rs | Adds an integration test for PREK_UV_SOURCE=none behavior. |
| crates/prek/src/languages/python/uv.rs | Implements InstallSource::None and parses PREK_UV_SOURCE=none; updates invalid-value warning text. |
Review details
- Files reviewed: 4/4 changed files
- Comments generated: 3
- Review effort level: Lite
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
📦 Cargo Bloat Comparison
Expand for cargo-bloat outputHead Branch ResultsBase Branch Results |
⚡️ Hyperfine BenchmarksSummary: 0 regressions, 0 improvements above the 10% threshold. Environment
CLI CommandsBenchmarking basic commands in the main repo:
|
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base --version |
2.3 ± 0.2 | 2.1 | 3.3 | 1.04 ± 0.08 |
prek-head --version |
2.2 ± 0.1 | 2.1 | 2.6 | 1.00 |
prek list
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base list |
9.3 ± 0.2 | 8.9 | 9.7 | 1.00 ± 0.03 |
prek-head list |
9.3 ± 0.2 | 8.9 | 10.1 | 1.00 |
prek validate-config .pre-commit-config.yaml
⏭️ Skipped: .pre-commit-config.yaml not found
prek sample-config
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base sample-config |
2.5 ± 0.1 | 2.4 | 2.8 | 1.00 |
prek-head sample-config |
2.6 ± 0.2 | 2.4 | 3.2 | 1.03 ± 0.07 |
Cold vs Warm Runs
Comparing first run (cold) vs subsequent runs (warm cache):
prek run --all-files (cold - no cache)
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run --all-files |
41.4 ± 2.0 | 38.2 | 45.1 | 1.06 ± 0.06 |
prek-head run --all-files |
39.1 ± 1.1 | 37.1 | 40.3 | 1.00 |
prek run --all-files (warm - with cache)
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run --all-files |
40.1 ± 1.4 | 37.8 | 42.8 | 1.00 |
prek-head run --all-files |
40.1 ± 1.3 | 37.4 | 42.0 | 1.00 ± 0.05 |
Full Hook Suite
Running the builtin hook suite on the benchmark workspace:
prek run --all-files (full builtin hook suite)
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run --all-files |
39.9 ± 2.3 | 37.5 | 54.2 | 1.00 |
prek-head run --all-files |
40.6 ± 1.3 | 36.8 | 43.6 | 1.02 ± 0.07 |
Individual Hook Performance
Benchmarking each hook individually on the test repo:
prek run trailing-whitespace --all-files
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run trailing-whitespace --all-files |
13.7 ± 0.5 | 12.7 | 14.9 | 1.01 ± 0.05 |
prek-head run trailing-whitespace --all-files |
13.6 ± 0.4 | 13.0 | 14.4 | 1.00 |
prek run end-of-file-fixer --all-files
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run end-of-file-fixer --all-files |
11.9 ± 0.5 | 10.6 | 12.9 | 1.01 ± 0.06 |
prek-head run end-of-file-fixer --all-files |
11.7 ± 0.5 | 10.8 | 12.7 | 1.00 |
prek run check-json --all-files
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run check-json --all-files |
8.0 ± 0.3 | 7.4 | 8.8 | 1.00 |
prek-head run check-json --all-files |
8.2 ± 0.5 | 7.4 | 9.6 | 1.03 ± 0.07 |
prek run check-yaml --all-files
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run check-yaml --all-files |
8.1 ± 0.4 | 7.7 | 9.4 | 1.04 ± 0.06 |
prek-head run check-yaml --all-files |
7.8 ± 0.2 | 7.6 | 8.4 | 1.00 |
prek run check-toml --all-files
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run check-toml --all-files |
7.9 ± 0.3 | 7.3 | 8.4 | 1.00 |
prek-head run check-toml --all-files |
7.9 ± 0.6 | 7.4 | 9.8 | 1.00 ± 0.08 |
prek run check-xml --all-files
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run check-xml --all-files |
7.8 ± 0.3 | 7.3 | 8.5 | 1.00 |
prek-head run check-xml --all-files |
7.8 ± 0.4 | 7.2 | 9.1 | 1.00 ± 0.06 |
prek run detect-private-key --all-files
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run detect-private-key --all-files |
11.3 ± 0.6 | 10.0 | 13.0 | 1.00 |
prek-head run detect-private-key --all-files |
12.0 ± 0.5 | 11.2 | 13.2 | 1.06 ± 0.07 |
prek run fix-byte-order-marker --all-files
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run fix-byte-order-marker --all-files |
13.9 ± 1.0 | 12.5 | 16.2 | 1.03 ± 0.10 |
prek-head run fix-byte-order-marker --all-files |
13.5 ± 0.8 | 12.2 | 15.9 | 1.00 |
Installation Performance
Benchmarking hook installation (fast path hooks skip Python setup):
prek install-hooks (cold - no cache)
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base install-hooks |
4.5 ± 0.0 | 4.5 | 4.6 | 1.00 |
prek-head install-hooks |
4.6 ± 0.2 | 4.5 | 4.9 | 1.03 ± 0.04 |
prek install-hooks (warm - with cache)
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base install-hooks |
4.9 ± 0.1 | 4.8 | 5.0 | 1.03 ± 0.03 |
prek-head install-hooks |
4.8 ± 0.1 | 4.7 | 4.9 | 1.00 |
File Filtering/Scoping Performance
Testing different file selection modes:
prek run (staged files only)
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run |
24.7 ± 0.4 | 24.2 | 25.5 | 1.00 |
prek-head run |
25.0 ± 0.8 | 24.0 | 27.3 | 1.01 ± 0.04 |
prek run --files '*.json' (specific file type)
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run --files '*.json' |
5.7 ± 0.2 | 5.3 | 6.1 | 1.01 ± 0.04 |
prek-head run --files '*.json' |
5.6 ± 0.1 | 5.4 | 5.9 | 1.00 |
Workspace Discovery & Initialization
Benchmarking hook discovery and initialization overhead:
prek run --dry-run --all-files (measures init overhead)
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run --dry-run --all-files |
7.2 ± 0.2 | 6.9 | 7.5 | 1.01 ± 0.04 |
prek-head run --dry-run --all-files |
7.1 ± 0.2 | 6.8 | 7.5 | 1.00 |
Meta Hooks Performance
Benchmarking meta hooks separately:
prek run check-hooks-apply --all-files
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run check-hooks-apply --all-files |
8.4 ± 0.2 | 8.2 | 9.0 | 1.00 |
prek-head run check-hooks-apply --all-files |
8.7 ± 0.2 | 8.4 | 9.1 | 1.03 ± 0.04 |
prek run check-useless-excludes --all-files
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run check-useless-excludes --all-files |
8.4 ± 0.2 | 8.1 | 8.8 | 1.00 |
prek-head run check-useless-excludes --all-files |
8.5 ± 0.2 | 8.2 | 9.2 | 1.00 ± 0.03 |
prek run identity --all-files
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run identity --all-files |
7.7 ± 1.6 | 7.1 | 13.5 | 1.06 ± 0.22 |
prek-head run identity --all-files |
7.2 ± 0.1 | 7.1 | 7.3 | 1.00 |
There was a problem hiding this comment.
🟢 Approval recommended
The implementation and tests appear correct and low risk; the only feedback is a minor user-facing error-message clarity improvement.
Review details
- Files reviewed: 4/4 changed files
- Comments generated: 1
- Review effort level: Lite
Add
PREK_UV_SOURCE=noneto require an existing compatible uv and fail instead of installing it.Refs #2699.