FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

Update repository revisions using parsed source spans by j178 · Pull Request #2841 · j178/prek · GitHub

/ prek Public

Update repository revisions using parsed source spans - #2841

Draft
j178 wants to merge 1 commit into
masterfrom
rev-spans
Draft

j178 wants to merge 1 commit into
masterfrom
rev-spans

Conversation

j178 commented Oct 5, 2026

Copy link
Copy Markdown
Owner

Use parsed YAML and TOML source spans to update revisions and frozen comments while preserving surrounding text, including files without a final newline. Reject edits to shared YAML nodes and block scalars.

Related to pre-commit/pre-commit#3768.

j178 added the bug Something isn't working label Oct 5, 2026

prek-ci-bot Bot commented Oct 5, 2026

Copy link
Copy Markdown

📦 Cargo Bloat Comparison

.text size change: +1.60% (12.5 MiB → 12.7 MiB)

Expand for cargo-bloat output

Head Branch Results

File  .text     Size             Crate Name
0.1%   2.5% 332.0KiB        aws_lc_sys aws_lc_0_45_0_aes_gcm_encrypt_avx512
0.1%   2.5% 332.0KiB        aws_lc_sys aws_lc_0_45_0_aes_gcm_decrypt_avx512
0.0%   0.7%  94.9KiB              prek <prek::cli::Command as clap_builder::derive::Subcommand>::augment_subcommands
0.0%   0.4%  50.3KiB annotate_snippets annotate_snippets::renderer::render::render
0.0%   0.4%  47.5KiB              prek <<prek::config::hook::HookWire as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_map::<&mut <serde_saphyr::de::deserializer::YamlDeserializer as serde_core::de::Deserializer>::deserialize_map::MA>
0.0%   0.3%  45.0KiB              prek <<prek::config::Config as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_map::<&mut <serde_saphyr::de::deserializer::YamlDeserializer as serde_core::de::Deserializer>::deserialize_map::MA>
0.0%   0.3%  41.2KiB              prek <prek::cli::RunOptions as clap_builder::derive::Args>::augment_args
0.0%   0.3%  37.7KiB              prek prek::run::{closure#0}
0.0%   0.3%  33.8KiB              prek <prek::languages::rust::rust::Rust as prek::languages::LanguageBackend>::install::{closure#0}
0.0%   0.2%  29.5KiB      serde_saphyr <granit_parser::scanner::Scanner<granit_parser::input::str::StrInput>>::fetch_more_tokens
0.0%   0.2%  28.7KiB              prek prek::archive::unpack::<fs_err::tokio::file::File, &std::path::PathBuf>::{closure#0}
0.0%   0.2%  28.0KiB              prek prek::cli::run::run::run::{closure#0}
0.0%   0.2%  28.0KiB              toml <toml::de::deserializer::value::ValueDeserializer as serde_core::de::Deserializer>::deserialize_any::<<prek::config::hook::HookWire as serde_core::de::Deserialize>::deserialize::__Visitor>
0.0%   0.2%  28.0KiB        aws_lc_sys aws_lc_0_45_0_edwards25519_scalarmuldouble_alt
0.0%   0.2%  27.5KiB        aws_lc_sys aws_lc_0_45_0_edwards25519_scalarmuldouble
0.0%   0.2%  27.3KiB              prek prek::archive::unpack::<fs_err::tokio::file::File, &std::path::PathBuf>::{closure#0}
0.0%   0.2%  27.1KiB              prek prek::archive::unpack::<fs_err::tokio::file::File, &std::path::PathBuf>::{closure#0}
0.0%   0.2%  27.1KiB              prek prek::archive::unpack::<fs_err::tokio::file::File, &std::path::PathBuf>::{closure#0}
0.0%   0.2%  27.0KiB              prek prek::archive::unpack::<fs_err::tokio::file::File, &std::path::PathBuf>::{closure#0}
0.0%   0.2%  27.0KiB              prek prek::archive::unpack::<fs_err::tokio::file::File, &std::path::PathBuf>::{closure#0}
4.0%  87.0%  11.1MiB                   And 20669 smaller methods. Use -n N to show more.
4.6% 100.0%  12.7MiB                   .text section size, the file size is 276.5MiB

Base Branch Results

File  .text     Size             Crate Name
0.1%   2.6% 332.0KiB        aws_lc_sys aws_lc_0_45_0_aes_gcm_encrypt_avx512
0.1%   2.6% 332.0KiB        aws_lc_sys aws_lc_0_45_0_aes_gcm_decrypt_avx512
0.0%   0.7%  92.3KiB              prek <prek::cli::Command as clap_builder::derive::Subcommand>::augment_subcommands
0.0%   0.4%  50.3KiB annotate_snippets annotate_snippets::renderer::render::render
0.0%   0.4%  47.5KiB              prek <<prek::config::hook::HookWire as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_map::<&mut <serde_saphyr::de::deserializer::YamlDeserializer as serde_core::de::Deserializer>::deserialize_map::MA>
0.0%   0.4%  45.0KiB              prek <<prek::config::Config as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_map::<&mut <serde_saphyr::de::deserializer::YamlDeserializer as serde_core::de::Deserializer>::deserialize_map::MA>
0.0%   0.3%  44.2KiB              prek prek::run::{closure#0}
0.0%   0.3%  40.1KiB              prek <prek::cli::RunOptions as clap_builder::derive::Args>::augment_args
0.0%   0.3%  34.3KiB              prek <prek::languages::rust::rust::Rust as prek::languages::LanguageBackend>::install::{closure#0}
0.0%   0.2%  29.5KiB      serde_saphyr <granit_parser::scanner::Scanner<granit_parser::input::str::StrInput>>::fetch_more_tokens
0.0%   0.2%  29.3KiB              prek prek::archive::unpack::<fs_err::tokio::file::File, &std::path::PathBuf>::{closure#0}
0.0%   0.2%  28.0KiB              toml <toml::de::deserializer::value::ValueDeserializer as serde_core::de::Deserializer>::deserialize_any::<<prek::config::hook::HookWire as serde_core::de::Deserialize>::deserialize::__Visitor>
0.0%   0.2%  28.0KiB        aws_lc_sys aws_lc_0_45_0_edwards25519_scalarmuldouble_alt
0.0%   0.2%  27.5KiB        aws_lc_sys aws_lc_0_45_0_edwards25519_scalarmuldouble
0.0%   0.2%  27.1KiB              prek prek::archive::unpack::<fs_err::tokio::file::File, &std::path::PathBuf>::{closure#0}
0.0%   0.2%  27.1KiB              prek prek::archive::unpack::<fs_err::tokio::file::File, &std::path::PathBuf>::{closure#0}
0.0%   0.2%  27.1KiB              prek prek::archive::unpack::<fs_err::tokio::file::File, &std::path::PathBuf>::{closure#0}
0.0%   0.2%  27.0KiB              prek prek::archive::unpack::<fs_err::tokio::file::File, &std::path::PathBuf>::{closure#0}
0.0%   0.2%  27.0KiB              prek prek::archive::unpack::<fs_err::tokio::file::File, &std::path::PathBuf>::{closure#0}
0.0%   0.2%  26.9KiB              prek prek::archive::unpack::<fs_err::tokio::file::File, &std::path::PathBuf>::{closure#0}
4.0%  86.8%  10.9MiB                   And 20641 smaller methods. Use -n N to show more.
4.6% 100.0%  12.5MiB                   .text section size, the file size is 274.8MiB

prek-ci-bot Bot commented Oct 5, 2026

Copy link
Copy Markdown

⚡️ Hyperfine Benchmarks

Summary: 1 regressions, 0 improvements above the 10% threshold.

Environment
  • OS: Linux 6.17.0-1022-azure
  • CPU: 4 cores
  • prek version: prek 0.5.5+3 (57f7c8a 2026-10-05)
  • Rust version: rustc 1.99.0 (b940084d7 2026-09-28)
  • Hyperfine version: hyperfine 1.20.0
CLI Commands

Benchmarking basic commands in the main repo:

prek --version

Command Mean [ms] Min [ms] Max [ms] Relative
prek-base --version 1.8 ± 0.1 1.5 2.1 1.00
prek-head --version 1.8 ± 0.1 1.6 2.0 1.01 ± 0.08

prek list

Command Mean [ms] Min [ms] Max [ms] Relative
prek-base list 7.0 ± 0.5 6.4 8.9 1.00
prek-head list 7.1 ± 2.4 6.3 30.2 1.02 ± 0.34

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.3 ± 0.1 2.2 2.5 1.04 ± 0.13
prek-head sample-config 2.2 ± 0.3 2.0 3.8 1.00
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 12.2 ± 0.8 11.3 14.0 1.00
prek-head run --all-files 14.0 ± 5.6 11.7 29.8 1.15 ± 0.46

⚠️ Warning: Performance regression for prek run --all-files (cold - no cache): 14.8100% slower

prek run --all-files (warm - with cache)

Command Mean [ms] Min [ms] Max [ms] Relative
prek-base run --all-files 11.8 ± 0.3 11.3 12.4 1.00
prek-head run --all-files 12.1 ± 0.4 11.2 12.7 1.03 ± 0.04
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 11.9 ± 0.6 10.9 14.0 1.00
prek-head run --all-files 11.9 ± 0.4 11.0 12.6 1.01 ± 0.06
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 6.2 ± 0.7 5.6 9.7 1.00
prek-head run trailing-whitespace --all-files 6.2 ± 0.3 5.7 6.9 1.00 ± 0.13

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 5.7 ± 0.3 5.2 6.4 1.00
prek-head run end-of-file-fixer --all-files 6.0 ± 1.0 5.4 10.8 1.06 ± 0.18

prek run check-json --all-files

Command Mean [ms] Min [ms] Max [ms] Relative
prek-base run check-json --all-files 5.1 ± 0.4 4.7 6.8 1.01 ± 0.09
prek-head run check-json --all-files 5.1 ± 0.2 4.7 5.6 1.00

prek run check-yaml --all-files

Command Mean [ms] Min [ms] Max [ms] Relative
prek-base run check-yaml --all-files 5.4 ± 0.7 4.8 9.2 1.03 ± 0.16
prek-head run check-yaml --all-files 5.3 ± 0.4 4.9 7.3 1.00

prek run check-toml --all-files

Command Mean [ms] Min [ms] Max [ms] Relative
prek-base run check-toml --all-files 5.0 ± 0.2 4.7 5.9 1.00
prek-head run check-toml --all-files 5.1 ± 0.6 4.8 8.1 1.02 ± 0.13

prek run check-xml --all-files

Command Mean [ms] Min [ms] Max [ms] Relative
prek-base run check-xml --all-files 5.2 ± 0.3 4.7 5.7 1.01 ± 0.07
prek-head run check-xml --all-files 5.1 ± 0.2 4.8 5.4 1.00

prek run detect-private-key --all-files

Command Mean [ms] Min [ms] Max [ms] Relative
prek-base run detect-private-key --all-files 5.6 ± 0.8 5.1 9.8 1.00 ± 0.17
prek-head run detect-private-key --all-files 5.6 ± 0.4 5.1 7.1 1.00

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 5.7 ± 0.4 5.1 7.7 1.08 ± 0.10
prek-head run fix-byte-order-marker --all-files 5.3 ± 0.3 5.0 6.2 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 3.8 ± 0.0 3.8 3.8 1.00
prek-head install-hooks 3.8 ± 0.1 3.6 3.9 1.00 ± 0.03

prek install-hooks (warm - with cache)

Command Mean [ms] Min [ms] Max [ms] Relative
prek-base install-hooks 3.8 ± 0.1 3.7 3.9 1.00
prek-head install-hooks 3.8 ± 0.1 3.7 4.0 1.01 ± 0.03
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 7.6 ± 0.6 6.9 8.9 1.00
prek-head run 8.0 ± 0.4 7.6 8.9 1.06 ± 0.10

prek run --files '*.json' (specific file type)

Command Mean [ms] Min [ms] Max [ms] Relative
prek-base run --files '*.json' 4.4 ± 0.5 4.1 6.3 1.09 ± 0.12
prek-head run --files '*.json' 4.0 ± 0.1 3.8 4.3 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 5.2 ± 0.4 4.8 6.6 1.00
prek-head run --dry-run --all-files 5.3 ± 0.1 5.0 5.6 1.03 ± 0.09
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 6.6 ± 1.2 5.9 10.8 1.07 ± 0.20
prek-head run check-hooks-apply --all-files 6.2 ± 0.3 5.8 7.0 1.00

prek run check-useless-excludes --all-files

Command Mean [ms] Min [ms] Max [ms] Relative
prek-base run check-useless-excludes --all-files 6.2 ± 0.1 6.0 6.4 1.07 ± 0.03
prek-head run check-useless-excludes --all-files 5.8 ± 0.1 5.5 6.0 1.00

prek run identity --all-files

Command Mean [ms] Min [ms] Max [ms] Relative
prek-base run identity --all-files 5.3 ± 0.1 5.1 5.6 1.02 ± 0.12
prek-head run identity --all-files 5.2 ± 0.6 4.7 7.1 1.00

This branch has not been deployed

No deployments
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

Labels

bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant


Back | FazBrowse Home | New Git URL